我在 2001 端口上有一个应用程序,我希望允许一些具有 mac 地址的用户连接到此端口。所以我使用这个命令:
sudo iptables -A INPUT -p tcp --destination-port 2001 -j DROP
sudo iptables -A INPUT -p tcp --destination-port 2001 -m mac --mac-source [My PC mac] -j ACCEPT
service iptables save
它对每个人都有效,但对我不起作用(mac 地址不允许)有什么问题?
答案1
iptable
规则基于“第一场比赛”。所以你的第一条规则会放弃一切,而第二条规则永远不会达到。
如果您更改顺序(首先“接受”,然后“删除”),它将按照您的预期进行。
答案2
您的 IPtables 规则发生冲突。 IPtables 以首次匹配为基础进行工作。使用该-A
选项会将规则放在列表末尾,以便您的ACCEPT
规则位于末尾。
因此,如果您按照描述与该描述(端口 2001 处的 tcp 连接)的数据包的顺序输入规则,它将被丢弃,并且不会关注以下任何规则。当然,如果这些也是您唯一的规则的话!
我明白那个这个链接很旧了,但是它提供了有关 IPtables 规则优先级如何工作的出色信息。
所以你会想要清除这条规则。首先您需要识别规则,然后将其删除。
sudo iptables -L --line-numbers
sudo iptables -D INPUT [The Number of the Drop Rule]
接下来,您可以像使用该选项之前一样重新添加规则-A
。现在您的 IPtable 应该按预期工作。