CentOS 7 搭建 Postfix + Dovecot 邮件系统并配置 SMTP、POP3、IMAP 与 TLS
CentOS 7 搭建 Postfix + Dovecot 邮件系统并配置 SMTP、POP3、IMAP 与 TLS
1. 服务介绍
Postfix 是邮件传输代理(MTA),负责通过 SMTP 接收、投递和转发邮件;Dovecot 提供 POP3、IMAP 和用户认证,让客户端读取邮箱。两者组合后可搭建基础邮件系统,并通过 TLS 保护客户端认证和邮件传输。本实验配置域名解析、本地域账号、Maildir 邮箱、SMTP AUTH、Submission 端口以及 Outlook 收发测试。
2. 准备运行环境
示例环境如下:
| 角色 | 地址 | 用途 |
| --- | --- | --- |
| 邮件服务器 | 10.1.100.101 |mail.qwe.com,运行 Postfix 和 Dovecot |
| 邮件域 | qwe.com | 用户邮箱域名 |
| Windows 客户端 | 10.1.100.50 | Outlook 收发测试 |
| 测试用户 | qwe、ewq |qwe@qwe.com、ewq@qwe.com|
• 操作系统:CentOS 7.x。
• 操作账号:root 或具备 sudo 权限的管理员。
• 软件源:YUM 可用。
• DNS:mail.qwe.com的 A 记录指向10.1.100.101,qwe.com的 MX 记录指向mail.qwe.com。
• 时间:服务端和客户端时间同步,避免 TLS 证书验证异常。
检查环境:
cat /etc/centos-release ip addr timedatectl status getent hosts mail.qwe.com dig MX qwe.com +short3. 相关知识
• SMTP 常用 TCP 25;客户端认证发信通常使用 587;POP3/POP3S 使用 110/995;IMAP/IMAPS 使用 143/993。
• MX 记录用于定位收信服务器,A 记录负责把邮件主机名解析为 IP。公网邮件还依赖 PTR、SPF、DKIM 和 DMARC。
•mynetworks只能包含可信客户端网段。设置为0.0.0.0/0会造成开放中继风险。
• Postfix 负责邮件传输,Dovecot 负责邮箱读取和 SASL 认证;排错时要区分 SMTP 投递问题与 POP3/IMAP 登录问题。
• Maildir 每封邮件单独保存,目录由cur、new、tmp组成,比传统 mbox 更适合并发访问。
•disable_plaintext_auth=yes只允许在 TLS 保护下使用 PLAIN/LOGIN 认证,避免密码明文传输。
• 实验自签名证书会触发客户端信任提示。生产环境应使用可信 CA 证书,并配置正确主机名。
• 邮件服务不应靠关闭防火墙或 SELinux 解决问题,应放行明确端口,并检查日志和安全上下文。
4. 实验步骤
4.1 配置 DNS 和主机名
DNS 区域中加入:
mail IN A 10.1.100.101 @ IN MX 10 mail.qwe.com.配置服务器主机名:
hostnamectl set-hostname mail.qwe.com hostname4.2 安装邮件组件
yum install -y postfix dovecot mailx openssl systemctl enable postfix dovecot如果系统运行 Sendmail,先停用,避免抢占 TCP 25:
systemctl disable --now sendmail 2>/dev/null alternatives --set mta /usr/sbin/sendmail.postfix 2>/dev/null4.3 配置 Postfix 基础参数
备份配置:
cp -a /etc/postfix/main.cf /etc/postfix/main.cf.bak使用postconf -e写入关键参数:
postconf -e 'myhostname = mail.qwe.com' postconf -e 'mydomain = qwe.com' postconf -e 'myorigin = $mydomain' postconf -e 'inet_interfaces = all' postconf -e 'inet_protocols = ipv4' postconf -e 'mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain' postconf -e 'mynetworks = 127.0.0.0/8, 10.1.100.0/24' postconf -e 'home_mailbox = Maildir/' postconf -e 'smtpd_banner = $myhostname ESMTP' postconf -e 'relay_domains = $mydestination'限制中继目标:
postconf -e 'smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination'4.4 创建测试账号和 Maildir
useradd qwe passwd qwe useradd ewq passwd ewq创建邮箱目录:
maildirmake.dovecot /home/qwe/Maildir maildirmake.dovecot /home/ewq/Maildir chown -R qwe:qwe /home/qwe/Maildir chown -R ewq:ewq /home/ewq/Maildir chmod -R 700 /home/qwe/Maildir /home/ewq/Maildir4.5 创建实验 TLS 证书
mkdir -p /etc/pki/mail/private /etc/pki/mail/certs openssl req -x509 -nodes -newkey rsa:2048 -days 365 \ -keyout /etc/pki/mail/private/mail.qwe.com.key \ -out /etc/pki/mail/certs/mail.qwe.com.crt \ -subj '/C=CN/ST=Zhejiang/L=Hangzhou/O=Lab/CN=mail.qwe.com' chmod 600 /etc/pki/mail/private/mail.qwe.com.key4.6 配置 Dovecot
备份配置文件:
cp -a /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.bak cp -a /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10-auth.conf.bak cp -a /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf.bak cp -a /etc/dovecot/conf.d/10-ssl.conf /etc/dovecot/conf.d/10-ssl.conf.bak cp -a /etc/dovecot/conf.d/10-master.conf /etc/dovecot/conf.d/10-master.conf.bak在/etc/dovecot/dovecot.conf设置:
protocols = imap pop3 lmtp listen = *在/etc/dovecot/conf.d/10-auth.conf设置:
disable_plaintext_auth = yes auth_mechanisms = plain login在/etc/dovecot/conf.d/10-mail.conf设置:
mail_location = maildir:~/Maildir在/etc/dovecot/conf.d/10-ssl.conf设置:
ssl = required ssl_cert = </etc/pki/mail/certs/mail.qwe.com.crt ssl_key = </etc/pki/mail/private/mail.qwe.com.key在/etc/dovecot/conf.d/10-master.conf的service auth段加入:
unix_listener /var/spool/postfix/private/auth { mode = 0660 user = postfix group = postfix }4.7 配置 Postfix SMTP AUTH 和 TLS
postconf -e 'smtpd_sasl_type = dovecot' postconf -e 'smtpd_sasl_path = private/auth' postconf -e 'smtpd_sasl_auth_enable = yes' postconf -e 'broken_sasl_auth_clients = yes' postconf -e 'smtpd_tls_cert_file = /etc/pki/mail/certs/mail.qwe.com.crt' postconf -e 'smtpd_tls_key_file = /etc/pki/mail/private/mail.qwe.com.key' postconf -e 'smtpd_tls_security_level = may' postconf -e 'smtpd_tls_auth_only = yes' postconf -e 'smtp_tls_security_level = may'编辑/etc/postfix/master.cf,启用 587 Submission 服务:
submission inet n - n - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject4.8 配置防火墙并启动服务
firewall-cmd --permanent --add-service=smtp firewall-cmd --permanent --add-port=587/tcp firewall-cmd --permanent --add-port=995/tcp firewall-cmd --permanent --add-port=993/tcp firewall-cmd --reload postfix check doveconf -n systemctl restart postfix dovecot systemctl status postfix dovecot --no-pager4.9 客户端 DNS 和连通性检查
Windows 客户端 DNS 指向实验 DNS 服务器,然后检查解析和网络:
nslookup mail.qwe.com ping mail.qwe.com4.10 配置 Outlook 第一个账号
选择手动配置账号:
选择 POP 或 IMAP 类型:
推荐客户端参数:
| 项目 | 参数 |
| --- | --- |
| 邮箱 | qwe@qwe.com |
| 用户名 | qwe |
| 收件服务器 | mail.qwe.com |
| 发件服务器 | mail.qwe.com |
| SMTP | 587,STARTTLS,启用身份认证 |
| IMAP | 993,SSL/TLS |
| POP3 | 995,SSL/TLS |
执行账号测试:
完成配置:
4.11 配置第二个账号并测试收发
使用相同方法添加ewq@qwe.com:
从 qwe 向 ewq 发送测试邮件:
5. 验证结果
5.1 服务端配置和端口
postfix check postconf -n doveconf -n systemctl status postfix dovecot --no-pager ss -lntp | grep -E ':25|:587|:993|:995'5.2 用户认证与 TLS
doveadm auth test qwe openssl s_client -connect mail.qwe.com:587 -starttls smtp openssl s_client -connect mail.qwe.com:993 openssl s_client -connect mail.qwe.com:995TLS 握手成功、证书主机名正确、doveadm auth test返回认证成功,说明认证和加密链路正常。
5.3 本地投递测试
echo 'postfix local delivery test' | mail -s 'mail test' ewq@qwe.com find /home/ewq/Maildir/new -type f -maxdepth 1 -ls postqueue -p邮件进入ewq的 Maildir,队列没有持续堆积,说明本地域投递正常。
5.4 日志和故障排查
tail -n 100 /var/log/maillog journalctl -u postfix -n 50 --no-pager journalctl -u dovecot -n 50 --no-pager grep -E 'reject|warning|error|auth failed' /var/log/maillog | tail -n 50Outlook 两个账号均能通过加密端口登录,qwe 和 ewq 可以互发邮件,服务端队列和日志无持续错误,说明 Postfix + Dovecot 邮件系统配置完成。
