## 七、 Postfix TLS SMTP
生成密钥对
cd /etc/postfix
openssl req -new -outform PEM -out postfix.cert -newkey rsa:2048 -nodes -keyout postfix.key -keyform PEM -days 1825 -x509
输入国家名代码(中国是 CN 大写)和城市、组织 /公司名、管理员邮箱等信息
为确保安全,密钥的有效期是 1825 天,即 5 年, 5 年后需要重新生成密钥。 1825 也可以改成其他数字。
在 /etc/postfix/
main.cf 中修改或新建以下设置项
smtp_tls_security_level = may
smtpd_tls_security_level = may
smtp_tls_note_starttls_offer = yes
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom
smtpd_tls_cert_file=/etc/postfix/postfix.cert
smtpd_tls_key_file=/etc/postfix/postfix.key
注释掉原有的这两项:
# smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
# smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
在 /etc/postfix/
master.cf 中,取消 smtps 段的注释并作如下修改
smtps inet n - - - - smtpd
-o syslog_name=postfix/smtps
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o smtpd_tls_auth_only=yes
-o smtpd_sasl_tls_security_options=noanonymous
注意 -o 行的缩进是两个空格
## 八、 Courier TLS IMAP
生成密钥,有效期同样是 1825 天
cd /etc/courier
openssl req -x509 -newkey rsa:2048 -keyout imapd.pem -out imapd.pem -nodes -days 1825
修改 /etc/courier/imapd-ssl 中以下的几项
SSLPORT=993
SSLADDRESS=0.0.0.0
IMAP_TLS_REQUIRED=1
TLS_CERTFILE=/etc/courier/imapd.pem
TLS_TRUSTCERTS=/etc/ssl/certs
SSLADDRESS=0.0.0.0 表示绑定所有 IP ,接受所有来源的连接
如果 IMAP_TLS_REQUIRED 是 1 ,那么客户端只能通过 993 端口连接加密的 IMAP ,明文传输的 143 端口将拒绝接受连接
如果用了 iptables 防火墙,则配置放行规则:
-A INPUT -p tcp -m multiport --dport 587,465,993 -j ACCEPT
587, 465 是 SMTP TLS 端口, 993 是 IMAP TLS 端口
## 九、测试 SMTP 和 IMAP 安全连接
重启所有服务
service mysql restart
service postfix restart
service courier-authdaemon restart
service courier-imap restart
service courier-imap-ssl restart
service saslauthd restart
查看端口是否被正确监听
netstat -nltp | egrep '25|587|465|143|993|3306'
#以下是输出内容
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 18177/mysqld
tcp 0 0 0.0.0.0:587 0.0.0.0:* LISTEN 20534/master
tcp 0 0 0.0.0.0:143 0.0.0.0:* LISTEN 17434/couriertcpd
tcp 0 0 0.0.0.0:465 0.0.0.0:* LISTEN 20534/master
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 20534/master
tcp 0 0 0.0.0.0:993 0.0.0.0:* LISTEN 20710/couriertcpd
这里我在测试的时候,不知道为什么, Postfix 只监听 465 而不监听 587 。这两个端口的区别在于: 465 是 SSL/TLS 协议,整个连接周期内数据都是加密的;而 587 是 STARTTLS ,在客户端请求 STARTTLS 命令后才开始加密传输。
SSL/TLS SMTP 连接测试
openssl s_client -connect
mta.qaq.cat:465 CONNECTED(00000003)
depth=0 C = CN, ST = Shanghai, L = Shanghai, O = MoeNet, OU = MoeMail, CN = MoeMail, emailAddress =
[email protected] verify error:num=18:self signed certificate
verify return:1
depth=0 C = CN, ST = Shanghai, L = Shanghai, O = MoeNet, OU = MoeMail, CN = MoeMail, emailAddress =
[email protected] verify return:1
---
证书信息略去
---
220
moemail.qaq.cat ESMTP Postfix (Debian/GNU)
HELO
qq.com 250
moemail.qaq.cat AUTH LOGIN
334 VXNlcm5hbWU6
(这里输入 base64 编码的邮箱)
334 UGFzc3dvcmQ6
(base64 编码的密码)
235 2.7.0 Authentication successful
QUIT
221 2.0.0 Bye
closed
SSL/TLS IMAP 链接测试
openssl s_client -connect
mta.qaq.cat:993 CONNECTED(00000003)
depth=0 C = CN, ST = Shanghai, L = Shanghai, O = MoeNet, OU = MoeMail, CN = MoeMail, emailAddress =
[email protected] verify error:num=18:self signed certificate
verify return:1
depth=0 C = CN, ST = Shanghai, L = Shanghai, O = MoeNet, OU = MoeMail, CN = MoeMail, emailAddress =
[email protected] verify return:1
---
证书信息略去
---
- OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE AUTH=PLAIN ACL ACL2=UNION] Courier-IMAP ready. Copyright 1998-2011 Double Precision, Inc. See COPYING for distribution information.
A01 LOGIN
[email protected] adminpasswd
A01 OK LOGIN Ok.
A20 LOGOUT
- BYE Courier-IMAP server shutting down
A20 OK LOGOUT completed
closed
## 十、最后的清理工作
编辑 /etc/courier/authdaemonrc 关闭 DEBUG ,以免 log 泄露重要信息
DEBUG_LOGIN=0
Enjoy it!