Arptables通过白名单机制只允许真实网关的ARP通信:INPUT链先限源MAC、再限源IP,OUTPUT链放行广播请求,并需持久化规则至系统配置文件。

明确过滤目标:只认网关,拒接异常
Arptables 的核心逻辑是“白名单思维”——不靠黑名单堵漏洞,而是只放行已知合法的 ARP 通信。局域网内非法 ARP 响应(如伪造网关 MAC、冒用他人 IP)本质是源 IP 和源 MAC 不匹配,或来源非可信设备。硬性过滤的关键是:只接受来自真实网关的 ARP 包,其他一概 DROP。
配置基础规则:INPUT 链精准拦截
在 INPUT 链(处理发给本机的 ARP 包)上设置两条强制规则:
-
限制源 MAC:只允许来自网关物理地址的 ARP 请求/应答,其余丢弃
sudo arptables -A INPUT --src-mac ! <font color="red">xx:xx:xx:xx:xx:xx</font> -j DROP
(将 xx:xx:xx:xx:xx:xx 替换为你的网关真实 MAC,可用ip route | awk '/default/ {print $3}' | xargs arp -n | awk '{print $3}'快速获取) -
限制源 IP:只接受来自网关 IP 的 ARP 包,防止其他主机伪造网关 IP 冒充响应
sudo arptables -A INPUT -s ! <font color="red">192.168.1.1</font> -j DROP
(192.168.1.1 换成你实际的网关 IP)
这两条规则顺序不能颠倒,且必须放在所有其他规则之前生效。执行后立即生效,无需重启网络服务。
保留必要广播通路:OUTPUT 链允许合法发出
本机仍需正常发送 ARP 请求(比如找网关、查邻居),所以 OUTPUT 链不能全锁死。只需保障关键广播出口畅通:
- 允许向全网广播地址(ff:ff:ff:ff:ff:ff)发送 ARP 请求,这是发现网关和主机的必需行为
sudo arptables -A OUTPUT --destination-mac ff:ff:ff:ff:ff:ff -j ACCEPT - 可选增强:限制本机只向网关 IP 发送 ARP 应答(若启用 proxy_arp 等特殊场景),但普通终端通常无需额外 OUTPUT 规则
持久化与验证:开机即生效,不靠临时记忆
重启后规则丢失是常见疏漏。务必固化配置:
- 保存当前规则到系统文件:
sudo arptables-save > /etc/sysconfig/arptables(CentOS/RHEL)或sudo arptables-save > /etc/arptables.rules(Debian/Ubuntu) - 创建 systemd 服务或 init 脚本,在网络启动后自动加载:
编写/etc/systemd/system/arptables-load.service,内容包含ExecStart=/usr/sbin/arptables-restore - 验证是否生效:
sudo arptables -L -n查看规则列表;再用tcpdump -i eth0 arp抓包,确认仅看到来自网关的 ARP 流量,无其他设备的 ARP 应答


















