Postfix SASL 轉寄站
1. 引言
這份指南被設計來補充基本的 postfix 指南。它是針對 CentOS 7 和 8 而寫成。CentOS 6 的設定會有所不同。
2. SASL 是甚麼,我需要它嗎?
SASL(簡單鑑定和安全層)提供一個以名稱及密碼來驗證讓用戶的機制。最負盛名的 SASL 方案要算是 Cyrus SASL 提供的程式庫。
假若你的 ISP 封鎖 25 號埠的連線並要求你在發電郵時進行驗證,你必須設置 SASL。
3. 還有 SSL/TLS 呢?
可見 SASL 能夠提供一個機制,透過用戶名稱及密碼來驗證那些想利用郵件伺服器來發放郵件的遠端用戶。然而,我們面對的一個問題就是這些機制都以純文字在互聯網上傳送用戶名稱及密碼(SASL 可支援如 DIGEST-MD5 等加密的驗證方法,但它們並未必獲電郵客戶端軟件廣泛支援)。這構成一個安全性危機,因為任何人都有可能攔截這些資訊並盜取登入資料,所以我們須要將連線加密。SSL(安全套接層)及較新的 TLS(傳輸層安全)提供一個機制將兩台主機之間的通訊加密,在這個例子中就是我們的郵件伺服器及遠端客戶端。SSL 由第 3.1 版開始被 IETF 改名為 TLS。
4. 研究你的 ISP
你必須參詳你的 ISP 文檔並找出進行驗證 SMTP 用的伺服器和連接埠。在此範例中,我們選用虛構的 ISP "example.com",它的 SMTP 伺服器位於 smtp.example.com 的 587 號連接埠。
5. 在 postfix 內設置 SASL
第一步是建立一個含有你的 ISP 憑證的檔案。
$ echo "smtp.example.com:587 我的帳號@example.com:我的密碼" | sudo tee /etc/postfix/relay_creds $ sudo postmap /etc/postfix/relay_creds $ sudo chmod go-rwx /etc/postfix/relay_creds*
第二步是將新的設定加進 postfix 的 main.cf 檔內。
$ sudo tee -a /etc/postfix/main.cf <<EoT # 為轉寄站加入 SASL 的支援 # 轉寄所有郵件用的主機 relayhost = [smtp.example.com]:587 # 啟用 SASL 驗證 smtp_sasl_auth_enable = yes # 在哪裡找 sasl_passwd smtp_sasl_password_maps = hash:/etc/postfix/relay_creds # 佔用允許匿名驗證的方法 smtp_sasl_security_options = noanonymous # 啟用 STARTTLS 加密 smtp_use_tls = yes EoT $ sudo systemctl restart postfix.service
請參閱 Postfix 網站 有關上述設定選項的詳情。
6. 寄件測試
SASL 已被設置,而郵件將會經由轉寄站發放。請檢查 /var/log/maillog 內是否出現錯誤。假如你需要更新憑證,請執行 "postmap /etc/postfix/relay_creds" 及 "service postfix reload"。
如果你發現有關電郵被不知名用戶寄出的錯誤,你或許須要以你的 ISP 戶口的電郵地址寄出所有電郵。在這個範例中,請改用你的 ISP 所提供的電郵地址。
$ echo '/.*/ MyUserName@example.com' | sudo tee -a /etc/postfix/sender_canonical $ sudo postmap /etc/postfix/sender_canonical $ echo 'sender_canonical_maps = regexp:/etc/postfix/sender_canonical' | sudo tee -a /etc/postfix/main.cf $ sudo systemctl restart postfix.service
Translation of revision 9