IP表拦截exception

我有一组如下所示的iptable规则:

-A PREROUTING --jump intercept-nat -A intercept-nat --jump DNAT -s 10.10.1.0/24 ! -d 10.10.1.1/32 -p tcp -m tcp --dport 80 --to-destination 10.10.1.1:3126 -m comment --comment "intercept-nat" -A intercept-nat --jump DNAT -s 10.10.1.0/24 ! -d 10.10.1.1/32 -p tcp -m tcp --dport 443 --to-destination 10.10.1.1:3127 -m comment --comment "intercept-nat" -A intercept-nat --jump DNAT -s 10.1.2.0/24 ! -d 10.10.1.1/32 -p tcp -m tcp --dport 80 --to-destination 10.10.1.1:3126 -m comment --comment "intercept-nat" -A intercept-nat --jump DNAT -s 10.1.2.0/24 ! -d 10.10.1.1/32 -p tcp -m tcp --dport 443 --to-destination 10.10.1.1:3127 -m comment --comment "intercept-nat" 

它的目的是发送80和443stream量到Squid,一个HTTPcaching代理。 我想在iptables规则中放一些行,不会把443stream量导向特定的IP地址到10.10.1.1:3127(squid)

使用案例:我有一个websocket服务器,代理服务器需要连接到,但鱿鱼不支持websockets。 所以我想让stream量绕过鱿鱼

我会做以下几点:

 -A PREROUTING -s 10.10.1.0/24 ! -d 10.10.1.1/32 --jump intercept-nat -A PREROUTING -s 10.1.2.0/24 ! -d 10.10.1.1/32 --jump intercept-nat -A intercept-nat -d target-ip -p tcp -m tcp --dport 443 -j RETURN -A intercept-nat --jump DNAT -p tcp -m tcp --dport 80 --to-destination 10.10.1.1:3126 -m comment --comment "intercept-nat" -A intercept-nat --jump DNAT -p tcp -m tcp --dport 443 --to-destination 10.10.1.1:3127 -m comment --comment "intercept-nat" 

每当一个数据包的目的地匹配target-ip它就会跳过其他的intercept-nat规则。 我也改变了你的一些规则,使它们更易读易操作;-)。

绕过NAT最简单的方法是接受数据包,这将结束表(PREROUTING)以及链(intercept-nat)中的path。 RETURN将离开链(intercept-nat)并继续通过表(PREROUTING)。

 iptables -t nat -A PREROUTING <some criterium> -j ACCEPT 

要么

 iptables -t nat -A intercept-nat <some criterium> -j ACCEPT 

即使我写了-A ,你必须把这一行放在NAT动作之前,或者把它插入到第一个位置。

鉴于你想排除某些stream量从NAT到你的代理,一个规则应该放在其他人之前。 而且我不会把它包含在你的用户定义的链接中,因为这个链在逻辑上意图做NAT,而不是做。

只是:

 iptables -t nat -A PREROUTING -d wxyz -p tcp --dport 443 -j ACCEPT 

其中wxyz是websocket服务器地址。

另外我会修改你现在的规则(虽然我在这里猜测一些事情):

  • 我认为你不需要在匹配部分指定源IP地址,因为你可能只是想redirect来自你的内部局域网的所有stream量。 我会假设eth0是外部lan, eth1eth2是内部的。
  • 您可能不需要指定目标IP地址,从而节省一些CPU周期。 我假设networkingstream量不是定向到代理机器,除非你有一个networking服务器上运行。
  • 如果代理与防火墙运行在同一台计算机上,则也可以避免使用REDIRECT来指定要在DNAT目标中使用的目标IP。

消除IP地址的规范可以改善维护,允许重用并使事情更简单。 所有在一起将是:

 -A PREROUTING -d wxyz/32 -p tcp -m tcp --dport 443 -j ACCEPT -A PREROUTING ! -i eth0 -j intercept-nat -A intercept-nat -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3126 -m comment --comment "intercept-nat" -A intercept-nat -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 3127 -m comment --comment "intercept-nat"