最好是类似于iptables
. 基本上,我想做域过滤/白名单/黑名单,就像我在iptables
. 有没有关于如何做到这一点的建议?
小智 10
如果您使用带有 iptables 规则的名称解析来丢弃流量,则名称将在创建该规则期间进行解析。如果有什么变化,你的规则将不再有效。这可能是一个解决方案(不是一个美丽的......):
# iptables -I FORWARD -p udp --dport 53 -m string --hex-string "|03|www|08|facebook|03|com" --algo bm -j DROP
Run Code Online (Sandbox Code Playgroud)
从局域网内的另一台主机:
# host www.facebook.com
www.facebook.com A record not found, try again
Run Code Online (Sandbox Code Playgroud)
基本上,您是在对每个 dns packet( udp/53
) 说www.facebook.com to
要丢弃的十六进制字符串。请注意,这将丢弃名称解析,而不是 http 流量本身。
用管道(|03|www|08|facebook|03|com
)分隔的十六进制数字是.
dns 查询中点符号的表示。它将说明以下多少个字符将代表FQDN(主机、域、顶级域)的每个部分示例:
主持人: 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.@.@....IGB
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.....
Run Code Online (Sandbox Code Playgroud)
但要记住:
小智 5
也许你的问题的答案为时已晚,但最近我需要解决一个类似的问题,谷歌把我带到这里
在搜索失败后,我用 C 编写了一个小实用程序,用于拦截 DNS 响应,将其中的域名与给定的正则表达式进行比较,并列出匹配的 IP 地址。这是:https : //github.com/vmxdev/sidmat/
您不需要设置自己的 DNS 服务器,实用程序可以从任何服务器捕获 DNS 响应
例如,要查看现在已解析的 facebook.com(和子域)IP 地址,您可以运行
# ./sidmat eth0 "^facebook\.com$|\.facebook\.com$"
173.252.120.6
...
Run Code Online (Sandbox Code Playgroud)
其中 eth0 是路由器上的网络接口(或 DNS 响应通过的地方)
您可以轻松地将它与 iptables(或 iptables 与 ipset)集成
但:
归档时间: |
|
查看次数: |
26908 次 |
最近记录: |