下面详细讲解邮件服务器(Postfix/Dovecot)的SSL证书配置,涵盖SMTP、IMAP、POP3三个协议如下。
一、证书准备
1. 获取证书
商业证书:从CA机构购买(DigiCert、Let's Encrypt等)
Let's Encrypt免费证书:
bash
安装certbot
sudo apt install certbot
获取证书(假设域名为mail.example.com)
sudo certbot certonly --standalone -d mail.example.com
证书位置:
/etc/letsencrypt/live/mail.example.com/
├── fullchain.pem # 证书链(服务器证书+中间证书)
├── privkey.pem # 私钥
└── chain.pem # 中间证书
2. 自签名证书(测试环境)
bash
生成私钥和自签名证书
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/ssl/private/mail.key \
-out /etc/ssl/certs/mail.crt \
-subj "/CN=mail.example.com"
二、Postfix (SMTP) 配置
1. 主配置文件 /etc/postfix/main.cf
bash
TLS/SSL配置
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.example.com/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/mail.example.com/privkey.pem
启用TLS
smtpd_use_tls = yes
smtpd_tls_security_level = may
smtpd_tls_auth_only = yes
强制TLS连接(可选,更安全)
smtpd_tls_security_level = encrypt
TLS协议版本
smtpd_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtpd_tls_ciphers = high
SMTP提交端口587的TLS配置
submission inet n - y - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
2. 重启Postfix
bash
sudo systemctl restart postfix
三、Dovecot (IMAP/POP3) 配置
1. SSL配置 /etc/dovecot/conf.d/10-ssl.conf
bash
启用SSL
ssl = required
证书路径
ssl_cert = </etc/letsencrypt/live/mail.example.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.example.com/privkey.pem
安全配置
ssl_prefer_server_ciphers = yes
ssl_cipher_list = ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384
ssl_protocols = !SSLv3 !TLSv1 !TLSv1.1
DH参数(增强安全性)
ssl_dh = </usr/share/dovecot/dh.pem
生成DH参数(如果没有)
sudo openssl dhparam -out /etc/dovecot/dh.pem 4096
2. 配置端口 /etc/dovecot/conf.d/10-master.conf
bash
service imap-login {
inet_listener imap {
port = 143
ssl = no # STARTTLS
}
inet_listener imaps {
port = 993
ssl = yes # SSL/TLS
}
}
service pop3-login {
inet_listener pop3 {
port = 110
ssl = no # STARTTLS
}
inet_listener pop3s {
port = 995
ssl = yes # SSL/TLS
}
}
3. 重启Dovecot
bash
sudo systemctl restart dovecot
四、防火墙配置
bash
开放邮件端口
sudo ufw allow 25 # SMTP
sudo ufw allow 465 # SMTPS(隐式SSL)
sudo ufw allow 587 # SMTP提交(STARTTLS)
sudo ufw allow 993 # IMAPS
sudo ufw allow 995 # POP3S
sudo ufw allow 143 # IMAP(STARTTLS)
sudo ufw allow 110 # POP3(STARTTLS)
五、Let's Encrypt自动续期
bash
创建续期脚本
sudo nano /etc/cron.daily/certbot-renew
!/bin/bash
certbot renew --quiet --post-hook "systemctl reload postfix dovecot"
添加执行权限
sudo chmod +x /etc/cron.daily/certbot-renew
六、测试配置
1. 检查证书
bash
检查证书信息
openssl x509 -in /etc/letsencrypt/live/mail.example.com/fullchain.pem -text -noout
测试SMTP TLS
openssl s_client -connect mail.example.com:587 -starttls smtp
测试IMAPS
openssl s_client -connect mail.example.com:993
测试POP3S
openssl s_client -connect mail.example.com:995
2. 在线测试工具
SSL Labs:检查SSL配置安全性
CheckTLS:测试邮件服务器TLS配置
七、常见问题解决
1. 权限问题
bash
# 确保私钥权限正确
sudo chmod 600 /etc/ssl/private/mail.key
sudo chown root:root /etc/ssl/private/mail.key
2. SELinux问题(CentOS/RHEL)
bash
设置证书文件上下文
sudo semanage fcontext -a -t cert_t "/etc/letsencrypt/live/mail.example.com(/.*)?"
sudo restorecon -Rv /etc/letsencrypt/live/mail.example.com/
3. 日志查看
bash
查看Postfix TLS日志
sudo grep -i tls /var/log/mail.log
查看Dovecot SSL错误
sudo doveadm log find | grep -i ssl
八、安全建议
强制使用TLS:生产环境建议设置为encrypt级别
禁用弱协议:禁用SSLv2、SSLv3、TLSv1.0、TLSv1.1
定期更新:关注安全公告,及时更新TLS配置
证书监控:设置证书过期提醒
使用强密码套件:
bash
ssl_cipher_list = ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384
通过上面这样配置后,您的邮件服务器将在SMTP、IMAP、POP3三个协议上都支持安全的SSL证书连接。