在 CentOS 的 LAMP 环境上搭建邮件服务器
一 架构与准备
- 组件选型:使用 Postfix 作为 MTA(负责发送/接收与转发)、Dovecot 作为 IMAP/POP3 MDA/LDA(负责投递与客户端取信),LAMP 中的 Apache/PHP/MySQL 用于承载 Web 与可选 Webmail。为提升可靠性与可维护性,建议启用 TLS 加密、SASL 认证 与 防火墙放行 必要端口。生产环境建议使用 CentOS Stream 8/9 或迁移至 Rocky/AlmaLinux,并确保具备 公网 IP 与正确的 DNS 记录(如 A/AAAA 与 MX)。
二 安装与基础配置
- 安装软件包(以 yum/dnf 为准):
- sudo yum install -y postfix dovecot mailx
- 可选:sudo yum install -y dovecot-pgsql dovecot-sieve dovecot-managesieved(如需数据库认证/过滤)
- Postfix 基础配置(/etc/postfix/main.cf):
- myhostname = mail.yourdomain.com
- mydomain = yourdomain.com
- myorigin = $mydomain
- inet_interfaces = all
- inet_protocols = ipv4
- mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
- mynetworks = 127.0.0.0/8 [::1]/128
- home_mailbox = Maildir/
- Dovecot 基础配置:
- /etc/dovecot/dovecot.conf:protocols = imap pop3
- /etc/dovecot/conf.d/10-mail.conf:mail_location = maildir:~/Maildir
- /etc/dovecot/conf.d/10-auth.conf:disable_plaintext_auth = no;auth_mechanisms = plain login
- 启动服务:
- sudo systemctl enable --now postfix dovecot
- 说明:上述为最小可用配置,后续通过 SASL/TLS 加固与端口放行完善服务。
三 安全与认证配置
- Postfix 启用 SASL(与 Dovecot 对接):
- /etc/postfix/main.cf 追加/修改:
- smtpd_sasl_auth_enable = yes
- smtpd_sasl_type = dovecot
- smtpd_sasl_path = private/auth
- smtpd_sasl_security_options = noanonymous
- smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
- smtpd_recipient_restrictions = permit_mynetworks permit_sasl_authenticated reject_unauth_destination
- Dovecot 提供 SASL 套接字(/etc/dovecot/conf.d/10-master.conf):
- service auth {
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
}
- TLS 加密(自签名证书示例,生产请使用有效证书):
- 生成证书(示例):
- sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048
-keyout /etc/pki/tls/private/localhost.key
-out /etc/pki/tls/certs/localhost.crt
- Postfix(/etc/postfix/main.cf):
- smtpd_tls_security_level = may
- smtpd_tls_cert_file = /etc/pki/tls/certs/localhost.crt
- smtpd_tls_key_file = /etc/pki/tls/private/localhost.key
- smtpd_use_tls = yes
- Dovecot(/etc/dovecot/conf.d/10-ssl.conf 或 dovecot.conf):
- ssl = yes
- ssl_cert = </etc/pki/tls/certs/localhost.crt
- ssl_key = </etc/pki/tls/private/localhost.key
- 防火墙放行(firewalld):
- sudo firewall-cmd --permanent --add-service=smtp
- sudo firewall-cmd --permanent --add-service=pop3
- sudo firewall-cmd --permanent --add-service=imap
- 如需提交端口:sudo firewall-cmd --permanent --add-port=587/tcp
- 如需加密端口:sudo firewall-cmd --permanent --add-service=smtps;sudo firewall-cmd --permanent --add-service=imaps;sudo firewall-cmd --permanent --add-service=pop3s
- sudo firewall-cmd --reload
- 说明:SASL 与 TLS 的组合可同时保障外发与入站的安全与可达性。
四 测试与验证
- SMTP 明文/STARTTLS 测试(端口 25/587):
- 连接:telnet yourdomain.com 25
- 交互示例:
- 如需认证测试(STARTTLS 后):AUTH LOGIN,随后输入 Base64 编码的用户名与密码。
- IMAP/POP3 测试(端口 143/993、110/995):
- 明文:openssl s_client -connect localhost:143
- 加密:openssl s_client -connect localhost:993
- 说明:SMTP 端到端投递与 IMAP/POP3 取信均可通过上述方式验证,必要时结合日志(/var/log/maillog)排查。
五 可选 Webmail 与进阶
- Webmail 部署(以 Roundcube 为例):
- 安装:sudo yum install -y roundcube roundcube-mysql
- 配置数据库连接(/etc/roundcube/main.inc.php):
- $db_dsn = ‘mysql:dbname=roundcube;host=localhost;charset=utf8’;
- $db_user = ‘rcuser’; $db_pass = ‘rcpass’;
- 通过浏览器访问:http://yourdomain.com/roundcube
- 进阶能力(按需部署):
- 虚拟域/用户:结合数据库(PostfixAdmin)与 Dovecot 的 SQL 认证,实现多域名与虚拟邮箱。
- 反垃圾/反病毒:部署 amavisd-new + SpamAssassin + ClamAV,典型流程为 Postfix → amavis(10024) → SA/ClamAV → amavis(10025) → Postfix → Dovecot LDA,配合 Sieve 做邮件分拣与过滤。