在CentOS系统中搭建SMTP服务器是企业或个人进行邮件发送的常见需求,通常用于系统通知、营销邮件或内部通信,以下是详细的配置步骤和注意事项,涵盖Postfix的安装、配置、安全加固及常见问题排查。

安装SMTP服务器软件
CentOS默认使用Postfix作为SMTP服务器,可通过yum安装,首先更新系统软件包:
sudo yum update -y sudo yum install -y postfix
安装完成后,启动Postfix服务并设置为开机自启:
sudo systemctl start postfix sudo systemctl enable postfix
使用systemctl status postfix检查服务状态,确保显示“active (running)”。
配置Postfix主配置文件
Postfix的主配置文件为/etc/postfix/main.cf,需根据实际需求修改关键参数:

-
设置域名和主机名:确保
/etc/postfix/main.cf中包含以下配置:myhostname = mail.example.com # 替换为您的邮件服务器域名 mydomain = example.com # 替换为您的域名 myorigin = $mydomain # 发件人域名后缀
-
配置网络接口:监听所有网络接口(默认为
all),或限制为特定IP:inet_interfaces = all
-
设置邮件存储路径:默认为
/var/spool/mail,可通过home_mailbox = Maildir/改为用户家目录下的Maildir格式。 -
中继与访问控制:允许本地中继,限制外部中继:
(图片来源网络,侵删)mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain relayhost = # 若需通过其他SMTP服务器中继,可填写如[smtp.example.com]:587
修改后使用postfix check检查配置语法,无误后执行systemctl restart postfix重启服务。
配置SMTP认证与安全
为防止邮件滥用,需启用SMTP认证和TLS加密:
-
安装Cyrus-SASL:用于认证功能:
sudo yum install -y cyrus-sasl cyrus-sasl-plain
-
修改Postfix配置:在
main.cf中添加:smtpd_sasl_auth_enable = yes smtpd_sasl_security_options = noanonymous smtpd_sasl_path = smtpd smtpd_tls_security_level = encrypt # 强制TLS加密 smtpd_tls_cert_file = /etc/pki/tls/certs/postfix.pem smtpd_tls_key_file = /etc/pki/tls/private/postfix.key
生成自签名证书(生产环境建议使用权威CA证书):
sudo openssl req -new -x509 -days 365 -nodes -out /etc/pki/tls/certs/postfix.pem -keyout /etc/pki/tls/private/postfix.key
-
创建系统用户认证:Postfix默认使用系统用户名密码认证,无需额外配置,若需虚拟用户,可结合Dovecot实现。
防火墙与SELinux配置
确保防火墙允许SMTP流量(默认25端口)和SMTPS(465端口):
sudo firewall-cmd --permanent --add-service=smtp sudo firewall-cmd --permanent --add-service=smtps sudo firewall-cmd --reload
若SELinux启用,需设置策略:
sudo setsebool -P postfix_local_mail_send 1 sudo setsebool -P httpd_can_sendmail 1 # 若Web应用需发送邮件
测试与日志分析
使用telnet或openssl测试SMTP连接:
telnet localhost 25 # 输入EHLO localhost,查看是否返回AUTH和STARTTLS
发送测试邮件:
echo "Test body" | mail -s "Test Subject" user@example.com
日志文件位于/var/log/maillog,通过tail -f实时查看错误信息。
常见问题排查
- 邮件被拒收:检查DNS是否配置MX记录和反向PTR记录,避免被标记为垃圾邮件。
- 认证失败:确认
saslpasswd2创建的用户密码是否正确,或检查/etc/sasldb2文件权限。
相关问答FAQs
Q1: 如何在CentOS中限制只允许特定IP通过SMTP服务器发送邮件?
A1: 在main.cf中添加smtpd_client_restrictions = permit_mynetworks, reject,并在mynetworks参数中定义允许的IP段,例如mynetworks = 192.168.1.0/24, 127.0.0.0/8,重启Postfix后,仅这些IP可中继邮件。
Q2: Postfix发送邮件时提示“Relay access denied”,如何解决?
A2: 该错误通常因未配置mynetworks或IP不在允许列表中,检查main.cf中的mydestination和relayhost参数,确保发送方IP属于mynetworks,或添加permit_auth_destination允许认证用户中继,同时检查防火墙是否阻止25端口。
