bas*_*sin 2 domain-name-system linux iptables iproute2
如何在 Linux 中删除传入的负面 DNS 响应?(我想要超时)我正在考虑创建一个 iptables 规则:
iptables -I INPUT -p udp --sport 53 -m u32 ...
Run Code Online (Sandbox Code Playgroud)
来自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)
Run Code Online (Sandbox Code Playgroud)
我认为 -m u32 的偏移量是从 ip 标头计算的。还减去 2 得到 32 位。
$ echo $(( 0x002C - 0x000E - 2 ))
28
Run Code Online (Sandbox Code Playgroud)
最后 4 位的掩码是 0xF
所以规则应该是这样的:
iptables -I INPUT -p udp --sport 53 -m u32 --u32 "28&0xF=3" -j DROP
Run Code Online (Sandbox Code Playgroud)
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 的想法,打算在我的一些网络中测试它。