iptables仅在直连局域网中支持mac过滤,因mac属二层且经路由后被替换;需用-m mac模块配合input链,结合ipset或交换机端口安全等方案增强可靠性。

只对直连局域网生效:用 iptables + mac 模块限制 MAC
前提:确保内核已加载 xt_mac 模块(现代 Linux 通常默认支持):
lsmod | grep xt_mac —— 若无输出,可手动加载:sudo modprobe xt_mac
常用操作:
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
- 拒绝特定 MAC 地址访问本机所有服务:
sudo iptables -A INPUT -m mac --mac-source 00:11:22:33:44:55 -j DROP - 只允许白名单 MAC 访问 SSH(22端口):
sudo iptables -A INPUT -p tcp --dport 22 ! -m mac --mac-source 00:11:22:33:44:55 -j DROP
(注意:该规则需放在允许 SSH 的 ACCEPT 规则之后,否则会被提前拦截) - 清空相关规则:
sudo iptables -D INPUT -m mac --mac-source 00:11:22:33:44:55 -j DROP
更可靠的做法:结合 ipset 实现 IP+MAC 关联(仍限局域网)
单纯靠 MAC 不够健壮(易伪造、不可跨网段),建议配合 IP 白名单增强可信度:
- 先创建 IP 白名单集合:
sudo ipset create trusted_ips hash:ipsudo ipset add trusted_ips 192.168.1.100 - 再添加带 MAC 校验的规则:
sudo iptables -A INPUT -m mac --mac-source 00:11:22:33:44:55 -m set --match-set trusted_ips src -j ACCEPTsudo iptables -A INPUT -j DROP - 这样只有「既在白名单 IP 中、又携带指定 MAC」的请求才放行
真正有效的替代方案(推荐)
若目标是“拒绝所有未知设备接入”,应从网络架构层面解决,而非依赖 iptables:
- 交换机端口安全:在接入交换机上配置 port-security,绑定 MAC+IP+端口,违规自动 shutdown 端口
- 802.1X 认证:部署 RADIUS 服务器,强制终端认证后才获得网络权限
- DHCP + ARP 检查 + 动态 ACL:通过 DHCP 分配 IP 后,用脚本监听 ARP 表,结合 iptables/ipset 动态更新授权设备列表
- 云环境 / 虚拟化平台:利用安全组、端口组策略或 vSwitch ACL 直接限制 MAC
重要提醒
❌ 不要对公网或经由路由器/NAT 的流量使用 MAC 过滤 —— 此时看到的是网关 MAC,不是用户真实 MAC。
✅ 只有在物理直连、桥接模式、或 KVM/QEMU 虚拟机直通网卡等二层可达场景下,MAC 匹配才有意义。
⚠️ 执行前务必保留 SSH 会话备用通道,避免锁死自己。










