linux搭建smtp服务器
- 云服务器
- 2025-08-20
- 6
准备工作
1 系统要求
- 适用发行版:Ubuntu 20.04 LTS / CentOS 7+(以下示例基于Ubuntu)
- 必要权限:root用户或具有sudo权限的账号
- 开放端口:TCP 25(默认SMTP)、587(推荐用于加密传输)
2 软件选择
| 组件 | 作用 | 推荐版本 |
|---|---|---|
| Postfix | MTA核心服务 | 最新版 |
| Dovecot | SASL认证支持库 | 最新版 |
| Mailutils | 客户端工具集 | 最新版 |
| libsasl2-modules | SASL协议扩展 | 最新版 |
安装配置流程
1 基础环境搭建
# 更新软件源并安装依赖 sudo apt update && sudo apt install postfix dovecot-core mailutils libsasl2-modules -y
注意:若使用CentOS系统,请替换为yum install -y postfix dovecot mailx
2 Postfix主配置文件修改(/etc/postfix/main.cf)
| 参数项 | 原始值 | 修改建议值 | 说明 |
|---|---|---|---|
| myhostname | 空 | yourdomain.com | FQDN域名解析必须生效 |
| mydomain | localdomain | yourdomain.com | 与myhostname保持一致 |
| inet_interfaces | all | loopback-only | 生产环境建议仅监听本地回环 |
| relayhost | 无 | [外部MTA地址] | 如需转发邮件时设置 |
| smtpd_sasl_type | no | cyrus | 启用Dovecot提供的SASL认证 |
| smtpd_sasl_auth_enable | false | true | 开启SMTP身份验证功能 |
| smtpd_tls_cert_file | 无 | /etc/ssl/certs/yourdomain.crt | SSL证书路径 |
| smtpd_tls_key_file | 无 | /etc/ssl/private/yourdomain.key | SSL私钥路径 |
3 Dovecot SASL认证配置
编辑/etc/dovecot/conf.d/10-auth.conf:

创建密码文件并设置权限:
sudo touch /etc/postfix/sasl_passwd sudo chown postfix:postfix /etc/postfix/sasl_passwd sudo chmod 600 /etc/postfix/sasl_passwd
使用doveadm pw命令添加用户:
sudo doveadm pw -u <用户名> -p <加密密码>
提示:可通过openssl passwd -apr1生成符合要求的加密格式密码
4 TLS加密部署(可选但推荐)
申请免费Let’s Encrypt证书:

sudo snap install core; sudo snap refresh core sudo snap install --classic certbot sudo certbot certonly --standalone -d yourdomain.com -d www.yourdomain.com
自动续期配置:添加cron任务每月执行一次更新检查
服务管理与测试
1 启动顺序控制
# 按依赖关系依次重启服务 sudo systemctl restart dovecot sudo systemctl restart postfix
状态监控命令:
systemctl status postfix dovecot journalctl -u postfix --since "5 minutes ago"
2 客户端验证方法
| 测试类型 | 命令示例 | 预期结果 |
|---|---|---|
| EHLO握手 | openssl s_client -connect smtp.yourdomain.com:587 -starttls ehlo | 返回250响应码 |
| 发件人认证 | openssl s_client -connect smtp.yourdomain.com:587 -starttls auth login | 输入账号密码后返回235成功 |
| 邮件发送测试 | mailx -v -r sender@yourdomain.com recipient@otherdomain.com < message.txt | 收件箱可见完整内容 |
3 常见错误排查表
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| connection refused | firewall阻塞端口 | ufw allow 587/tcp |
| authentication failed | sasl配置错误 | 检查dovecot日志/var/log/mail.log |
| relay access denied | postfix未授权该IP段 | 修改/etc/postfix/client_access添加白名单 |
| certificate expired | SSL证书过期 | 重新申请并更新路径配置 |
安全加固建议
- 限制来源IP段:在/etc/postfix/client_access中定义允许发送邮件的网络范围 168.1.0/24 OK ::1 OK
- 启用SPF/DKIM签名:通过OpenDKIM插件增强反垃圾能力
- 禁用DEBUG模式:确保生产环境关闭调试输出(修改debug_peer_level=0)
- 定期审计日志:设置logrotate轮转策略防止日志过大
相关问题与解答
Q1:为什么配置完成后仍然无法通过外部客户端发送邮件?
A:请按以下步骤排查:①检查防火墙是否放行587端口(sudo ufw status);②确认DNS A记录和MX记录已正确指向服务器IP;③查看Postfix日志tail -f /var/log/mail.log是否有认证失败记录;④验证TLS证书是否过期(openssl x509 -in /etc/ssl/certs/yourdomain.crt -noout -date)。
Q2:如何实现多域名共享同一台SMTP服务器?
A:在Postfix配置中添加虚拟域映射:编辑/etc/postfix/virtual_alias_maps文件,格式为example.com@yourdomain.com example.com,然后运行postmap hash:/etc/postfix/virtual_alias_maps生成数据库,最后重启
