CentOS 下 Sendmail 配置指南
Sendmail 是 Linux 系统中经典的邮件传输代理(MTA),在 CentOS 环境下通过合理配置可实现稳定高效的邮件服务,本文将系统介绍其安装、核心参数调整及安全加固方法。

基础环境准备
在开始配置前,需确保系统满足以下条件:
- 操作系统:CentOS 7/8(以 CentOS 7 为例)
- 网络连通性:服务器可访问互联网(用于下载依赖包)
- 防火墙规则:开放 SMTP 服务端口(默认
25/tcp)
执行以下命令更新系统并安装 Sendmail 及相关工具:
yum update -y && yum install sendmail sendmail-cf m4 -y
Sendmail 核心配置文件解析
Sendmail 的配置主要通过修改 /etc/mail/sendmail.cf 实现,该文件由 m4 宏处理器生成,关键配置项如下表所示:
| 配置项 | 默认值 | 说明 |
|---|---|---|
DAEMON_OPTIONS |
Port=smtp |
监听地址与端口,如需监听所有 IP 可改为 Port=smtp,Addr=0.0.0.0 |
LOCAL_DOMAIN |
本地主机名 | 定义本地域名,发送邮件时自动补充后缀 |
MAILER(smtp |
启用 SMTP 邮件传输协议 | |
define(\confAUTH_MECHANISMS`,`LOGIN PLAIN\')` |
开启 SMTP 认证机制(可选) |
⚠️ 注意:直接编辑
sendmail.cf可能导致语法错误,建议通过修改宏配置文件/etc/mail/sendmail.mc后重新生成。
配置步骤详解
修改宏配置文件
使用文本编辑器打开 /etc/mail/sendmail.mc,根据需求调整以下参数:

- 监听地址:若需允许外部连接,找到
dnl DAEMON_OPTIONS(\Port=smtp,Addr=127.0.0.1,Name=MTA\')并去掉dnl` 注释,改为:DAEMON_OPTIONS(\`Port=smtp,Addr=0.0.0.0,Name=MTA\')
- 启用 SMTP 认证(可选):添加以下行支持用户密码认证:
TRUST_AUTH_MECH(\`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN\') define(\`confAUTH_OPTIONS\', \`A p\')
生成新的配置文件
运行 m4 命令将 .mc 文件编译为 .cf:
m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
重启服务并设置开机自启
systemctl restart sendmail systemctl enable sendmail
安全加固措施
为防止滥用,需进行以下安全配置:
- 限制 relay 权限:编辑
/etc/mail/access,添加仅允许的网段或 IP:168.1 RELAY localhost.localdomain RELAY执行
makemap hash /etc/mail/access.db < /etc/mail/access生成数据库文件。 - 关闭 Open Relay:确保
sendmail.cf中未设置全局 relay 权限(默认已禁用)。 - 启用 TLS 加密(可选):在
sendmail.mc中添加证书路径:dnl # SSL/TLS configuration define(\`confCACERT_PATH\', \'/etc/pki/tls/certs\') define(\`confSERVER_CERT\', \'/etc/pki/tls/certs/sendmail.pem\') define(\`confSERVER_KEY\', \'/etc/pki/tls/private/sendmail.key\')
生成自签名证书后重启服务。
测试与验证
- 本地发送测试:
echo "Test email" | mail -s "Subject" user@example.com
- 远程连接测试:
使用telnet连接 SMTP 端口,输入 SMTP 命令验证服务状态:telnet localhost 25 EHLO example.com
若返回
250-SIZE等响应,说明服务正常。
常见问题排查
若遇到邮件发送失败,可通过以下方式定位问题:
- 查看日志:
tail -f /var/log/maillog - 测试 DNS 解析:
nslookup mx.example.com - 检查防火墙:
firewall-cmd --list-ports确认25/tcp已开放
相关问答 FAQs
Q1:为什么无法从外部发送邮件到本机?
A:可能原因包括:
- 防火墙阻止了
25/tcp端口,需执行firewall-cmd --add-port=25/tcp --permanent并重启防火墙; - DNS MX 记录未正确指向本机,需检查域名解析配置;
- Sendmail 未监听公网 IP,需修改
sendmail.mc中的DAEMON_OPTIONS参数。
Q2:如何配置 Sendmail 支持虚拟域用户?
A:需完成以下步骤:
- 安装 Cyrus SASL 支持:
yum install cyrus-sasl-plain; - 在
sendmail.mc中添加认证机制:TRUST_AUTH_MECH(\PLAIN LOGIN\')`; - 创建虚拟域配置文件
/etc/mail/virtusertable,格式为user@virtualdomain.com local_user; - 生成数据库:
makemap hash /etc/mail/virtusertable.db < /etc/mail/virtusertable; - 重启 Sendmail 使配置生效。