You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Postfix邮件服务器遭垃圾发送者滥用的阻止方案及SPF配置疑问咨询

Postfix邮件服务器遭垃圾发送者滥用的阻止方案及SPF配置疑问咨询

嗨,我来帮你梳理下这个问题的解决思路,一步步拆解清楚:

先澄清你关于SPF的核心误解

你担心把SPF的~all改成更严格的规则会导致公司外部无法发邮件——这其实是个错误认知,只要你正确配置SPF记录,把所有合法的邮件发送源都纳入授权范围,完全不会影响正常的邮件收发。

~all是软失败规则,意思是接收方只会标记邮件为可疑,但不会直接拒绝,这就给垃圾发送者留了可乘之机;而-all是硬失败规则,接收方会直接拒绝不符合SPF验证的邮件,能从源头大幅减少伪造发件人的垃圾邮件。

优化SPF记录的具体步骤

  1. 先整理所有合法的邮件发送源:
    • 你的Postfix服务器的公网IP(IPv4和IPv6都要列全,如果有多个服务器的话)
    • 公司员工用来发邮件的授权客户端(只要员工是通过你的Postfix服务器SMTP认证发送邮件,不管在公司内还是外,服务器IP已经在SPF里就没问题)
    • 任何你授权的第三方邮件服务(比如邮件营销平台、外包邮件服务商等)
  2. 重新编写SPF记录,格式示例:
    v=spf1 ip4:xxx.xxx.xxx.xxx ip6:xxxx:xxxx::xxxx include:your-third-party-service.com -all
    
    把上面的IP和第三方服务域名换成你自己的,最后一定要用-all替代原来的~all

强化Postfix配置,从服务器端阻挡滥用

结合你给出的main.cf配置,我给你几个针对性优化建议:

1. 添加SPF强制检查

先安装policyd-spf插件(大部分Linux发行版的包管理器都能找到,比如Debian/Ubuntu用apt install postfix-policyd-spf-python),然后在main.cfsmtpd_recipient_restrictions里添加一行:

check_policy_service unix:private/policyd-spf

这样Postfix会直接拒绝SPF验证失败的邮件,不用等接收方后续处理。

2. 强化发件人匹配验证

smtpd_sender_restrictions里加入reject_sender_login_mismatch,这样只有通过SMTP认证的用户,才能使用对应的发件人地址发送邮件,彻底防止外部伪造你公司内部的用户地址。修改后的配置大概是:

smtpd_sender_restrictions =
    permit_mynetworks
    permit_sasl_authenticated
    reject_sender_login_mismatch
    reject_unknown_sender_domain
    reject_unknown_reverse_client_hostname
    reject_unknown_client_hostname
    policy_time_limit = 3600

3. 确保mynetworks配置正确

检查你的main.cf里的mynetworks参数,它应该只包含公司内部可信的IP段,绝对不能包含外部公网IP,否则会导致开放中继,让垃圾发送者轻易滥用。示例配置:

mynetworks = 127.0.0.0/8 192.168.1.0/24 [::1]/128 [fe80::]/64

4. 临时阻挡当前滥用的IP

从你提供的日志看,垃圾发送者的IP是45.159.74.66,你可以把它加入/etc/postfix/rbl_override文件,内容如下:

45.159.74.66 REJECT

然后执行以下命令让配置生效:

postmap /etc/postfix/rbl_override
postfix reload

最后验证配置

修改完SPF和Postfix配置后,你可以通过以下方式验证:

  • 用外部设备(比如家里的电脑)通过SMTP认证发送邮件,确认能正常送达
  • 用本地的spfquery命令检查你的SPF记录是否配置正确
  • 查看Postfix日志(/var/log/mail.log/var/log/maillog),确认垃圾邮件被正确拦截

备注:内容来源于stack exchange,提问作者np1

火山引擎 最新活动