IPtables:不要redirect特定的IP

我尝试使用以下命令将所有networkingstream量redirect到计算机:

iptables -t nat -A PREROUTING -p tcp –destination-port 80 -j REDIRECT –to-port 1000 

它的工作原理,但我想添加一个规则,以便不redirect特定的目的地ip的stream量(例如:facebook.com)

找不到在谷歌上。 预先感谢 !

我注意到,您提供的示例目标IP实际上不是IP地址(这是iptables处理的内容),而是完全限定的域名。 但是,假设您确实引用了IP地址,我们假设它是198.51.100.1 (根据我们对示例IP地址的build议 )。

只有一个地址可以豁免,您可以将其作为明确的豁免添加到规则中:

 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链, 在这个链中不会再有任何进一步的处理。 他们最终的命运将由他们将通过的其他连锁店的规则和政策来决定。