現(xiàn)在有一需求,需要禁止主機(jī)對某一個域名的DNS查詢,想到用iptables的string模塊,使用下面的命令:
成都創(chuàng)新互聯(lián)專注于企業(yè)成都全網(wǎng)營銷推廣、網(wǎng)站重做改版、迭部網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、HTML5、成都做商城網(wǎng)站、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為迭部等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
iptables -D OUTPUT -m string --string "www.baidu.com" --algo bm -j
DROP
但使用上面的命令并不能過濾對www.baidu.com 的查詢。根據(jù)參考鏈接中的文檔,www.baidu.com 在DNS查詢時會被編碼如下:
03www05baidu03com
編碼時域名以點(diǎn)被分為各子字符串(www,baidu和com)“.”不會被編碼,每個子字符串前面是這個字符串的長度。下面是對DNS查詢的抓包:
字符串 www.baidu.com 被編碼十六進(jìn)制為:
03 77 77 77 05 62 61 69 64 75 03 63 6f 6d
77的是w的ascii碼,其余字符也可以對照ascii進(jìn)行查詢。77 77 77 前面的03正是www這三個字符串的長度。
根據(jù)參考鏈接,可以使用iptables的string模塊的十六進(jìn)字符串進(jìn)行過濾
iptables -A OUTPUT -p udp --dport 53 -m string --hex-string "|03|www|05|baidu|03|com|" --algo bm -j DROP
iptables 自動將
|03|www|05|baidu|03|com|
轉(zhuǎn)換成十六進(jìn)制。
參考鏈接:
https://linuxsecurity101.com/2018/11/18/tips-and-tricks-blocking-dns-requests-via-iptables/