CENTOS 7.X 安裝PPTP VPN

首先安裝yum第三方EPEL套件庫

yum install epel-release -y

更新套件

yum update -y

安裝pptpd

yum install ppp pptpd -y

備份設定檔

cp /etc/pptpd.conf /etc/pptpd.conf.bak

將pptpd連接的網址寫上設定檔(放在最下面即可)

localip 192.168.10.1
remoteip 192.168.10.2-254

備份option設定檔

cp /etc/ppp/options.pptpd /etc/ppp/options.pptpd.bak

搜尋ms-dns,將前面#去掉如下,設定dns

ms-dns 8.8.8.8
ms-dns 8.8.4.4

備份系統設定

cp /etc/sysctl.conf /etc/sysctl.conf.bak

將下面的資料填入該系統設定檔sysctl.conf

3
net.core.wmem_max = 12582912
net.core.rmem_max = 12582912
net.ipv4.tcp_rmem = 10240 87380 12582912
net.ipv4.tcp_wmem = 10240 87380 12582912
net.core.wmem_max = 12582912
net.core.rmem_max = 12582912
net.ipv4.tcp_rmem = 10240 87380 12582912
net.ipv4.tcp_wmem = 10240 87380 12582912
net.core.wmem_max = 12582912
net.core.rmem_max = 12582912
net.ipv4.tcp_rmem = 10240 87380 12582912
net.ipv4.tcp_wmem = 10240 87380 12582912
net.ipv4.ip_forward = 1

設定防火牆

firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -i eth0 -p tcp --dport 1723 -j ACCEPT
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -p gre -j ACCEPT
firewall-cmd --permanent --direct --add-rule ipv4 nat POSTROUTING 0 -s 192.168.10.0/24 -o eth0 -j MASQUERADE
firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -i ppp+ -o eth0 -j ACCEPT
firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -i eth0 -o ppp+ -j ACCEPT
firewall-cmd --reload

注意,eth0是公網的乙太網路,如果有不一樣需要修改。

設定登入帳號密碼,/etc/ppp/chap-secrets

#帐号    服务器    密码    IP地址
"user1"    pptpd    "123456"  *

注意:帳號密碼必須要加上雙引號。

啟動pptp

systemct restart pptpd

如果有任何問題,要查看日誌則去看/var/log/messages

Ubuntu CLI 操作Google Drive雲端硬碟

  1. 必須安裝Go程式,有關安裝方式可以參考這個網頁
  2. 設置Google存取權限(credentials),這裡可以設定自有的Google credential
    1. Google API Console
    2. 建立新的專案 (Create a new project)
    3. 啟動Google Drive API
    4. 設置Consent Screen
    5. 選擇OAtu client ID建立存取權限
  3. 下載與安裝gdrive程式並設置存取權限
    go get github.com/prasmussen/gdrive
  4. 下載之後,會存放在 $GOPATH/src/github.com/prasmussen/gdrive 文件夾,到這文件夾,可以找到一份設定檔案為 handlers_drive.go ,請打開這個文件,並修改第17/18行,將前面在Google Drive API設定的存取權限的Client ID與ClientSecret填入如下
    const ClientId = "367116221053-7n0v**.apps.googleusercontent.com"
    const ClientSecret = "1qsNodXN*****jUjmvhoO"
    
  5. 將專案建立起來
    $go build
  6. 建立之後,執行go env檢查環境參數,應該會有一個如下顯示的資料:
    $env:GOOS = "linux"
  7. 將建立的程式複製到可執行的地方,例如 /usr/sbin
    sudo mv gdrive /usr/sbin/gdrive
  8. 執行 gdrive list指令,會出現類似下面的畫面:
    這時,將https://accounts.google.com…整段網址複製再貼到瀏覽器,登入您的google帳號
  9. 選擇您的Google Drive的帳號讓這gdrive可以存取
  10. 將權限授予此應用程式,即可獲取驗證碼(verification code)
  11. 再將驗證碼貼到剛剛gdrive程式執行所需填入的verification code,完成後會出現您在Google Drive的檔案與文件夾資料。
  12. 測試上傳功能,
     # 上傳到Google Drive根目錄
    gdrive upload test.zip
    
    # 上傳到Google Drive的特定目錄。特定目錄的代碼,可透過網頁google drive上進行查看
    gdrive upload --parent 1dYSp4NcaRTykSebFt-UoAadszRhMQciX test.zip

