Linux 绑定 IP 与 MAC 地址防 ARP
在局域网环境下,ARP(地址解析协议)是把 IP 地址映射到 MAC 地址的基础协议,但它本身没有认证机制,任何主机都能声称自己是任意 IP。这种设计上的"信任",正是各种局域网攻击的温床。
ARP 欺骗是怎么发生的
先讲清楚攻击原理。局域网里,主机之间靠 ARP 把 IP 地址解析成 MAC 地址。正常情况下,网关会向网内广播应答:"192.168.1.1 的 MAC 是 aa:bb:cc:dd:ee:ff"。攻击者不守规矩,抢先回复一条伪造的应答:"192.168.1.1 的 MAC 是攻击者的 MAC"。交换机看到后,把本来发往网关的流量转发给攻击者,中间人攻击就这样成立了。
经典场景:一台共享办公室的服务器,网关地址被伪造后,所有进出流量都会经过攻击者,密码、会话 Cookie、明文协议内容都可能被截获。即便没有敏感数据,这种攻击也会造成类似断网式的链路抖动,排查起来非常费劲。
静态绑定:让 IP 与 MAC 一一对应
防护思路很简单:把关键 IP(网关、DNS、数据库服务器)与 MAC 的对应关系固定下来,ARP 表里这些条目是静态的(PERM),不再接受网络上广播的更新,伪造应答自然失效。
什么时候该做绑定
判断标准很简单:只要你和别人共享同一个二层网络(同一台交换机或同一网段),而且网络里存在不可信设备——比如办公网里的员工电脑、客户自带设备——就有绑定的必要。重点保护对象是网关、DNS、文件服务器和数据库。如果是云服务器,租户之间由虚拟化隔离,通常用不上,但混合机房、办公室自建服务器的场景非常实用。
需要说明的是,静态绑定只是"治标":它保护了本机到网关这一段,却防不住网关被其他主机伪装、或者 ARP 表被恶意清空后重新学习。更可靠的思路是让交换机开启 DHCP Snooping 和 DAI,从源头丢弃伪造的 ARP 报文。
1. 立即生效的绑定命令
arp -s 192.168.1.1 a1:d0:00:a3:30:08
这条命令把 IP 192.168.1.1 与 MAC a1:d0:00:a3:30:08 绑定,立即生效。注意绑定不影响正常通信,本机访问该 IP 时依然走原来的物理链路,只是不再接受网络上的伪造更新。部分发行版已用 ip neigh 取代 arp,两者效果等价。更现代的系统也支持 ip 命令:
ip neigh add 192.168.1.1 lladdr a1:d0:00:a3:30:08 nud permanent
2. 设置开机自动绑定
静态条目重启后就会丢失,需要写入开机脚本。以 CentOS/RHEL 为例,编辑 /etc/rc.local:
vi /etc/rc.local
加入以下内容:
arp -s 192.168.1.1 a1:d0:00:a3:30:08
保存退出后,确保 /etc/rc.local 具有可执行权限(部分系统默认没有):
chmod +x /etc/rc.local
如果使用 systemd 的系统,/etc/rc.local 由 rc-local.service 托管,还需要确认该服务已启用:
systemctl enable rc-local
除了 rc.local,也可以把绑定写进网卡配置,让网卡每次拉起时都重新执行。Debian/Ubuntu 在 /etc/network/interfaces 里加 post-up 钩子,CentOS 在 /etc/sysconfig/network-scripts/ifcfg-eth0 末尾追加一行命令,效果等价,且不受 rc-local.service 是否启动的影响,适合对启动顺序要求高的场景。
3. 验证绑定结果
arp -n
输出中对应条目会带有 PERM(permanent,永久)标记,表示这是静态绑定,不会被 ARP 协议的更新覆盖。用 ip 命令则可以看到 permanent 状态:
ip neigh show
4. 删除静态绑定
arp -d 192.168.1.1
对应 ip 命令为:
ip neigh del 192.168.1.1 dev eth0
注意事项
- 绑定前务必确认 IP 与 MAC 的对应关系正确,错误的绑定会导致该 IP 无法正常通信;
- 静态 ARP 条目重启后失效,需要写入
/etc/rc.local或网卡配置实现开机自动绑定; - 该方法主要对抗局域网内同网段的 ARP 欺骗,对跨网段攻击效果有限;
- 更彻底的防护可以配合交换机端口安全(Port Security)、DHCP Snooping、DAI(Dynamic ARP Inspection)等网络设备功能,在交换机层面拦截伪造 ARP 报文。
常见问题
- 绑了网关还是被断网? 检查绑定的是不是正确的网卡和真实 MAC,可以用
ip neigh对照;另有一种可能是交换机上还在做端口绑定,两层策略冲突导致丢包; - 服务器上需要全部绑定吗? 不需要,重点保护网关和核心服务即可,条目太多反而难维护;
- 云服务器需要吗? 云上默认由虚拟交换机隔离,通常不需要,但自建机房的物理服务器场景很实用;
- 网关换 MAC 了怎么办? 先
arp -d删除旧条目,再重新绑定新地址,否则会一直通信失败。
局域网安全是服务器运维中容易被忽视的一环,更多服务器安全加固内容可以参考安全加固分类下的服务器安全加固和服务器初始化安全设置。
原文链接:https://www.cnblogs.com/cqzhuomi/articles/17283225.html(博客园 CQZHUOMI,转载)
参考:ip-neighbour 手册 —— https://man7.org/linux/man-pages/man8/ip-neighbour.8.html