我在 Linux 路由器上使用 MAC 地址过滤。以下是我所做的:
iptables -A INPUT -i eth5 -m mac --mac-source 00:07:e9:84:2b:99 -j RETURN #User: Someuser
iptables -A INPUT -i eth5 -j DROP
但是 Iptables 规则列表非常庞大,有超过 400 条条目。最近我读到了使用 Ipset 和 Iptables 的优点这里。但我找不到任何关于使用 MAC 过滤进行相同操作的方法。那么如何使用 Ipset 进行 MAC 过滤以减少 Iptables 规则表的大小。
答案1
基本上是这样的,但是你必须将 IP 与 MAC 关联起来,纯 MAC 集似乎不存在:
# ipset --create test macipmap --network 10.0.0.0/16
# ipset --add test 10.0.0.1,00:11:22:33:44:55
# iptables -A INPUT -i eth5 -m set --match-set test src -j ACCEPT
在这里,您可以看到地图的内容和引用计数器,指示引用此集合的 iptables 规则:
# ipset -L test
Name: test
Type: macipmap
References: 1
Header: from: 10.0.0.0 to: 10.0.255.255
Members:
10.0.0.1,00:11:22:33:44:55
有一些事情需要考虑:
- 从技术上讲,这种类型的集合被限制为 64k 个连续地址(不确定它们是否必须“子网对齐”),找到了这里
- 你的内核必须支持 ipset,遗憾的是大多数常见的标准发行版内核都不支持
- 您也可以设置静态 ARP
- MAC 地址很容易被伪造