IPtables 中的 Mac 地址过滤器

IPtables 中的 Mac 地址过滤器

我在 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 应该按预期工作。

相关内容