我的openwrt没有MAC过滤功能,要是找了半天发现可以通过iptables来解决。
白名单策略:
首先允许白名单用户连接路由器:
iptables -I INPUT -m mac --mac-source xx:xx:xx:xx:xx:xx -j ACCEPT
iptables -I INPUT 2 -m mac --mac-source ! xx:xx:xx:xx:xx:xx -j DROP
然后非白名单用户禁止上网:
还是先允许白名单用户:
iptables -I FORWARD -m mac --mac-source xx:xx:xx:xx:xx:xx -j ACCEPT
iptables -I FORWARD 2 -m mac --mac-source ! xx:xx:xx:xx:xx:xx -j DROP
好了现在非白名单用户就上不了网了,如果要添加白名单就这样:
iptables -I INPUT -m mac --mac-source xx:xx:xx:xx:xx:xx -j ACCEPT
iptables -I FORWARD -m mac --mac-source xx:xx:xx:xx:xx:xx -j ACCEPT
使用黑名单:
黑名单的使用就方便了很多直接添加以下规则:
iptables -I INPUT -m mac --mac-source xx:xx:xx:xx:xx:xx -j DROP
iptables -I FORWARD -m mac --mac-source xx:xx:xx:xx:xx:xx -j DROP
不过使用黑名单的话安全性不如白名单,还是推荐大家使用白名单。
ps:如果不保存规则的话添加的MAC过滤会在重启后失效,推荐大家把规则写入到/etc/firewall.user中
如果MAC过多可以使用脚本解决:
for mac in $(cat mac); do
iptables -I FORWARD -m mac --mac-source ! xx:xx:xx:xx:xx:xx -j DROP
iptables -I INPUT -m mac --mac-source ! xx:xx:xx:xx:xx:xx -j DROP
iptables -I FORWARD -m mac --mac-source $mac -j ACCEPT
iptables -I INPUT -m mac --mac-source $mac -j ACCEPT
done
这个脚本开机的时候执行一次就可以了,如果要临时添加的话最后手动添加,不然会导致iptables中规则重复。
ps:删除iptables规则,首先我们执行
iptables -L --line-number
iptables -D INPUT 1