我需要帮助从所有端口上的预先路由规则中排除单个IP地址。 任何连接到我的接入点的人都会被重定向到我的强制门户网站(Landing Page)。因此,我想制定新规则,我不希望修改/删除现有的预先路由规则。
我已经制作了预先路由规则,将传入端口(端口22(SSH)除外)路由到强制网络门户。因此我使用这条规则:
sudo iptables -t nat -A PREROUTING -p tcp --match multiport ! --dport 22 ! -s 192.168.42.19 -j DNAT --to-destination 192.168.42.1:8080
我想要的是对特定用户进行排除,因此我想阻止某些IP地址被转发。 我尝试了不同的东西,但我无法获得任何工作。 我尝试了不同的INPUT和OUTPUT规则,但没有运气。我想我应该做一些PREROUTING,但是怎么做?
答案 0 :(得分:1)
如果您只是想阻止某些流量达到特定规则,您可以在您尝试避免的规则之前为该流量设置RETURN或ACCEPT规则。
例如,您可以将当前规则更改为三个规则:
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 22 -j ACCEPT
iptables -t nat -A PREROUTING -s 192.168.42.19 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -j DNAT --to-destination 192.168.42.1:8080
注意ACCEPT和RETURN之间的区别(来自iptables(8)手册页):
ACCEPT means to let the packet through.
RETURN means stop traversing this chain and resume at
the next rule in the previous (calling) chain.
使用这种方法,您可以保留当前规则,并在其前面加上任意数量的规则,这些规则描述了您不希望达到NAT规则的不同类型的流量。
查看iptables计数器是判断您的流量是否达到预期规则的好方法(例如iptables -t nat -L PREROUTING -vn
)。