我正在尝试使用以下方法将所有网络流量重定向到计算机:
iptables -t nat -A PREROUTING -p tcp –destination-port 80 -j REDIRECT –to-port 1000
它可以工作,但我想添加一条规则以便不将流量重定向到特定的目标 IP(例如:facebook.com)
在 Google 上找不到。提前致谢!
答案1
我注意到,您给出的示例目标 IP 实际上不是 IP 地址(这才是关键iptables
),而是一个完全合格的域名。但是,让我们假设您确实引用了一个 IP 地址,并且假设它是198.51.100.1
(符合我们的有关示例 IP 地址的建议)。
如果只有一个地址需要豁免,您可以将其作为明确豁免添加到规则中:
iptables -t nat -A PREROUTING -p tcp --dport 80 \! -d 198.51.100.1 -j REDIRECT --to-port 1000
请注意使用反斜杠来保护否定 ( !
) 免受 shell 的攻击。如果您有更多地址需要豁免,那么更简单的方法是编写与这些地址匹配的明确规则,并使用无害的处置目标完成处理,然后在最后留下一个包罗万象的规则来处理其他所有事情:
iptables -t nat -A PREROUTING -p tcp --dport 80 -d 192.0.2.0/24 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp --dport 80 -d 198.51.100.0/24 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp --dport 80 -d 203.0.113.0/24 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 1000
请注意,顺序在 iptables 规则中始终很重要。这些规则在链中的位置很重要,您需要小心谨慎才能正确执行。
编辑:您问,如果数据包与目标规则匹配ACCEPT
,即豁免数据包,会发生什么情况。一旦它们匹配ACCEPT
,它们将脱离PREROUTING
nat 链,并且不会对它们进行进一步处理在那个链中。他们的最终命运将由他们随后经过的其他链条中的规则和政策决定。