因為已經取得 免費的 SSL 憑證:Let’s Encrypt!
所以就想把這個 SSL憑證 也用在 Postfix 上,讓 smtp 可以使用 TLS 加密
也可以開啟 smtps 服務 (Port 465)
環境說明
- CentOS 7 x64
- Postfix 2.10.1
開啟的方法其實很簡單
編輯 /etc/postfix/main.cf 設定檔,加入以下設定值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# 讓 smtp 支援 TLS 加密 smtpd_use_tls = yes # 是否強制使用加面驗證 smtpd_tls_auth_only = no # 範例使用 ezbox.idv.tw 的 SSL 憑證,請自行修改 smtpd_tls_cert_file = /etc/letsencrypt/live/ezbox.idv.tw/fullchain.pem smtpd_tls_key_file = /etc/letsencrypt/live/ezbox.idv.tw/privkey.pem tls_random_source = dev:/dev/urandom # 如果希望在 mail 的 header 加上 SSL/TLS 相關資訊,可以做這個設定 smtpd_tls_received_header=yes # 以上設定完成重新啟動 postfix 就可以支援 TLS 了 # 但是這僅限於 使用者 和 postfix 之間的傳輸 # 而 postfix 在將要寄出的信件轉送出去到目的郵件伺服器時,還是沒加密 # 所以再加上下面的設定,就可以讓 postfix 在轉送郵件時也嘗試加密 smtp_use_tls = yes smtp_tls_note_starttls_offer = yes # 最後確認 下面的設定值當中的包含 "reject_unauth_destination" # smtpd_relay_restrictions (Postfix ≥ 2.10) # smtpd_recipient_restrictions (Postfix < 2.10) |
存檔重新啟動 postfix 後,SMTP (Port 25) 應該就可以支援 TLS 加密了
稍微測試一下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
$ telnet localhost 25 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. 220 ezbox.idv.tw ESMTP Postfix ehlo localhost 250-ezbox.idv.tw 250-PIPELINING 250-SIZE 10240000 250-ETRN 250-STARTTLS 250-AUTH PLAIN LOGIN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN quit 221 2.0.0 Bye Connection closed by foreign host. |
第11行有顯示 STARTTLS 代表設定正確
也可以使用 CheckTLS.com 的測試功能幫忙測試一下
填上主機上可收信的信箱,按下 Start Test 即可
再來是開啟 smtps (Port 465)服務的設定方式
編輯 /etc/postfix/master.cf 設定檔
1 2 3 4 |
# 找到這三行將行首的註解拿掉,沒有找到的話加上這三行 smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes |
重新啟動就可以開啟 smtps 服務
參考資料
延伸閱讀