在Ubuntu 16.04上安裝Postfix+Dovecot+SquirrelMail以及相關設置

Postfix:Postfix是一個免費的開源軟件應用程序,可用作郵件傳輸代理(MTA),用於路由和傳遞電子郵件。提供SMTP服務接收與傳送郵件。

DoveCot: 主要提供POP3與IMAP服務,可提供遠端client連線到郵件伺服器。Dovecot是一個開源MDA(郵件傳遞代理),負責向服務器上的本地收件人郵箱發送電子郵件。Dovecot實現了IMAP(Internet消息訪問協議)和POP3(郵局協議),因此仍然是通過(郵件用戶代理)MUA(如Squirrelmail,Ms Outlook,Thunderbird或Roundcube)訪問電子郵件的不錯選擇。

SquirrelMail:是一套提供網頁電子郵件(WebMail)服務。

1. 安裝網頁伺服器(Apache2 + php + letsEncrypt SSL)

$ sudo apt-get update
$ sudo apt-get install apache2
$ sudo apt-get install php libapache2-mod-php
$ sudo apt-get install software-properties-common python-software-properties
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
$ sudo apt-get install python-certbot-apache
$ sudo certbot --apache -d example.com 

安裝letsencrypt SSL 系統將提示您輸入電子郵件地址以進行緊急SSL續訂和緊急通知。 輸入地址,然後按Enter鍵。
接下來,按A並按Enter鍵以同意條款和條件。
如果您想與Electronic Frontier分享您的電子郵件,請按Y並按Enter鍵,否則按N並按Enter鍵。
在SSL安裝結束時,系統會詢問您是否要重定向流量,只需為沒有重定向選擇1並按Enter鍵

你最後應該得到一個祝賀信息:

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/example.com/privkey.pem
   Your cert will expire on 2018-11-04. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. To non-interactively renew *all* of
   your certificates, run "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

2. 安裝Postfix

$ sudo apt-get install postfix

執行此安裝指令後,會出現下面畫面,按下TAB到OK,然後按下enter繼續:

下面畫面選擇Internet Site:

下面畫面輸入電子郵件所在的網域:

3. 設定Postfix:

我們將對postfix配置文件進行一些更改。 我們將備份原始文件並創建一個新的配置文件,而不是編輯文件/etc/postfix/main.cf:

$ sudo mv /etc/postfix/main.cf /etc/postfix/main.cf.bk
$ sudo nano /etc/postfix/main.cf

下面是設定的範例:

smtpd_banner = $myhostname ESMTP $mail_name
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no
readme_directory = no

#SMTP CONFIGURATION
smtp_use_tls=yes
smtp_tls_security_level = may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

# SMTPD CONFIGURATIONS
# SMTPD AUTHENTICATION

smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth


# SMPTD TLS

smtpd_use_tls=yes
smtpd_tls_security_level = may
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache

smtpd_tls_cert_file=/etc/letsencrypt/live/example.com/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/example.com/privkey.pem

myhostname = mail.example.com
myorigin = /etc/mailname
mydestination =  localhost.$mydomain, localhost
relayhost = 
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases

此設定並未採用virtual mailbox,若此伺服器提供多個mail server服務,則需採用virtual mailbox。

4. 安裝與設定Dovebot:

接下來,我們將安裝Dovecot以及IMAP,POP和LTMPD所需的所有軟件包。 後者使用本地郵件傳輸協議(LMTP)將電子郵件傳遞到本地收件箱。

當電子郵件發送到我們的服務器時,Postfix會將其傳遞給Dovecot以進行本地傳遞。 此外,我們的電子郵件客戶端SquirrelMail將通過Dovecot通過IMAP協議從本地存儲中檢索電子郵件。

$ sudo apt-get install dovecot-core dovecot-imapd dovecot-pop3d

啟用 IMAP / POP3 登入
修改 /etc/dovecot/conf.d/10-auth.conf,我們的SSL將採用letsencrypt的SSL證書,他是免費又好用的SSL。

