Linux下如何进行域名过滤?

Linux下如何进行域名过滤?

最好是类似的东西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

对于黑名单,最简单的方法可能是使用域名解析

安装dnsmasq

$ sudo apt-get install dnsmasq

并将这一行添加到/etc/dnsmasq.conf

address=/facebook.com/127.0.0.1

这会阻止脸书网及其所有子域。

注意:对于 ubuntu,请参阅这个帖子

答案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说明。

一种基于 DNS 的简单阻止网络广告的方法

相关内容