我无法弄清楚如何阻止BIND上的任何DNS请求,以降低DNS放大攻击的变化。 我看过在线指南,但大多数似乎通过iptables或绑定执行速率限制。
任何提示或build议?
没有configuration选项可用于删除ANYtypes的所有查询。 除了RFC要求之外, minimal-responses可以用来删除你的回复的附加部分,使得它成为一个安全的选项,没有真正的缺点。 (除了pipe理员故障排除)
老实说,考虑这种方法在游戏中已经晚了。 当然可以. ANY . ANY可能现在仍然出现在您的顶级查询中,但是伪随机子域名攻击是当前的风味,每秒钟会强调每秒的数据包。 之后会有其他的东西,等等。
关注速度限制主要是因为它是限制您的基础设施整体可以实现的损害的最有效策略之一。 这是你的重点应该在哪里。 如果您正在运行recursion基础架构,请确保BCP-38在客户和出站path之间的某处实施。 不要运行一个开放的parsing器。 所以等等。 只有当你限制你的普通攻击面时,才有必要专注于特定于攻击的策略,因为正如你在这里发现的那样,这些攻击很快就会失去价值。
这种方法效率不高,但是可以满足您的要求
我知道的唯一有效和通用的方法是启用iptablesstringfilter来阻止请求。 在做这件事之前一定要备份你的iptablesconfiguration。
-A PREROUTING -p udp -m udp --dport 53 -m string --hex-string "|0000ff0001|" --algo bm --from 40 -j DROP
放置在你的iptablesconfiguration的iptables raw表部分。
… 或从命令行:
iptables -t raw -I PREROUTING -p udp -m udp --dport 53 -m string --hex-string "|0000ff0001|" --algo bm --from 40 -j DROP
使用原始表的原因是为了在获得高请求率的情况下避免状态表命中。
可能的步骤可能有用: 谨慎使用并在testing服务器上进行testing。 避免在没有大量testing的情况下在关键业务服务器上执
这可能会阻止一些 DNS枚举和放大攻击,但它打破了一些RFC的。 防止NOERROR以外的任何事情离开您的服务器是微不足道的。
# # drop anything leaving with the source port of 53 (DNS) iptables -t raw -I OUTPUT -p udp -m udp --sport 53 -j DROP # # but then let through NOERROR for recursive iptables -t raw -I OUTPUT -p udp -m udp --sport 53 -m string --hex-string "|8500|" --algo kmp --from 30 --to 31 -j ACCEPT # # and let through NOERROR for non-recursive iptables -t raw -I OUTPUT -p udp -m udp --sport 53 -m string --hex-string "|8400|" --algo kmp --from 30 --to 31 -j ACCEPT
没有一个DNS守护程序支持使用请求types进行select,而无需修改源代码AFAIK。 例如,我修改了rbldnsd来回答“ANY”,答案是“A”。 这当然是非正统的,可能会扰乱纯粹主义者。
如果您有BIND 9.9或更高版本,并且您的安装在构build期间启用了响应速率限制,那么您可以设置如下限制的速率:
options { ... rate-limit { responses-per-second 10; log-only yes; }; };
如果您在查看query.log时对结果感到满意,请删除仅限日志的行并观察影响。 如果我没有弄错,默认值是5,build议不要低于这个数字。 也请监视你的下降比率,因为你可能想调整它的主机更多区域的名称服务器。
是的,你可以做iptables,但这是不好的build议,因为在大多数情况下IPfilter遇到麻烦之前,你的名称服务器。 也不能根据请求进行区分,只能根据数据包的数量和来源IP进行区分。 这意味着你会减less很多合法的stream量。