一般使用者的發送 Email 的流程,不是 Webmail 就是用 SMTP。這裡 SMTP 清晰一點是 SMTP Submission,即是 MUA 透過 MSA 委托 MTA 代為傳送郵件 (Relay)。而 SMTP Submission 當然需要有登入設定,不然肯定會成為 Spam Mail 的 Open Relay了。現在的 Postfix 預設設定已經不允許 Open Relay,所以必需先設定登入機制才能外部使用。

Postfix 使用模組化的設計,各部分都是分開的。換句話說您可以使用很多不同的登入插件,SASL (Simple Authentication and Security Layer) 就提供 Postfix 和 登入插件間的溝通。

Postfix 目前支援 Cyrus 和 Dovecot 的 SASL 實作。本部分是為了將 SMTP 的 MSA 登入驗證整合到 Dovecot。
啟用 SMTP Submission Port 587
目前很多 ISP 封鎖了 Port 25 的連線,所以要改用協議中定義的 Port 587 來收件。修改 /etc/postfix/master.cf,把這一行 Uncomment 就好了。

submission inet n       -       -       -       -       smtpd

Dovecot SASL / Postfix 整合
啟用 Dovecot 內建的 SASL,修改 /etc/dovecot/conf.d/10-master.conf
Uncomment “#Postfix smtp-auth” 下面一段,並加入 user 及 group。

service auth {
  # auth_socket_path points to this userdb socket by default. It's typically
  # used by dovecot-lda, doveadm, possibly imap process, etc. Its default
  # permissions make it readable only by root, but you may need to relax these
  # permissions. Users that have access to this socket are able to get a list
  # of all usernames and get results of everyone's userdb lookups.
  unix_listener auth-userdb {
    #mode = 0600
    #user =
    #group =
  }
 
  # Postfix smtp-auth
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postdrop
  }
 
  # Auth process is run as this user.
  #user = $default_internal_user
}

Dovecot 建議只在 SMTP Submission (Port 587) 啟用 SASL 驗證,
原因是當 Dovecot SASL 不可用時,也不至於連收信都失敗。
我們就按指引完成:

修改 /etc/postfix/master.cf,把之前指定在 main.cf 的設定都搬過來,並指定 SASL Socket Path

submission inet n       -       -       -       -       smtpd
 -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination,reject_authenticated_sender_login_mismatch
 -o smtpd_sasl_local_domain=$myhostname
 -o smtpd_sasl_auth_enable=yes
 -o smtpd_sasl_security_options=noanonymous
 -o smtpd_sasl_type=dovecot
 -o smtpd_sasl_path=private/auth
 -o broken_sasl_auth_clients=yes

這個 master.cf 的格式 非常嚴格:
= 前後都不能有空格
-o 前面必需有空格
每項 Option 的 Value 必不能有空格
不能換行,smtpd_recipient_restrictions 要用逗號隔開
修改完成用 Telnet 測試:

telnet 127.0.0.1 587

如果有出現 220 Response 的話,恭喜中獎了

220 server.tiger-workshop-mail.com ESMTP Postfix

若沒有,則查看/var/log/mail.log,看看問題在哪裡。
若成功了,執行ehlo local就會看到下面的敘述:

telnet localhost 587
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mail.dubugroup.com ESMTP Postfix (Ubuntu)
ehlo localhost
250-mail.dubugroup.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN
250-AUTH=PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN

若看到下面兩個,代表可以驗證成功了!!

250-AUTH PLAIN
250-AUTH=PLAIN

透過外部 SMTP 發送成功了,Email 當然還帶有前面設定過的 SPF 和 DKIM。

到了這裏,只要設定 Dovecot 的 User,
SMTP、IMAP、POP3 都會使用同一個 Username & Password,
而且收信地址也會跟 Username 一樣,實在太美好了…

Ubuntu 其實有提供一個 Package “dovecot-postfix” 整合套件,直接完成以上的東西。
這跟 Windows 下的 XAMPP 和手動安裝 Apache, MySQL, PHP 然後手動整合一樣,
手動設定會學到比較多原理,Debug 比較容易吧。

最後安裝SquirrelMail網頁郵件:
接下來我們可以配置SquirrelMail客戶端。 該應用程序是通過SMTP和IMAP協議發送和接收電子郵件的理想選擇,可以在任何瀏覽器上運行。

要安裝該軟件,請運行以下命令:

$ sudo apt-get install squirrelmail

