使用iptables封锁对某个域名的DNS查询
现在有一需求,需要禁止主机对某一个域名的DNS查询,想到用iptables的string模块,使用下面的命令:
成都创新互联专注于企业成都全网营销推广、网站重做改版、迭部网站定制设计、自适应品牌网站建设、HTML5、成都做商城网站、集团公司官网建设、成都外贸网站制作、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为迭部等各大城市提供网站开发制作服务。
iptables -D OUTPUT -m string --string "www.baidu.com" --algo bm -j
DROP
但使用上面的命令并不能过滤对www.baidu.com 的查询。根据参考链接中的文档,www.baidu.com 在DNS查询时会被编码如下:
03www05baidu03com
编码时域名以点被分为各子字符串(www,baidu和com)“.”不会被编码,每个子字符串前面是这个字符串的长度。下面是对DNS查询的抓包:
字符串 www.baidu.com 被编码十六进制为:
03 77 77 77 05 62 61 69 64 75 03 63 6f 6d
77的是w的ascii码,其余字符也可以对照ascii进行查询。77 77 77 前面的03正是www这三个字符串的长度。
根据参考链接,可以使用iptables的string模块的十六进字符串进行过滤
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|
转换成十六进制。
参考链接:
https://linuxsecurity101.com/2018/11/18/tips-and-tricks-blocking-dns-requests-via-iptables/
文章题目:使用iptables封锁对某个域名的DNS查询
分享地址:http://scyingshan.cn/article/jhhdjs.html