利用iptables进行DNS过滤

利用iptables进行DNS过滤
  1. AAAA记录的过滤
    1.1 需要过滤的场景:
    IPV6出国的速度太慢,需要降级成IPV4出国,速度有保障。
    利用dnsmasq进行域名分dns解析的时候,为了降低规则的复杂度,需要拒绝特定域名的AAAA记录。
    1.2 指令
    禁止所有AAAA查询
iptables -A OUTPUT -p udp -d 8.8.8.8 --dport 53 -m string --algo bm --from 40 --hex-string '|001c|' -j DROP

禁止特定域名的AAAA查询

iptables -A INPUT -i eth0 -p udp --dport 53 -m string --hex-string "|09|proxypipe|03|net" --algo bm -j DROP
iptables -A INPUT -i eth0 -p udp --dport 53 -m string --hex-string "|06|kitten|02|ru" --algo bm -j DROP
iptables -A INPUT -i eth0 -p udp --dport 53 -m string --hex-string "|03|www|07|puppies|04|woof" --algo bm -j DROP
  1. 过滤DNS返回的特定IP
    2.1 先把要屏蔽的IP转化成netmask
8.7.198.45	转化成 08 07 C6 2D
4.36.66.178	转化成 04 24 42 B2

2.2 利用iptables进行匹配,丢包

iptables -t mangle -I PREROUTING -p udp --sport 53 -m string --algo bm --hex-string "|042442b2|" --from 60 --to 180 -j DROP
iptables -t mangle -I PREROUTING -p udp --sport 53 -m string --algo bm --hex-string "|0807c62d|" --from 60 --to 180 -j DROP

上面这个是用string进行匹配,也可以使用u32进行匹配,效率更高

iptables -t mangle -I PREROUTING -p udp  --sport 53 -m u32 --u32 "0&0x0F000000=0x05000000 && 22&0xFFFF@16=0x042442b2,0x0807c62d" -j DROP

2.3 更多详情参考https://gist.github.com/wen-long/9580811

Comments