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 使配置生效。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复