我有一个公共 DNS,我想保护它免受某些攻击者的攻击,这些攻击者每秒都会用相同的域条目攻击我的 DNS 服务器。我目前根据 iptables 规则执行此操作,但我想知道是否有可用于此目的的自动系统。我想到用于 http 的 fail2ban,有没有类似的东西用于 DNS 查询?
谢谢你!
答案1
fail2ban 不是“用于 http”的,而是一个根据日志条目采取行动(如在防火墙处禁止 IP)的框架。以下是我的 DNS 服务器的相关配置选项:
命名配置文件
logging {
channel default_file {
file "/var/log/named.log" size 10m;
severity info;
print-time yes;
print-severity yes;
print-category yes;
};
category default{ default_file; };
};
监狱.本地
(fail2ban的配置文件)
[named-refused-bsd-ipfw]
enabled = true
filter = named-refused
action = bsd-ipfw
logpath = /var/named/var/log/named.log
maxretry = 20
bantime = 43200
请注意,这是使用 IPFW(防火墙)的 FreeBSD 机器。您需要使用操作iptables
并适当地命名规则。
您可能还需要更改日志路径,具体取决于您的安装。请注意,在我的示例中,路径有所不同,因为 BIND 在 jail 中运行(chrooted 到/var/named
)。在 jail 中运行会使事情变得更加复杂,但一旦您习惯了它,就没问题了。
您还应该为日志文件设置某种日志轮换机制。
新系统日志配置文件
/var/log/named.log bind:bind 644 7 * $W6D0 J /var/run/named/pid 1
您可能还想看看它是谁,它可能是一个开放的解析器(如 Google、4.2.2.2-.4 等)。禁止他们不会禁止真正的“攻击者”。您可以使用类似的东西对 IP 进行反向查找,dig -x 4.2.2.4
看看是否有帮助。
答案2
对于 UDP 数据包,我建议使用limit
或hashlimit
函数。当我使用(NTP 服务器经验)iptables
拒绝数据包时,我往往能成功阻止数据包。--reject-with icmp-admin-prohibited.
每天限制为 10,000 个应该可以让合法用户在外部界面上除了最不寻常的边缘情况之外的所有情况都通过,并防止每秒发生一次的事情。
答案3
如果您使用的是专用服务器提供商或最近获取的 IP 范围,这种情况并不罕见。
如果您的 DNS 服务器配置正确,它应该能够轻松处理每秒的几个查询,而不会对性能造成太大影响。
采取某种措施来阻止这种情况可能会导致比它解决的更多的问题。
联系域名所有者
在某些情况下,如果出现问题,我会联系域名所有者(检查他们的 Whois)。让他们知道这个问题 - 他们可能会帮你解决这个问题。
回答请求
在非常棘手的情况下,我实际上已经设置了记录并提供结果。结果,这个域名被路由到我选择的网站。虽然这正在走向黑帽的一面,但问题在 8 小时内就停止了。