Dav*_*rtz 16 domain-name-system ddos
我们在 Linux 机器上运行面向公众的递归 DNS 服务器。我们已经被用于 DNS 放大攻击。是否有任何建议的iptables规则可以帮助减轻这些攻击?
显而易见的解决方案是将出站 DNS 数据包限制在某个流量级别。但我希望找到更聪明的方法,这样攻击就可以阻止流向受害者 IP 地址的流量。
我已经搜索过建议和建议,但它们似乎都是“不要运行面向公众的递归名称服务器”。不幸的是,我们陷入了这样一种情况:如果我们不这样做,不容易改变的事情就会崩溃,这是由于十多年前在这些攻击成为问题之前做出的决定。
gra*_*ace 10
整个事情有点像“不是我的问题”场景,这不是你的错,应该/可以通过采取适当的行动 100% 解决,无论它有多“困难”或“困难”,这就是终止你的打开递归服务器。
逐步淘汰:告诉客户该服务器将于 X 日期消失。在那之后,他们需要安装一个补丁(假设你有一个)来阻止它使用你的 DNS 服务器。这是一直做的。系统管理员、网络管理员、服务台人员、程序员?我们明白了;这种报废的事情一直在发生,因为供应商/服务提供商/合作伙伴的标准操作程序告诉我们在 X 日期后停止使用某些东西。我们并不总是喜欢它,但它是 IT 生活中的一个事实。
您说您在当前设备上没有这个问题,所以我假设您已经通过固件更新或补丁解决了这个问题。我知道你说过你不能触摸设备,但他们肯定可以吗?我的意思是,如果他们让这些箱子基本上打电话回家给你,他们真的不能说对谁在做什么肛门他们的设备; 您可以为他们所知道的所有人设置反向代理,那么为什么不让他们安装一个补丁来解决这个问题或告诉他们使用他们自己的 DNS 服务器。你的设备肯定支持 DHCP;我想不出一个没有.
如果您不能这样做,那么接下来要做的是控制谁可以访问您的递归服务器:您说“很难说”谁在使用它以及如何使用它,但是是时候确定并开始丢弃流量了不合法。
这些是“准军事/政府”组织,对吗?好吧,它们很可能是它们拥有的合法网络块的一部分;这些设备不是动态 IP 背后的家用路由器。找出。联系他们,解释问题以及您如何通过不强制更换固件或产品来为他们节省大量资金,前提是他们可以确认设备将用于访问您的 DNS 服务器的网络块/IP 地址。
这一直是这样做的:我有几个客户以这种方式将外联网访问或 HL7 侦听器限制为医疗保健合作伙伴;它并不难为了让他们填写表格并提供 IP 和/或网络块,我应该期待来自以下方面的流量:如果他们想要访问外联网,他们必须给我一个 IP 或子网。这很少是一个移动的目标,所以你不会每天被数百个 IP 更改请求淹没:拥有自己的网络块的大型校园医院网络,拥有数百个子网和数千个主机 IP,通常会给我我应该期待一些 IP 地址或子网;再说一次,这些不是一直在校园里四处游荡的笔记本电脑用户,那么为什么我会期望看到来自不断变化的 IP 地址的 UDP 源数据包呢?显然,我在这里假设我是一个假设,但我敢打赌,对于 < 100 台设备,它并不像您想象的那么多。是的,这将是一个冗长的 ACL,是的,
如果由于某种原因通信渠道没有打开(或者有人太害怕或懒得联系这些旧设备所有者并正确执行此操作),您需要建立正常使用/活动的基线,以便您可以制定其他一些有助于(但不能阻止)您参与 DNS 放大攻击的策略。
长时间运行tcpdump应该对传入的 UDP 53 进行过滤,并在 DNS 服务器应用程序上进行详细日志记录。我还想开始收集源 IP 地址/网络块/地理 IP 信息(您的所有客户都在美国吗?阻止其他所有内容)因为,正如您所说,您没有添加任何新设备,您只是提供了一个遗留设备为现有装置提供服务。
这也将帮助您了解正在请求哪些记录类型,以及针对哪些域、由谁以及多久请求:为了让 DNS 放大按预期工作,攻击者需要能够请求大记录类型(1) 到功能域(2)。
“大记录类型”:您的设备是否甚至需要 TXT 或 SOA 记录才能由您的递归 DNS 服务器解析?您可以指定哪些记录类型在您的 DNS 服务器上有效;我相信 BIND 和 Windows DNS 是可能的,但是您必须进行一些挖掘。如果您的 DNS 服务器响应SERVFAIL任何 TXT 或 SOA 记录,并且该响应至少比预期的有效负载小一个(或两个)数量级。显然你仍然是“问题的一部分”,因为被欺骗的受害者仍然会SERVFAIL从你的服务器获得这些响应,但至少你没有攻击它们,也许你的 DNS 服务器从收集的列表中“除名”机器人随着时间的推移使用不“合作”。
“功能域”:您可能只能将有效的域列入白名单。我在我的强化数据中心设置中执行此操作,其中服务器只需要 Windows 更新、赛门铁克等即可运行。但是,此时您只是在减轻您造成的损害:受害者仍会受到服务器的轰炸NXDOMAIN或SERVFAIL响应,因为您的服务器仍会响应伪造的源 IP。同样,Bot 脚本也可能会根据结果自动更新其打开的服务器列表,因此这可能会删除您的服务器。
我也会使用某种形式的速率限制,正如其他人所建议的,无论是在应用程序级别(即消息大小、每个客户端的请求限制)还是防火墙级别(请参阅其他答案),但同样,您将必须做一些分析以确保您不会杀死合法流量。
经过调整和/或训练的入侵检测系统(同样,这里需要一个基线)应该能够随着时间的推移按来源或数量检测异常流量,但可能需要定期进行保姆/调整/监控以防止误报和/ 或查看它是否真的在防止攻击。
归根结底,您必须怀疑所有这些努力是否值得,或者您是否应该坚持做正确的事情并且首先消除问题。
这取决于您想要执行的速率限制类型。
速率限制iptables实际上更旨在限制传入的数据包,因为达到限制的数据包将匹配过滤器并应用指定的目标(例如,ACCEPT)。您可能会有一个后续目标到DROP过滤器不匹配的数据包。虽然iptables有一个QUEUE目标,但它只是将数据包传递到用户空间,您需要在其中提供自己的排队应用程序。您还可以对传出数据包进行速率限制,但很少有人真的想开始丢弃传出流量。
iptables 速率限制下降:
iptables -A INPUT -p udp --port 53 -m hashlimit --hashlimit 1/minute --hashlimit-burst 5 -j ACCEPT
iptables -A INPUT -p udp --port 53 -j DROP
Run Code Online (Sandbox Code Playgroud)
使用hashlimit而不是limit将为您提供每个目标 IP 的速率限制。即,达到限制的 8.8.8.8 的五个数据包将阻止数据包发送到 8.8.4.4,而hashlimit如果 8.8.8.8 达到最大值,您仍然可以达到 8.8.4.4,这听起来更像您想要的。
如果您不想丢弃超过限制的数据包,那么您真正想要的是tc. tc将调节流量以获得稳定的流量而不是大量的突发流量。在传入端,数据包传送到应用程序的速度较慢,但都会按顺序到达。传出的数据包将尽可能快地离开您的应用程序,但会以一致的流放置在线路上。
我没有使用tc太多,但这里有一个速率限制 ICMP的示例,您可能可以轻松地为 DNS 进行调整。
| 归档时间: |
|
| 查看次数: |
7959 次 |
| 最近记录: |