Postfix结合Dovecot环境下公网大量认证失败的解决方案及访问控制咨询
Postfix结合Dovecot环境下公网大量认证失败的解决方案及访问控制咨询
嗨,看起来你已经用fail2ban做了基础的暴力破解防护,但既然你的场景完全不需要公网客户端访问邮箱,咱们可以从访问控制的根源上解决问题,比单纯封禁IP更彻底。下面给你几个针对性的可行方案:
1. 限制Dovecot仅监听本地/内网IP
直接让Dovecot不对外网开放监听端口,从根本上切断公网的连接请求:
- 找到Dovecot的主配置文件(通常是
/etc/dovecot/dovecot.conf),定位到listen参数 - 将其修改为仅监听本地回环地址和你的内网网段,比如:
(请根据你的实际内网IP段调整,比如10.0.0.0/8或172.16.0.0/12)listen = 127.0.0.1, 192.168.1.0/24 - 如果Postfix和Dovecot部署在同一台服务器,还可以改用本地套接字通信,在Postfix的
main.cf里确保:
同时Dovecot的smtpd_sasl_path = private/authconf.d/10-master.conf里配置对应的套接字权限,这样连内网IP都不需要暴露,安全性更高。 - 修改完成后重启Dovecot服务:
systemctl restart dovecot
2. 通过Postfix限制SASL认证的来源
在Postfix层面直接拒绝非内网的SASL认证请求,避免公网请求进入到Dovecot的认证环节:
- 编辑Postfix的
main.cf文件,添加或修改以下参数:smtpd_sasl_restrictions = permit_mynetworks, reject - 确保
mynetworks参数已经包含你的内网网段,比如:
这个参数定义了Postfix信任的本地/内网网络,只有这些来源的请求才能进行SASL认证。mynetworks = 127.0.0.0/8, 192.168.1.0/24 - 重启Postfix服务生效:
systemctl restart postfix
3. 防火墙层面拦截公网访问
用系统防火墙(iptables/ufw/firewalld)直接阻断公网对邮箱服务端口的访问,作为额外的防护层:
以iptables为例:
- 允许内网IP访问Dovecot的IMAP/POP3端口:
iptables -A INPUT -p tcp --dport 143 -s 192.168.1.0/24 -j ACCEPT iptables -A INPUT -p tcp --dport 993 -s 192.168.1.0/24 -j ACCEPT iptables -A INPUT -p tcp --dport 110 -s 192.168.1.0/24 -j ACCEPT iptables -A INPUT -p tcp --dport 995 -s 192.168.1.0/24 -j ACCEPT - 拒绝所有其他来源对这些端口的访问:
iptables -A INPUT -p tcp --dport 143 -j DROP iptables -A INPUT -p tcp --dport 993 -j DROP iptables -A INPUT -p tcp --dport 110 -j DROP iptables -A INPUT -p tcp --dport 995 -j DROP - 如果需要限制Postfix的SMTP端口仅对内网开放,也可以添加类似规则针对25/587端口。
关于fail2ban的补充优化
如果你还是想保留fail2ban作为兜底防护,可以优化Dovecot的过滤规则,确保更精准地捕获认证失败日志:
- 检查
/etc/fail2ban/filter.d/dovecot.conf里的正则规则,确保能匹配你日志里的格式(比如你提供的pam_unix(dovecot:auth): authentication failure条目) - 可以调整
bantime、maxretry等参数,让封禁策略更符合你的需求。
这些方案里,优先推荐修改Dovecot监听地址 + Postfix SASL限制的组合,从服务配置层面彻底阻断公网访问,防火墙可以作为额外的安全屏障。根据你的实际内网环境调整参数即可。
备注:内容来源于stack exchange,提问作者admfotad
相关产品推荐
相关产品推荐

