目前,我通过根据 IP 地址来源国阻止对 Dovecot 和 SSHD 的访问来减少日志中身份验证失败的垃圾邮件。这两项服务都需要身份验证,除了相当少的国家/地区外,我没有用户或自动化需要访问。
这是通过使用 tcpwrappersaclcheck
和传递的 shell 脚本%a
以及调用我恰好安装在系统上的二进制文件geoiplookup
(或) 来完成的。所有设置都使用, 。geoiplookup6
/etc/hosts.allow
/etc/hosts.deny
这足以摆脱大多数失败的登录。
Postfix 尽管与 tcpwrappers 是同一个人编写的,但它并不执行 tcpwrappers —— 至少在 Debian 中,它的各种二进制文件没有与之链接libwrap.so
。
iptables
据我所知,是不适用的;我不相信它可以要求用户空间二进制文件确定是否应该接受或拒绝 IP 数据包(例如 TCP SYN)。
有没有一种方便的方法可以让 Postfix 的守护进程监听 TCP 连接,例如master
,使用hosts.allow
/ hosts.deny
?有tcpd
答案吗?如何正确使用它?
我感兴趣的是根据原产国来阻止smtps
和端口——那些允许身份验证(从而允许身份验证后中继)的端口。submission
答案1
iptables
据我所知,是不适用的;我不相信它可以要求用户空间二进制文件确定是否应该接受或拒绝 IP 数据包(例如 TCP SYN)。
实际上,您可以使用 netfilter ( iptables
) NFQUEUE 让外部程序评估数据包/连接。
我通常在 RHEL 和 CentOS 上下载 CIDR 格式的 IP 范围,然后使用ipset
创建相对有效的白名单或黑名单iptables
。
但是当你使用 Debian/Ubuntu 时,你可以轻松安装xt_geoip
来自包 xtables-addons-dkms 的模块为您的 netfilter iptables 防火墙获取 GeoIP 功能:
安装软件包:
apt-get install xtables-addons-dkms
下载Geo IP源数据并构建二进制数据库:
mkdir /usr/share/xt_geoip
cd mkdir /usr/share/xt_geoip
/var/lib/dkms/xtables-addons/2.12/build/geoip/xt_geoip_dl
/var/lib/dkms/xtables-addons/2.12/build/geoip/xt_geoip_build -D /usr/share/xt_geoip GeoIPCountryWhois.csv GeoIPv6.csv
然后根据需要添加国家感知 geoip 防火墙规则:
iptables -A INPUT -m geoip --src-cc NL,UK -m conntrack --ctstate NEW -j ACCEPT
如果你愿意的话:
iptables -A INPUT -m geoip ! --src-cc NL,UK -m conntrack --ctstate NEW -j REJECT