本系列第六篇: 使用 Let’s Encrypt 免費證書加密 SMTP
前面第四篇已設定好了 Dovecot SMTP 認證,
但在多數 MUA 上無法啓用連綫加密,原因是我們未設定好加密的證書。
轉眼距離上一篇已經兩年多,
現在已經是全民加密,免費證書的年代了,就用 Let’s Encrypt 搞個免費證書吧。
1. 安裝 Apache 和 Let’s Encrypt Apache 套件
apt-get install apache2 python-letsencrypt-apache
Let’s Encrypt 是用 ACME Protocol 管理並發出證書的
方法是對目標 Domain 發起 HTTPS request, 以進行 Domain Validation
所以要先安裝 Apache, 並從 Firewall 打開 Port 80 和 443
當然 Domain 要指向 Mail Server 啦
2. 向 Let’s Encrypt 要求簽發證書
有多個 Subdomain 的話, 可以用多個 -d
指定
letsencrypt --apache -d domain1.com
或
letsencrypt --apache -d domain1.com -d smtp.domain1.com -d pop3.domain1.com -d imap.domain1.com
3. 設定證書自動更新
Let’s Encrypt 的證書每 90 天就會過期,過期前 30 天可以更新
所以要設定 Crontab 自動更新證書
vim ~/letsencrypt-renew.sh
#!/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin letsencrypt renew
crontab -e
加入這行
0 0 * * * ~/letsencrypt-renew.sh
chmod +x ~/letsencrypt-renew.sh
因為直接在 crontab 運行 letsencrypt renew
會遇到莫名的錯誤, 所有要弄個 Bash Shell 來 Set Path
3. 設定 Postfix (SMTP)
修改 /etc/postfix/main.cf
, 把兩個設定指向 Cert 和 Private Key
smtpd_tls_cert_file=/etc/letsencrypt/live/domain1.com/fullchain.pem smtpd_tls_key_file=/etc/letsencrypt/live/domain1.com/privkey.pem
提高 TLS 安全性, 停用不安全的 Ciphers
smtpd_tls_ciphers = high
smtpd_tls_protocols = TLSv1,!SSLv2,!SSLv3
smtpd_tls_exclude_ciphers = aNULL,DES,3DES,MD5,DES+MD5,RC4
4. 設定 Dovecot (POP3/IMAP)
修改 /etc/dovecot/conf.d/10-ssl.conf
, 把 tls 啓用並兩個設定指向 Cert 和 Private Key
ssl = yes ssl_cert = </etc/letsencrypt/live/domain1.com/fullchain.pem ssl_key = </etc/letsencrypt/live/domain1.com/privkey.pem
提高 TLS 安全性, 停用不安全的 Ciphers
ssl_protocols = !SSLv2:!SSLv3 ssl_cipher_list = ALL:!LOW:!SSLv2:!EXP:!aNULL:!RC4::!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS
修改 /etc/dovecot/conf.d/10-auth.conf
關閉先前打開的 Plain Text 登入
disable_plaintext_auth = no
auth_mechanisms = plain
完成!SMTP/POP3/IMAP 現在有正式的加密證書了
用您熟悉的 MUA 嘗試建立加密連線吧
有需要的話, 也可以把前一篇建立的 Webmail 設定 HTTPS 加密
有關 HTTPS 的設定, 可以參考另一篇 Blog