我有一套服务,我想为其中一个设置基于IP的ACL(白名单),而不是另一个。 这些问题似乎performance为服务在内部在相同的端口上运行(端口80),但我使用网关上的不同端口来访问它们。
网关上的端口8088 - > 10.0.0.A上的端口80(带有IP白名单) 网关上的端口80 - > 10.0.0.B上的端口80
而且我可以通过以下规则来解决所有问题:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8088 -j DNAT - 到10.0.0.A:80 iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT - 到10.0.0.B iptables -A FORWARD -p tcp -i eth0 --dport 80 -j ACCEPT
问题是FORWARD ACCEPT规则涵盖了这两个NAT规则,因为它们似乎是基于目标端口(–dport 80),而不是网关上的传入端口(80 vs 8088)。
我无法弄清楚如何将FORWARD规则改写成2个单独的规则,这样我就可以在80 vs 8088上有不同的连接进入网关的行为。
附加信息:
lsb_release -d 描述:Debian GNU / Linux 7.5(wheezy) iptables --version iptables v1.4.14
第一个解决scheme尝试我已经能够剥离链并在那里执行路由,但由于以下错误消息,我无法添加ACL(拒绝)行:
x_tables:ip_tables:REJECT目标:只在过滤表中有效,不是nat
这是我放在:
iptables -t nat -N白名单 iptables -t nat -A白名单-p tcp -j DNAT - 到10.0.0.A:80 iptables -t nat -A白名单-s <whatsmyip.org> -j RETURN iptables -t nat -A白名单-j拒绝 iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8088 -j白名单
一切工作正常,直到第4行,其中nat内的REJECT失败。 如果我将REJECT行注释掉,我可以确认其余的逻辑工作和端口变得开放,因为没有任何东西被拒绝。
下一步解决scheme尝试在正确设置单独链的同时,似乎正在解决原始问题。 PREROUTING规则更改端口的权利仍然似乎造成非NAT nat ACL尝试的问题。 ACL规则不起作用,端口是开放的。
iptables -N白名单 iptables -A白名单-s <whatsmyip.org> -j返回 iptables -A白名单-j拒绝 iptables -A INPUT -i eth0 -p tcp --dport 8088 -j白名单 iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8088 -j DNAT - 到10.0.0.A:80
解决scheme尝试#3我尝试设置白名单,然后在白名单解决后尝试端口redirect。 当规则加载时,它没有预期的效果,因为stream量没有从白名单IP到达它的预期目的地。 虽然我实际上不是100%确定实际上是什么行为。 我无法分辨iptables中的stream量是否被拒绝,或者连接是否被接受,并通过端口8088上的目的地而没有更改端口? 我不知道如何validation端口redirect是否实际完成。 这是这个尝试的规则:
iptables -N白名单 iptables -A白名单-s <whatsmyip.org> -j返回 iptables -A白名单-j拒绝 iptables -A INPUT -i eth0 -p tcp --dport 8088 -j白名单 iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8088 -j DNAT - 到10.0.0.A iptables -t nat -A OUTPUT -p tcp --dport 8088 -j REDIRECT - 对端口80
当前状态未解决。 不确定是否应该查看是否可以find另一种方式来redirect白名单后的端口,或者有一个简单的方法来确定当前的解决scheme失败的地方(通过8088转发没有80redirect,或者它只是简单地受阻?)
更改
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8088 -j DNAT --to 10.0.0.A:80
跳转到实现您的acls的用户定义的链。 例如,
iptables -t nat -N foo iptables -t nat -A foo --source 192.168.0.0/24 -j RETURN iptables -t nat -A foo -j REJECT iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8088 -j foo
编辑:
iptables -N foo iptables -A foo --source 192.168.0.0/24 -j RETURN iptables -A foo -j REJECT iptables -A INPUT -i eth0 -p tcp --dport 8088 -j foo
你devise你的包过滤,完全忽略你正在做的任何NAT。