我需要在服务器和内联网上的客户端之间设置防火墙,通过 FORWARD 链上的 MAC 过滤访问。
服务器有一块网卡(在子网 10.0.0.0/29 上),防火墙有两块网卡(一个在子网 10.0.0.0/29 上,另一个在子网 192.100.100.0/23 上),客户端有一块网卡(在子网 192.100.100.0/23 上)
我的目标是能够只转发来自少数 MAC 的流量并丢弃其余的流量。
目前我已将 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 时,我可以看到规则上有流量,但我发送的 ping 没有得到回复。
有什么想法吗?提前致谢。
答案1
问题是,当您允许数据包从客户端发送到服务器时,从服务器返回客户端的数据包将被丢弃。netfilter 不会自动处理这些数据包,需要明确允许。
通常,在限制性防火墙中,您只允许某些数据包并丢弃其余数据包,您可以使用连接跟踪来接受已知连接的返回/相关数据包:
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
请注意,netfilter 中的匹配中没有--mac-destination
选项mac
- 很可能是因为 netfilter 不知道传出数据包的目标机器的 MAC 地址,因为它是在较低的网络层(第 2 层;netfilter 在第 3 层及更高层上运行)解析的。