在 CentOS 上搭建或运维邮件服务器时,防垃圾邮件(Anti-Spam)通常需要多层防护。下面按“从外到内、从基础到高级”的系统方式说明。
dig -x 1.2.3.4
应返回类似:
4.3.2.1.in-addr.arpa. → mail.example.com.
在域名 DNS 中添加:
example.com. IN TXT "v=spf1 mx a ip4:1.2.3.4 -all"
以 Postfix + OpenDKIM 为例:
yum install opendkim
生成密钥:
opendkim-genkey -d example.com -s mail
配置 /etc/opendkim.conf 并启动:
systemctl enable opendkim
systemctl start opendkim
DNS 添加:
mail._domainkey.example.com. IN TXT "v=DKIM1; k=rsa; p=xxx"
_dmarc.example.com. IN TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc@example.com"
✅ SPF + DKIM + DMARC 是防伪造邮件的核心
编辑 /etc/postfix/main.cf:
smtpd_helo_required = yes
disable_vrfy_command = yes
smtpd_recipient_restrictions =
reject_invalid_hostname,
reject_unknown_sender_domain,
reject_unknown_recipient_domain,
reject_unauth_destination,
reject_rbl_client zen.spamhaus.org,
permit_mynetworks,
permit_sasl_authenticated,
reject
常用 RBL:
zen.spamhaus.orgbl.spamcop.netb.barracudacentral.orgyum install spamassassin
systemctl enable spamassassin
systemctl start spamassassin
在 /etc/postfix/master.cf:
smtp inet n - n - - smtpd
-o content_filter=spamassassin
spamassassin unix - n n - - pipe
user=spamd argv=/usr/bin/spamc -f -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}
在 ~/.procmailrc 或 maildrop 中:
:0:
* ^X-Spam-Flag: YES
/dev/null
或移动到 Junk:
* ^X-Spam-Level: \*\*\*\*
Junk/
yum install postgrey
配置:
postgrey --inet=127.0.0.1:10023
Postfix 中:
smtpd_recipient_restrictions =
check_policy_service inet:127.0.0.1:10023
✅ 可拦截大量僵尸网络群发邮件
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
yum install fail2ban
监控 /var/log/maillog:
[postfix]
enabled = true
port = smtp,ssmtp
filter = postfix
logpath = /var/log/maillog
maxretry = 5
sa-update
tail -f /var/log/maillog
anvil)✅ 生产环境推荐:
Postfix
+ OpenDKIM
+ SpamAssassin
+ Postgrey
+ Fail2ban
+ RBL
如果你愿意,我可以:
你现在是 新搭建还是已运行被垃圾邮件困扰?