iptables无法防御ARP欺骗,因其工作在网络层而ARP运行在数据链路层,ARP帧无IP头部、不经过netfilter框架;应使用arptables、静态ARP绑定或ebtables等二层工具协同防护。

iptables 本身不能直接防御 ARP 欺骗,因为它工作在网络层(IP 层),而 ARP 协议运行在数据链路层(MAC 层)。ARP 欺骗不涉及 IP 包内容篡改,而是伪造 ARP 应答包来污染目标主机的 ARP 缓存,iptables 对这类二层报文完全不可见。
为什么 iptables 无法拦截 ARP 欺骗
ARP 请求/应答帧封装在以太网帧中,无 IP 头部,不经过 iptables 的 INPUT/FORWARD/OUTPUT 链。Linux 内核处理 ARP 流程独立于 netfilter 框架,因此:
- iptables -A INPUT -p arp ... 会报错或静默忽略
- 所有基于 -p tcp/-p udp 的规则对 ARP 流量无效
- 试图用 iptables DROP 伪造网关 MAC 的流量,实际根本匹配不到
真正有效的 ARP 防御方案
需使用专用于数据链路层的工具,配合网络层策略协同防御:
-
arptables:内核级 ARP 过滤工具,可丢弃来源 IP/MAC 不匹配的 ARP 包
示例:阻止非网关设备冒充路由器(假设网关 IP 192.168.1.1,MAC 00:11:22:33:44:55)
sudo arptables -A INPUT --source-ip 192.168.1.1 ! --source-mac 00:11:22:33:44:55 -j DROP -
静态 ARP 绑定:绕过动态学习机制,使攻击者无法覆盖
sudo arp -s 192.168.1.1 00:11:22:33:44:55(Linux)
arp -s 192.168.1.1 00-11-22-33-44-55(Windows) -
ebtables:支持日志记录的以太网桥过滤器,适合监控异常 ARP 源
可配合网桥(如 br0)捕获并记录非法 ARP 帧,便于溯源
iptables 在 MITM 防御中的辅助作用
虽然不能防 ARP 投毒本身,但可在攻击已发生时限制危害范围:
- 禁用 IP 转发,阻断攻击者中继流量:
echo 0 > /proc/sys/net/ipv4/ip_forward - 封禁可疑端口重定向行为(如 ssh-mitm 常用的 2222 端口):
iptables -A INPUT -p tcp --dport 2222 -j DROP - 限制非预期的 NAT 规则残留:
iptables -t nat -F PREROUTING(清空可能被植入的 REDIRECT 规则)
综合建议
单一工具无法解决 ARP 安全问题。推荐分层实施:
- 终端主机:配置静态 ARP + 启用 arptables 黑名单规则
- 网络出口(如路由器/防火墙):启用 DHCP-Snooping + DAI(动态 ARP 检测)
- 关键服务器:绑定固定 IP+MAC,并关闭 gratuitous ARP 响应
- 定期检查:用 arp -a 或 ip neigh show 核对缓存一致性

















