Welcome to Yumao′s Blog.
想必有很多網友都這麼感覺過
明明將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