iptables无法拦截ARP包,因其工作在OSI第三层,而ARP属于第二层协议,由内核邻居子系统独立处理,不经过netfilter钩子点。

iptables 本身不能直接拦截 ARP 数据包,因为 ARP 工作在 OSI 第二层(数据链路层),而 iptables 只处理第三层(网络层)及以上的 IP 包。所以用 iptables 阻断 ARP 欺骗或混杂模式嗅探,本质上是行不通的——它看不见、也管不了 ARP 请求/响应帧。
为什么 iptables 对 ARP 欺骗无效
ARP 协议不基于 IP,没有源/目的 IP 地址,也不走 netfilter 钩子点(如 INPUT、FORWARD)。Linux 内核将 ARP 处理逻辑放在邻居子系统(neighbour subsystem)中,绕过 iptables 流程。即使你用 arptables(专用于 ARP 的工具),它也早已被弃用且不被现代内核默认支持。
真正有效的 ARP 欺骗防御措施
防御必须落在 ARP 协议自身机制和网络基础设施上:
- 在网关/路由器侧启用 DAI(Dynamic ARP Inspection):仅 Cisco、华为等企业级交换机支持,可验证 ARP 包的 IP-MAC 绑定是否合法(需配合 DHCP Snooping)。
-
配置静态 ARP 表项:在关键主机上手动绑定网关 IP 与真实 MAC,例如:
arp -s 192.168.1.1 00:11:22:33:44:55(Linux)或netsh interface ipv4 add neighbors "以太网" 192.168.1.1 00-11-22-33-44-55(Windows)。 -
部署 ARP 监控工具:如
arpwatch,实时记录 ARP 表变更,发现异常 MAC 冲突或频繁更新即告警。 - 划分 VLAN 并限制广播域:缩小攻击面,让欺骗无法跨网段传播;关闭闲置端口,禁用未授权设备接入。
如何识别并遏制混杂模式嗅探
混杂模式本身是网卡正常功能,无法靠防火墙“阻断”,但可通过行为特征检测和系统加固来抑制其滥用:
-
检查可疑进程与网卡状态:运行
ip link show | grep PROMISC查看是否有非预期接口处于混杂模式;结合lsof -i或ss -tulpn找出监听全网段流量的进程(如tcpdump、wireshark、driftnet)。 -
限制普通用户抓包权限:将抓包能力交给特定组(如
pcap),再通过setcap cap_net_raw+ep /usr/bin/tcpdump授权,避免全员 root 权限运行嗅探工具。 - 禁用不必要的网络服务与协议栈功能:关闭 IPv6(若不用)、禁用 LLDP/CDP、停用 rsh/rexec/telnet 等明文协议,减少可被嗅探的敏感载荷。
- 启用端口安全(Port Security):在接入交换机上设置 MAC 地址学习数量上限(如 1),防止攻击者泛洪 MAC 表后迫使交换机退化为集线器式广播。
iptables 能做的辅助性加固
虽然不能拦 ARP,但 iptables 可配合其他手段提升整体抗嗅探能力:
-
限制可疑 ICMP 类型:如禁止类型为 8(ping)以外的 ICMP 请求,减少网络测绘暴露面:
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPTiptables -A INPUT -p icmp -j DROP -
封禁已知攻击工具通信端口:例如 Ettercap 默认监听 TCP 60000,SSLStrip 常用 10000,可临时封堵:
iptables -A INPUT -p tcp --dport 60000 -j DROP -
只允许可信源访问管理端口:如 SSH 仅放行运维网段:
iptables -I INPUT -p tcp --dport 22 -s 10.10.0.0/16 -j ACCEPTiptables -A INPUT -p tcp --dport 22 -j DROP

















