我有一个公共的DNS,我想要防止某种types的攻击者每隔一秒用相同的域名input命中我的DNS服务器。 我现在是根据iptables规则做的,但是我想知道是否有一个自动系统可以用于这个目的。 我记得http2的fail2ban,有没有像这样的DNS查询有什么?
谢谢!
fail2ban不是“for http”,它是根据日志条目采取行动(如在防火墙上禁止IP)的框架。 以下是我的DNS服务器的相关configuration选项:
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的configuration文件)
[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和适当的命名规则。
您可能还需要更改日志path,具体取决于您的安装。 请注意,在我的例子中有不同的path,因为BIND运行在一个监狱(chrooted到/var/named )。 在监狱里跑步会让事情变得更加复杂,但是一旦习惯了就不会太坏。
您还应该为日志文件设置某种types的日志循环机制。
/var/log/named.log bind:bind 644 7 * $W6D0 J /var/run/named/pid 1
你可能也想看看它是谁,它可能是一个开放的parsing器(如Google,4.2.2.2-.4等)。 禁止他们并不禁止真正的“攻击者”。 你可以用类似dig -x 4.2.2.4对IP进行反向查询,看看是否有帮助。
对于UDP数据包,我build议使用iptables的limit或hashlimit函数。 当我使用--reject-with icmp-admin-prohibited.来拒绝数据包时,我倾向于取得很好的成功--reject-with icmp-admin-prohibited. (NTP服务器体验)。
每天限制到10000个,应该让外部接口上合法用户的所有最不寻常的边缘情况,并保持每秒一次的事情发生。
如果您正在使用专用服务器提供商或最近获得的IP范围,这并不罕见。
如果您的DNS服务器configuration正确,它应该能够轻松处理几个查询/秒,而不会对性能造成太大的影响。
设置一些东西来阻止这可能会导致更多的问题比解决。
联系网域所有者
在某些情况下,这是有问题的,我已经联系了域名所有者(检查他们的Whois)。 让他们知道这个问题 – 他们可能会为你解决这个问题。
回答请求
在非常艰难的情况下,我已经设置了logging并提供了结果。 结果,这个域被路由到我select的一个站点。 当这个事情走向黑帽时,这个问题在8个小时内就停止了。