无名阁

美好的生活需要用心记录

通过iptables进行MAC过滤

2015-6-27 笑看风云 linux知识

我的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
上面的MAC地址可以随便填,起含义为除了非MAC地址位xx:xx:xx;xx:xx:xx的流量一律丢弃,这样除了之前的白名单其他用户一律连接不了路由器.


然后非白名单用户禁止上网:

还是先允许白名单用户:

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
把上面的MAC地址改成要添加的用户的MAC地址。



使用黑名单:

黑名单的使用就方便了很多直接添加以下规则:

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
把上面的MAC地址改一下就可以了。


不过使用黑名单的话安全性不如白名单,还是推荐大家使用白名单。

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
就可以删除规则了,上面命令中的1就是规则的序号,替换成你要删除的规则的序号就行了。



标签: 网络 Linux iptables

et_highlighter51

评论:

Ken
2022-09-12 17:34
大佬您好!
请问想添加20个MAC地址白名单怎么操作?每个MAC地址添加两条规则,一个一个MAC地址添加吗?
Ken
2022-09-12 17:40
@Ken:逐个MAC地址如下这样添加两条来允许访问吗?

MAC地址用户A:
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

MAC地址用户B:
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

MAC地址用户C:
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


笑看风云
2022-09-15 14:01
@Ken:添加多个白名单只需要多次执行
iptables -I INPUT -m mac --mac-source xx:xx:xx:xx:xx:xx  -j ACCEPT
然后最后添加一个
iptables -A INPUT -m mac --mac-source ! xx:xx:xx:xx:xx:xx  -j DROP
就行了
ww
2020-06-02 03:13
亲,这个mac地址是针对源mac,那么有没有目的mac的操作
ww
2020-07-05 04:35
@ww:对的,用这个--mac-source标记下载(也就是目的MAC)的包是无效的。

发表评论: