0

我需要帮助才能从所有端口的预路由规则中排除单个 IP 地址。任何连接到我的接入点的人都会被重定向到我的强制门户(登陆页面)。因此我想制定一个新规则,我不希望我现有的预路由规则被修改/删除。

我已经制定的预路由规则将传入端口(端口 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 做点什么,但是怎么做呢?

4

1 回答 1

2

如果您只是试图阻止某些流量达到特定规则,您可以在您试图避免的规则之前为该流量放置一个 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)。

于 2016-01-11T17:58:22.493 回答