我需要帮助从所有端口的预路由规则中排除单个Ip地址。任何连接到我的访问点的人都会被重定向到我的Captive Portal(登录页)。因此,我想制定一个新规则,我不想修改/删除我现有的预发布规则。
我已经制定了预路由规则,将传入端口(除了端口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做点什么,但怎么做呢?
如果您只是试图阻止某些流量达到特定规则,您可以将该流量的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
)的好方法。