iptables – 在FORWARD链上按MAC过滤

我需要在服务器和Intranet上的客户端之间build立一个防火墙,以通过FORWARD链上的MAC来过滤访问。

服务器有一个网卡(在子网10.0.0.0/29上),防火墙有两个网卡(一个在子网10.0.0.0/29上,另一个在子网192.100.100.0/23上),客户端有一个网卡(在子网上192.100.100.0/23)

我的目标是能够仅转发来自less数MAC的stream量,然后放弃剩下的stream量。

现在我的iptables设置如下:

iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP iptables -A FORWARD -m mac --mac-source 00:00:00:00:00:00 -j ACCEPT 

当我检查iptables,我可以看到有规则的stream量,但我发送的ping是没有答复。

有任何想法吗? 提前致谢。

问题是,当你允许从客户端到服务器的数据包时,从服务器返回到客户端的数据包将被丢弃。 它们不是由netfilter自动处理的,需要被明确地允许。

通常情况下,在一个限制性的防火墙,你只允许某些数据包,其余的你可以使用连接跟踪来接受已知连接的返回/相关数据包:

 iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT 

请注意,netfilter的mac匹配中没有--mac-destination选项 – 很可能是因为netfilter不知道传出数据包的目标机器的MAC地址,因为它在较低的networking层(第2层; netfilter运行在层3和更高)。