CentOS 7 搭建 Postfix + Dovecot 邮件系统并配置 SMTP、POP3、IMAP 与 TLS

📅 2026/7/21 14:45:09 👁️ 阅读次数 📝 编程学习
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.comewq@qwe.com|

• 操作系统:CentOS 7.x。

• 操作账号:root 或具备 sudo 权限的管理员。

• 软件源:YUM 可用。

• DNS:mail.qwe.com的 A 记录指向10.1.100.101qwe.com的 MX 记录指向mail.qwe.com

• 时间:服务端和客户端时间同步,避免 TLS 证书验证异常。

检查环境:

cat /etc/centos-release ip addr timedatectl status getent hosts mail.qwe.com dig MX qwe.com +short

3. 相关知识

• 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 每封邮件单独保存,目录由curnewtmp组成,比传统 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 hostname

4.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/null

4.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/Maildir

4.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.key

4.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.confservice 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,reject

4.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-pager

4.9 客户端 DNS 和连通性检查

Windows 客户端 DNS 指向实验 DNS 服务器,然后检查解析和网络:

nslookup mail.qwe.com ping mail.qwe.com

4.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:995

TLS 握手成功、证书主机名正确、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 50

Outlook 两个账号均能通过加密端口登录,qwe 和 ewq 可以互发邮件,服务端队列和日志无持续错误,说明 Postfix + Dovecot 邮件系统配置完成。