如何使用 iptables 阻止来自多个 DNS 拒绝回复的目标 IP

如何使用 iptables 阻止来自多个 DNS 拒绝回复的目标 IP

我如何阻止 iptables 绑定到同一 ip 地址并拒绝发送的数据包序列?

我考虑使用字符串扩展来查找“Refused”。这是否可以保护 DNS 免受 DoS 攻击?

我的尝试:

iptables -A INPUT -p udp -m udp --sport 53 -m string --string "Refused" --algo bm -m recent --set --name block-dns --rsource
iptables -A INPUT -p udp -m udp --sport 53 -m string --string "Refused" --algo bm -m recent --rcheck --seconds 10 --hitcount 1 --name block-dns --rsource -j DROP

答案1

不要这样做。

  1. 您正在创建一个拒绝服务向量。由于 DNS 查询很容易被欺骗,因此这种策略为攻击者打开了大门,让他们训练您的 DNS 服务器忽略来自特定 IP 地址的流量。他们所要做的就是欺骗查询,生成响应,REFUSED然后这个“智能”防火墙就会很乐意开始忽略来自受害者的流量。

  2. REFUSED响应对攻击者来说一开始就毫无用处。希望利用 DNS 进行肮脏工作的攻击者通常希望获得某种形式的放大效应,而这些查询不会产生这种效应。大多数 DNS 专业人士认为这是不必要的过度设计。

log2ban 样式策略仅在处理具有已确认源 IP 的流量时才有效。TCP 通过三次握手内置了这种保护,但 UDP 没有。

答案2

我不太明白您想要实现什么,但失败的原因很简单,因为 DNS 响应实际上并不包含字符串REFUSED

RFC 1035定义一个响应头,其中 4 位字段设置为RCODE响应代码,其中 的值5代表“拒绝”

4.1.1. Header section format

The header contains the following fields:

                                1  1  1  1  1  1
  0  1  2  3  4  5  6  7  8  9  0  1  2  3  4  5
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|                      ID                       |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|QR|   Opcode  |AA|TC|RD|RA|   Z    |   RCODE   |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|                    QDCOUNT                    |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|                    ANCOUNT                    |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|                    NSCOUNT                    |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|                    ARCOUNT                    |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

RCODE 5- 名称服务器由于策略原因拒绝执行指定操作。例如,名称服务器可能不希望向特定请求者提供信息,或者名称服务器可能不希望对特定数据执行特定操作(例如区域传输)。

答案3

利用 HBruijn 的回答,在 DNS 服务器上如何使用 u32 匹配删除任何带有 REFUSED RCODE 的 UDP DNS 回复

iptables -I OUTPUT -p udp --sport 53 -m u32 --u32  '0>>22&0x3C@8 & 0x800F=0x8005' -j DROP

它跳过 IP 标头,然后跳过 UDP 标头的另外 8 个字节并检查有效负载开始处第一个 u32 数据的内容:第一位为 1(回复),最后 4 位值 = 5(拒绝)。

正如我所提醒的,禁止源 IP 执行 UDP 查询不是一个好主意,因为对于伪造的 IP,这是一种 DoS。没有收到拒绝回复似乎不是一个真正的问题。我刚刚从这个答案中删除了“最近”规则。

相关内容