最好是类似的东西iptables
。基本上,我想像在iptables
.有关于如何执行此操作的任何建议吗?
答案1
如果您使用 iptables 规则的名称解析来丢弃流量,则名称将在创建该规则期间进行解析。如果事情发生变化,您的规则将不再有效。这可能是一个解决方案(不是一个完美的解决方案......):
# iptables -I FORWARD -p udp --dport 53 -m string --hex-string "|03|www|08|facebook|03|com" --algo bm -j DROP
从 LAN 内的另一台主机:
# host www.facebook.com
www.facebook.com A record not found, try again
基本上,您是在对每个udp/53
具有十六进制字符串的 dns packet( )进行www.facebook.com to
丢弃。请注意,这将丢弃名称解析,而不是 http 流量本身。
用 Pipes() 分隔的十六进制数字|03|www|08|facebook|03|com
表示.
dns 查询上的点符号。它将说明以下字符中的多少个将代表一个字符的每个部分完全合格域名(主机、域、顶级域)示例:
主持人:mail.google.com
十六进制表示:04 6d 61 69 6c 06 67 6f 6f 67 6c 65 03 63 6f 6d
“视觉表现:04mail06google03com
使用 tcpdump 获取数据包:
# tcpdump -i eth0 -X dst port 53
15:50:11.643672 IP xxx.xxx.xxx.xxx:xxx > ns4.google.com.domain: 16530 A? mail.google.com. (33)
0x0000: 4500 003d 779a 4000 4011 b390 c949 4742 E..=w.@[email protected]
0x0010: d8ef 260a 8424 0035 0029 0fc0 4092 0000 ..&..$.5.)..@...
0x0020: 0001 0000 0000 0000 046d 6169 6c06 676f .........mail.go
0x0030: 6f67 6c65 0363 6f6d 0000 0100 01 ogle.com.....
但要记住:
- 如果您尝试过滤更具体的流量,例如 smtp、ftp 或 http,那么该协议的代理应该更好。
- 您正在“劫持”dns 查询而不是阻止域。用户没那么傻;)
答案2
也许你的问题的答案已经太晚了,但最近我需要解决一个类似的问题,谷歌带我到这里
搜索失败后,我用 C 语言编写了一个小实用程序,用于拦截 DNS 响应,将其中的域名与给定的正则表达式进行比较,并列出匹配的 IP 地址。这里是:https://github.com/vmxdev/sidmat/
您无需设置自己的 DNS 服务器,实用程序可以捕获来自任何服务器的 DNS 响应
例如,要查看现在已解析的 facebook.com(和子域)IP 地址,您可以运行
# ./sidmat eth0 "^facebook\.com$|\.facebook\.com$"
173.252.120.6
...
其中 eth0 是路由器上的网络接口(或 DNS 响应传递的地方)
您可以轻松地将其与 iptables(或 iptables 与 ipset)集成
但:
- 实用性非常简单。它不执行很多检查,因此攻击者可以欺骗它
- 如果用户不使用 DNS 进行名称解析,则此技术毫无用处
答案3
答案4
如果运行本地缓存bind9,它通常由dummy-block
zone "facebook.com" { type master; file "dummy-block"; };
和dummy-block
文件:
$TTL 604800
@ IN SOA localhost. root.localhost. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS localhost.
@ IN A 127.0.0.1
* IN A 127.0.0.1
也可以看看:
运行 BIND9 和 ISC-DHCP举例facebook.com
说明。