利用iptables丢弃DNS伪包
想必有很多网友都这么感觉过 明明将DNS设置成了GoogleDNS或者OpenDNS 为什么在ping命令中发现ping不通一些网站 发现解析到的IP都是伪IP 在所有的之前我们需要先了解下DNS是怎么工作的 我们需要先了解的是DNS传输状态 DNS伺服器开放的是53/…
想必有很多网友都这么感觉过
明明将DNS设置成了GoogleDNS或者OpenDNS
为什么在ping命令中发现ping不通一些网站
发现解析到的IP都是伪IP
在所有的之前我们需要先了解下DNS是怎么工作的
我们需要先了解的是DNS传输状态
DNS伺服器开放的是53/UDP端口接受我们客户端的请求
然后再接到请求之后将解析结果发到我们的客户端
所以在之前不了解UDP的同学可以先baidu下
所以可以得知 UDP是一个不安全的传输协议
因为我们一般使用的GoogleDNS或者OpenDNS伺服器在国外
在我们进行请求并且返回包的过程中会有一个延时
那么DNS污染就是靠这个延时而存活的
我们客户机并不会验证UDP包的合法性
所以在我们客户机受到假DNS伺服器提前发的DNS伪包
就会认为是我们请求的回执
这样就会丢弃正常伺服器返回的正常解析包
导致DNS解析异常 俗称DNS污染
那么我们有没有方法丢弃DNS伪包呢
答案肯定是有的
在linux系统中我们可以使用u32匹配伪包
进行丢弃不接受操作
这样就可以正常的收到DNS解析包了
匹配规则如下:
#/bin/sh
iptables -I INPUT -p udp -m udp --sport 53 -m u32 --u32 "0&0x0F000000=0x05000000 && 22&0xFFFF@16=0x5d2e0859,0xcb620741,0x0807c62d,0x4e10310f,0x2e52ae44,0xf3b9bb27,0xf3b9bb1e,0x9f6a794b,0x253d369e,0x9f1803ad" -j DROP
iptables -I INPUT -p udp -m udp --sport 53 -m u32 --u32 "0&0x0F000000=0x05000000 && 22&0xFFFF@16=0x3b1803ad" -j DROP