在Linux系统中,直接执行sudo arp -s命令即可临时绑定IP地址与MAC地址,这种操作虽然简单,但仅限于当前会话有效。一旦机器重启,绑定关系便会自动消失。要真正抵御ARP欺骗攻击,需要让静态ARP绑定在重启后依然生效,同时结合内核级别的防护与验证机制,才能彻底封堵安全漏洞。

使用 arp -s 添加静态ARP条目
这是最基础的配置步骤,命令格式固定为:sudo arp -s 。例如,若要将网关192.168.1.1与其真实MAC地址00:1a:2b:3c:4d:5e进行锁定,可执行如下命令:
sudo arp -s 192.168.1.1 00:1a:2b:3c:4d:5e
命令执行后立即生效,但有几个关键要点需要留意:
- 通过
arp -s添加的条目,在arp -n输出结果中会带有PERM标记,这代表该条目为永久静态绑定,而非普通的C(缓存)或INCOMPLETE状态。 - 该命令本身并不校验所输入MAC地址的真实性。如果地址填写错误,系统也会照常绑定,从而导致后续网络通信中断。
- 系统重启,或者网络服务重载(例如执行
systemctl restart networking),这些静态条目均会被清空。 - 默认情况下,该命令作用于系统的第一个可用网络接口。若设备有多个网卡,建议使用更可控的
ip neigh add命令,并显式指定设备名称。
让静态ARP绑定实现开机自动加载
手动执行命令无法实现持久化,必须让绑定在系统启动时自动生效。这里推荐两种主流方法:
方法一:创建/etc/ethers文件 + 使用arp -f加载
新建一个/etc/ethers文件,每行写入一对映射关系,示例如下:
192.168.1.1 00:1a:2b:3c:4d:5e
然后运行sudo arp -f即可加载文件中的所有绑定。需要注意的是,arp -f不指定设备,它会尝试在所有网络接口上加载绑定。如果同一个IP地址在多个子网中存在,可能会绑定到错误的网卡上。
方法二:使用systemd服务启动脚本(更稳定可靠)
此方法更为稳妥。首先创建一个脚本文件,例如/usr/local/bin/configure-static-arp.sh,在脚本中使用arp -s或更推荐的ip neigh add命令,并明确指定dev参数。接着配置一个对应的static-arp.service服务单元,确保它在network-online.target之后启动。这样可以完美避免在网络尚未就绪时执行绑定命令而导致失败的问题。
验证绑定是否真正生效且能抵御干扰
不要仅仅看到arp -n显示PERM就认为万事大吉。在实际攻击场景下,必须确认以下三件事:
- 执行
ip neigh show,检查对应条目是否包含PERMANENT字样,同时确保dev字段显示的网卡(例如eth0)与预期完全一致。 - 主动触发一次ARP请求:运行
arping -c 2 -I eth0 192.168.1.1,观察返回的MAC地址是否与绑定的地址一致。如果返回了其他MAC地址,说明绑定可能被绕过或未生效。 - 条件允许时,可进行一次模拟欺骗测试:使用另一台机器发送伪造的ARP响应(例如借助
arpspoof工具),然后再次查看arp -n | grep 192.168.1.1——在绑定和防护均生效的情况下,显示的MAC地址应保持不动。
必须同步开启的内核级防护
仅靠静态绑定只能算“堵”住一个漏洞。如果不开启内核防护,攻击者仍可能通过其他途径污染ARP邻居表。以下几个内核参数几乎是必选项:
rp_filter(反向路径过滤):防止IP源地址伪造的数据包进入系统。设置命令:echo 1 | sudo tee /proc/sys/net/ipv4/conf/all/rp_filterarp_ignore:控制本机对ARP请求的响应行为。设置为2表示“仅响应目标IP是本机地址的ARP请求”。设置命令:echo 2 | sudo tee /proc/sys/net/ipv4/conf/all/arp_ignorearp_announce:限制ARP通告时使用的源IP地址,避免在多网卡环境下从错误的接口应答。设置命令:echo 2 | sudo tee /proc/sys/net/ipv4/conf/all/arp_announce
重点提示:这些设置必须写入/etc/sysctl.conf配置文件,然后执行sudo sysctl -p使其持久化生效,否则重启后会丢失。如果只进行了arp -s绑定,却忽略了上述三项内核防护,就如同锁好了大门却敞开着窗户,攻击者依然可以轻易侵入。
