如何在 Linux 中删除传入的负面 DNS 响应?(我想要超时)我正在考虑创建一个 iptables 规则:
iptables -I INPUT -p udp --sport 53 -m u32 ...
来自 wireshark:
000E start of IP Packet (fixed, at first, I wrote 0010)
0022 start of UDP Packet
002A start of DNS message
002C Flags
.... .... .... 0000 = Reply code: No error (0)
.... .... .... 0011 = Reply code: No such name (3)
我认为 -m u32 的偏移量是从 ip 标头计算的。还减去 2 得到 32 位。
$ echo $(( 0x002C - 0x000E - 2 ))
28
最后 4 位的掩码为 0xF
,因此规则应该是这样的:
iptables -I INPUT -p udp --sport 53 -m u32 --u32 "28&0xF=3" -j DROP
答案1
IP 数据包中 DNS 标志的偏移量为 28 字节,您需要检查 2 字节字段 u32 规则中的最后 2 位"28&0x000F=0x03"
我的测试规则是:iptables -A INPUT -m u32 -p udp --sport 53 --u32 "28&0x000F=0x03" -j LOG
顺便说一句,我喜欢将此防火墙规则用于分割水平 DNS 的想法,并将在我的某些网络上进行测试。
答案2
这将删除 BIND9 对当前欺骗 UDP 查询的“拒绝”回复!
iptables -F OUTPUT
#iptables -A OUTPUT -p udp --sport 53 -j LOG --log-prefix="OUT-UPD-RAW : "
#iptables -A OUTPUT -m u32 -p udp --sport 53 --u32 "28&0xFFFF=0x8105" -j LOG --log-prefix="STOPPED-DNS-REJECTED-REPLY "
iptables -A OUTPUT -m u32 -p udp --sport 53 --u32 "28&0xFFFF=0x8105" -j DROP
iptables -A OUTPUT -p udp --sport 53 -j LOG --log-prefix="OUT-UPD-SENT: "
答案3
@DukeLion 是正确的,但您还应该注意 NOERROR 和 NOANSWER。要删除此错误,请添加以下 iptables 规则:
iptables -I INPUT -m u32 -p udp --sport 53 --u32 "32&0xFFFF=0x0000" -j DROP
PS. IP 数据包中的 DNS RCODE“实际”偏移量为 31.5 字节,因此我不喜欢使用0x1e&0x30000=0x30000
答案4
删除否定响应工作正常,直到我添加了多个search
域/etc/resolv.conf
:libc 按顺序尝试后缀,如果我删除了 libc 解析器最初选择的错误后缀的否定响应,它会在尝试正确的后缀之前放弃并超时。
所以我决定延迟负面响应,而不是丢弃它们。这确保dnsmasq
在从其他服务器获得负面响应之前,先从正确的服务器获得正面响应。
延迟不是用iptables
而是用 来完成的iproute2
。这是我针对现代 systemd Linux 的配置:
/etc/modules-load.d/my-tc.conf
ifb
/etc/systemd/system/my-tc.service
[Unit]
Before=NetworkManager.service
[Service]
Type=oneshot
ExecStart=/bin/bash -c "/usr/bin/ip link set dev ifb0 up && /usr/bin/tc qdisc add dev ifb0 root netem delay 900ms"
ExecStop=/bin/bash -c "/usr/bin/tc qdisc del dev ifb0 root && /usr/bin/ip link set dev ifb0 down"
RemainAfterExit=true
[Install]
WantedBy=network.target
/etc/NetworkManager/dispatcher.d/my-tc.sh
#!/bin/bash
if [ "enp0s3 up" = "$1 $2" ]; then
tc qdisc add dev enp0s3 ingress
tc filter add dev enp0s3 parent ffff: protocol ip \
u32 \
match ip protocol 17 0xff \
match ip sport 53 0xffff \
match u32 0x03 0x0F at 28 \
flowid 1:1 action mirred egress redirect dev ifb0
fi