我想使用 IPTables 阻止所有传出到任何域或子域的流量。该-d
选项似乎允许引用域。我通过 Google 搜索找到了以下内容,表明可以这样引用:仅允许 HTTP 流量到特定域
类似地,我们也可以使用上述方法来过滤其他端口和协议,例如在 TCP 端口 80 上运行的标准 Web 流量。
iptables -I FORWARD 1 -p tcp -d dd-wrt.com --dport 80 -j ACCEPT
iptables -I FORWARD 2 -p tcp --dport 80 -j DROP
这将接受所有发往 dd-wrt.com 的 http 流量,同时阻止发往其他任何地方的传出 http 流量。如果您希望允许多个站点,请在 DROP 之前插入其他规则(确保正确排序和编号)。
但是我想要做的是引用 *.domain.com(例如阻止所有传出到 *.youtube.com 或类似网站的流量)。
-d
是否有人知道这是否可能,如果可以, IPTables 中支持通配符子域的选项的语法是什么?
答案1
IPtables 中的 DNS 解析有点奇怪。运行时防火墙仅针对 IP 地址起作用,而不针对域名。为了清楚起见,让我们逐步介绍该过程。
- 您添加一条规则:
iptables -I FORWARD 1 -p tcp -d dd-wrt.com --dport 80 -j ACCEPT
- IPtables 将 dd-wrt.com 传递给解析器子系统。
- 解析器子系统返回:
83.141.4.210
- IPtables修改并创建规则如下:
-p tcp -d 83.141.4.210 --dport 80 -j ACCEPT
如果域名返回多个地址,例如 www.google.com,则为每个返回的 IP 地址插入该规则的副本。当然,除非您使用该--replace
选项,在这种情况下,多个返回地址将导致它失败。
此查找仅有的添加规则时会发生这种情况。因此,如果 dd-wrt.com 被移动到新主机,那么您的规则将不再正常工作。您必须删除并重新添加或重新启动防火墙才能使新地址生效。
因此,您可以简单地理解其含义,即您根本无法使用它来根据域名进行阻止。您只会阻止 IP 地址,您可能只是偶尔使用域名来检索地址。同样,通配符也不起作用。主机名*.dd-wrt.com
没有 A 记录,因此无法将其转换为 IP 地址。
通常,仅根据 IP 地址进行阻止或拒绝对您最有利。这样,您或您的员工就不会混淆哪些内容应该被阻止(或允许),哪些内容实际上应该被阻止。