基于MAC地址的白名单,使用iptables过滤MAC地址的问题 2022-1-19

有一个需求,在OpenVPN组网的时候,考虑MAC地址的白名单,根据OSI网络模型,应用层的代理,肯定看不到客户端设备的MAC地址,自然谈不上过滤。

不过OpenVPN应该是可以的,它是数据链路二层的。

参考了网络上的教程,基本上,可以基于iptables过滤网络内的一部分流量。为了方便大家理解,我这里贴一个iptables的工作逻辑原理图

理论上,必须经过我们的网卡的,才可以进行过滤

通常,在

  1. PREROUTING
  2. FORWARD
  3. INPUT

整理的资料信息:

例子01,限制INPUT,来源MAC地址 00:0F:EA:91:04:08,丢弃
/sbin/iptables -A INPUT -m mac --mac-source 00:0F:EA:91:04:08 -j DROP


例子02,限制INPUT,目的端口22,来源MAC地址 00:0F:EA:91:04:07,允许
/sbin/iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source 00:0F:EA:91:04:07 -j ACCEPT

例子03,限制INPUT,网卡为eth1,目的端口22,来源MAC地址为 00:0F:EA:91:04:07,允许
/sbin/iptables -A INPUT -i eth1 -p tcp --destination-port 22 -m mac --mac-source 00:0F:EA:91:04:07 -j ACCEPT

在FORWARD或者PREROUTING里面也同样的道理
/sbin/iptables -A FORWARD -i ethX -m mac --mac-source YOUR-MAC-ADDRESS-HERE -j ACCEPT

/sbin/iptables -A FORWARD -m state --state NEW -m mac --mac-source YOUR-MAC-ADDRESS-HERE -j ACCEPT


/sbin/iptables -A INPUT -p tcp --dport 22 -m mac ! --mac-source MAC-ADDRESS-HERE-TO-SKIP -j DROP
### Drop ssh access to all except our own MAC Address ###
/sbin/iptables -A INPUT -p tcp --dport 22 -m mac ! --mac-source YOUR-MAC-ADDRESS-HERE -j DROP
### Save rules ###
/sbin/service iptables save


可以使用IP/MAC同时匹配
iptables -A INPUT -p tcp -s 192.168.1.200 -m mac --mac-source 00:0F:EA:91:04:08 -j DROP

限制登录的白名单MAC地址
/sbin/iptables -A INPUT -p tcp --dport 22 -m mac ! --mac-source YOUR-MAC-ADDRESS-HERE -j DROP
/sbin/iptables -A INPUT -p tcp --dport 22 -m mac ! --mac-source YOUR-MAC-ADDRESS-HERE -j DROP

在转发链的限制
iptables -A FORWARD -i eth0 -o eth1 -m mac --mac-source 00:0F:EA:91:04:07 -j ACCEPT


允许
iptables -I INPUT -p tcp --dport 22 -m mac --mac-source 3E:D7:88:A6:66:8E -j ACCEPT


拒绝
iptables -I INPUT -p tcp --dport 22 -m mac --mac-source 3E:D7:88:A6:66:8E -j REJECT



拒绝所有的,放行3E:D7:88:A6:66:8E
iptables -I INPUT -p tcp --port 22 -m mac ! --mac-source 3E:D7:88:A6:66:8E -j REJECT



一般的OpenVPN的规则
iptables -I FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -I FORWARD -s 10.8.0.0/24 -j ACCEPT
iptables -I INPUT -p udp --dport 1194 -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j SNAT --to 104.237.156.154

REJECT动作会返回一个拒绝(终止)数据包(TCP FIN或UDP-ICMP-PORT-UNREACHABLE),明确的拒绝对方的连接动作,连接马上断开

DROP动作只是简单的直接丢弃数据,并不反馈任何回应。需要Client等待超时

参考 https://www.cyberciti.biz/tips/iptables-mac-address-filtering.html

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注