随着像 .zip 这样可能非常恶意的新 TLD 被批准,拥有随时阻止整个 TLD 的能力似乎是明智之举。在 iptables 中执行此操作的正确方法是什么?
答案1
在 iptables 中执行此操作的正确方法是什么?
你不能。
iptables
不关心 DNS。顾名思义,它基于 IP 协议工作。IP 协议没有名称的概念;IP 使用的地址是 IP 地址。
您必须使用 DNS 或了解 DNS 的网关或代理来阻止 DNS 名称。
答案2
iptables
(和ip6tables
)函数在OSI网络模型它没有任何 DNS 名称的概念——它处理 IPv4 地址(并ip6tables
处理 IPv6 地址),正如 @vidarlo 所说。但是,假设您想忽略它。这实际上非常简单。
你需要做的就是每一个连接尝试,执行反向 DNS 查找iptables
针对/遇到的IP 地址ip6tables
,前它决定是否允许连接。
然而,也出现了一些重大问题:
- 表现。在每个连接上执行这样的查找绝对会毁掉你原本期望的该接口的任何性能。你可能不希望这样,所以你可以设置一个缓存 DNS 服务器,但这又引发了另外两个问题。
- CDN存在。仅仅因为 Cloudflare 或 AWS 或 Digital Ocean 目前正在为域名提供 IP 地址,
microsoft.zip
并不意味着您下次查找时会获得该 IP 地址。此外,如果您决定阻止整个 Cloudflare/AWS/Digital Ocean,因为它们允许 .zip 托管域名,那么。祝你好运。 - 可靠性。为了从 IP 地址获取 DNS 名称,您需要执行 RDNS 查找,正如我上面提到的那样。但绝对不需要任何人提供 A 或 AAAA 记录。这意味着如果您对 IP 地址进行 RDNS 查找,它不必在 .zip gTLD 中返回任何结果(或者,它可以返回一些 Cloudflare/AWS 名称)。虽然我们都看到了大量的域名购买列表,但您不会得到任何子域名。所以有人可能会购买
amazon.zip
你可能认为他们会创建aws.amazon.zip
或s3.amazon.zip
或www.amazon.zip
,但您实际上只有在进行查找后才会知道。答案可能会在没有警告的情况下发生变化;唯一能确定存在哪些子域的方法是成为域所有者或注册商。
因此,您需要创建某种方法来找出存在哪些 .zip 域,然后找出这些域使用的 IP 地址,然后找到这些域正在使用的所有可能的子域,然后管理域/IP/TTL 数据库并保持更新,然后允许iptables
/ip6tables
从中读取(但您可能更适合使用类似呼噜或者苏里卡塔)。
看到了嗎?很简单。
答案3
虽然我希望这些详细的答案对那些像我一样以错误的方式处理这个问题的人有所帮助,以解释为什么这个问题是有缺陷的,但如果你正在寻找答案,这取决于你的网络配置。就我而言,我使用的是 dnsmasq,我发现这篇文章对实现我的目标很有帮助:
https://stackoverflow.com/questions/46796156/dnsmasq-block-top-level-domain-extension
答案4
iptables 无法封掉整个 TLD,域名和 IP 地址是两种不同的命名方式,iptables 可以封掉高风险 IP 地址的访问。
如果您有其他防火墙,则可以阻止所有以 .zip 结尾的 URL 的访问。