照著指示依序安裝後即可。
接下來,我們將把SquirrelMail路徑添加到Apache的默認虛擬主機文件中,該文件啟用了LetsEncrypt的加密SSL證書。

$ sudo nano /etc/apache2/sites-enabled/000-default-le-ssl.conf

在ServerName後面加上Alias設置,Alias /mail /usr/share/squirrelmail

<VirtualHost *:443>
... 
ServerName example.com
Alias /mail /usr/share/squirrelmail
...
</VirtualHost>

接著設置SquirrelMail就很簡單了

$domain = 'example.com';
$imapServerAddress = 'example.com';
$imapPort=993;  
$smtpPort=465; 
$smtp_auth_mech='login';
$use_imap_tls='true';
$use_smpt_tls='true';

修改/etc/access

用來允許或拒絕RELAY的網域,可參考 這裡。設定後,執行下面的指令才可轉換為access.db

 postmap hash:/etc/postfix/access

設定別名(Alias)

作為群組發信的很重要的應用,例如:[email protected],這個sales是個團隊,將發送到sales可轉發給其他特定的人員,其詳細說明可參考這裡。執行下面的指令才可轉換aliases.db

postalias hash:/etc/aliases

 

如何利用ffmpeg將影片轉換成HLS切片

HLS(HTTP Live Stream)是蘋果推出的影音串流的標準,目前可支援大多數的行動裝置與電視盒,如何利用ffmpeg將直播或影片進行切片(chunk)轉成HLS格式。
編碼參數說明不多敘述。

直播

以udp為例:

ffmpeg -y -i udp://@:10000 -c copy -hls_segment_type fmp4 -hls_time 6 -hls_list_size 10 -hls_flags delete_segments+append_list+split_by_time -hls_playlist_type event ~/hls/index_4000.m3u8

影音編碼器(Encoder)將直播訊號發送到轉碼用PC(Transcoding PC),將影音內容的編碼方式直接轉換(-c copy)。
-hls_time:設定每個切片(chunk)的長度(秒),這裡設定為6秒一個切片。
-hls_segment_type: fmp4 or mpegts,切片的格式為mp4或者為mpeg-2 ts格式,目前hls version 7以上可採用mp4格式類似於mpeg-dash
-hls_list_size:設定playlist播放清單最多的內容,如果是0則無限制。因此為直播內容,可預先保留最大的值,這裡設定為10,就是會預先切個10個切片的播放清單,前面hls_time設定為6秒,切十個,就是預留60秒的內容進行播放。相對的,就有會將近60秒的延遲。
-hls_flags:有很多參數可用,這裡使用了delete_segments, append_list, split_by_time, 分述如下:

  • delete_segments: 在segment的持續時間加上播放列表(playlist)的持續時間之後的一段時間之後刪除從播放列表中刪除的段文件(segment)。
  • append_list: 將新segment添加到舊segment列表的末尾,並從舊段列表中刪除#EXT-X-ENDLIST。
  • split_by_time: 允許segment在關鍵幀(key frame)以外的幀上啟動。 當關鍵幀之間的時間不一致時,這會改善某些玩家的行為,但可能會使其他播放器的情況變得更糟,並且在搜索過程中可能會導致一些奇怪的現象。 此標誌應與hls_time選項一起使用。

-hls_playlist_type: event,發出#EXT-X-PLAYLIST-TYPE:m3u8標題中的EVENT。 強制hls_list_size為0; 播放列表(playlist)只能附加到。

點播內容:

此應用就是將一個mp4的影音檔案進行切割成HLS的切面,因此,也就是mp4的檔案轉換程式:

ffmpeg -i $1 -profile:v baseline -level 3.0 -s 640x360 -start_number 0 -hls_time 10 -hls_list_size 0 -f hls ${1%.*}.m3u8

為了讓多數的播放器,特別是行動裝置,這裡將影音的格式轉為mpeg-4, h264, baseline level 3.0的格式,以及640×360的影片大小,讓絕大多數的播放器都可以正常播放。
-start_number 0: 從一開始就進行切片
-hls_list_size 0: 如前述,這裡因為是要把整個mp4檔案轉換,所以就不限定playlist的內容大小了。

有關ffmpeg的HLS以及格式參數可參考這網址:https://ffmpeg.org/ffmpeg-formats.html