Iptables,排除单个IP从预先授权的强制网络门户

时间:2016-01-11 17:15:22

标签: linux raspberry-pi debian iptables captiveportal

我需要帮助从所有端口上的预先路由规则中排除单个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,但是怎么做?

1 个答案:

答案 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)。