如何在Linux中删除传入的负面DNS响应? (我想要一个超时代替)我想创build一个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
ip packet中DNS标志的偏移量是28bytes,你需要检查2byte字段u32规则中的最后2位,即"28&0x000F=0x03"
我的testing规则是: iptables -A INPUT -m u32 -p udp --sport 53 --u32 "28&0x000F=0x03" -j LOG
顺便说一句,我喜欢这个想法,使用水平分割DNS的这个防火墙规则,去testing我的一些networking。
这会将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: "