Linux系统下Sendmail服务的搭建与配置
Sendmail简介与环境准备
Sendmail是一款历史悠久、功能强大的邮件传输代理(MTA)软件,广泛应用于Linux/Unix系统中,负责邮件的发送、接收与中转,在开始搭建前,需确保系统已满足基本条件:推荐使用CentOS 7/Ubuntu 20.04等主流发行版,具备root权限或sudo权限,并确保网络连通性(若需外发邮件)。

首先更新系统软件包列表,确保基础环境稳定,以CentOS为例,执行:
sudo yum update -y
对于Ubuntu系统,使用:
sudo apt update && sudo apt upgrade -y
安装Sendmail及相关组件
Sendmail的安装通常分为两部分:核心包和配置工具,以CentOS为例,执行以下命令安装:
sudo yum install sendmail sendmail-cf -y
sendmail为核心运行包,sendmail-cf提供配置文件生成工具,若需支持SMTP认证(防止邮件中继滥用),还需安装cyrus-sasl相关组件:
sudo yum install cyrus-sasl cyrus-sasl-plain -y
Ubuntu系统的安装命令略有不同:
sudo apt install sendmail sendmail-bin -y
安装完成后,启动Sendmail服务并设置开机自启:
sudo systemctl start sendmail sudo systemctl enable sendmail
Sendmail基础配置
Sendmail的主配置文件为/etc/mail/sendmail.cf,但直接修改该文件较为复杂,推荐使用m4工具生成配置。
-
定义域与主机名
编辑/etc/mail/local-host-names文件,添加需要接收邮件的域名(如example.com),每行一个域名:sudo vi /etc/mail/local-host-names # 添加内容: example.com mail.example.com
-
配置本地邮件用户
系统用户默认可接收邮件,若需为特定用户(如webmaster)设置别名,编辑/etc/mail/aliases:sudo vi /etc/mail/aliases # 添加内容: webmaster: admin@example.com
执行
newaliases命令使别名生效:
sudo newaliases
-
生成主配置文件
备份原始配置文件后,使用m4工具生成新配置:cd /etc/mail sudo cp sendmail.cf sendmail.cf.bak sudo m4 cf/cf.mc > sendmail.cf
若需自定义配置(如修改SMTP端口、中继策略等),可编辑
cf/cf.mc文件后重新生成。
SMTP认证配置(可选)
为防止邮件服务器被滥用,建议启用SMTP认证,以下是基于SASL的配置步骤:
-
编辑Sendmail.mc文件
sudo vi /etc/mail/sendmail.mc
找到以下行并取消注释(删除
dnl):TRUST_AUTH_MECH(`EXTERNAL LOGIN PLAIN') define(`confAUTH_MECHANISMS', `EXTERNAL LOGIN PLAIN')
在
DAEMON_OPTIONS中添加监听端口(默认25端口无需修改):DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl
-
重新生成配置文件并重启服务
sudo m4 cf/cf.mc > sendmail.cf sudo systemctl restart sendmail
-
测试SMTP认证
使用telnet或openssl命令连接本地SMTP服务,输入EHLO查看支持的认证方式,应包含LOGIN和PLAIN。
防火墙与SELinux配置
为确保邮件服务正常通信,需开放25端口(SMTP)及465端口(SMTPS,若启用SSL)。
-
CentOS防火墙配置

sudo firewall-cmd --permanent --add-service=smtp sudo firewall-cmd --permanent --add-service=smtps sudo firewall-cmd --reload
-
SELinux配置(CentOS)
若启用SELinux,需为Sendmail设置正确上下文:sudo semanage port -a -t smtp_port -p tcp 25 sudo setsebool -P sendmail_can_network_connect=1
邮件发送与测试
-
使用命令行发送测试邮件
echo "Test mail body" | mail -s "Test Subject" recipient@example.com
-
查看邮件日志
日志文件位于/var/log/maillog(CentOS)或/var/log/mail.log(Ubuntu),可通过以下命令实时监控:tail -f /var/log/maillog
-
常见问题排查
- 邮件被拒收:检查DNS记录是否包含MX记录,以及域名是否正确配置在
local-host-names中。 - 认证失败:确认SASL库安装正确,
sendmail.mc中认证配置无误。 - 端口被占用:使用
netstat -tuln | grep 25检查25端口是否被Sendmail监听。
- 邮件被拒收:检查DNS记录是否包含MX记录,以及域名是否正确配置在
安全加固建议
-
限制中继访问:编辑
sendmail.mc,添加Access文件控制中继权限:FEATURE(`access_db', `hash -o /etc/mail/access')
编辑
/etc/mail/access,添加允许中继的IP或域名:Connect:192.168.1.0/24 RELAY
生成数据库文件后重启服务:
sudo makemap hash /etc/mail/access < /etc/mail/access sudo systemctl restart sendmail
-
启用TLS加密:配置SSL证书(如使用Let’s Encrypt),修改
sendmail.mc添加TLS支持:define(`confCACERT_PATH', `/etc/pki/tls/certs') define(`confCACERT', `/etc/pki/tls/certs/ca-bundle.crt') define(`confSERVER_CERT', `/etc/pki/tls/certs/sendmail.pem') define(`confSERVER_KEY', `/etc/pki/tls/private/sendmail.key')
通过以上步骤,已完成Linux系统下Sendmail服务的搭建与基础配置,Sendmail功能强大但配置复杂,建议在实际生产环境中结合需求进一步优化,如结合SpamAssassassin过滤垃圾邮件,或使用Postfix作为替代方案(配置更简单),定期检查日志、更新系统补丁,是保障邮件服务器稳定运行的关键。

















