ARP 攻击防御措施:IP-MAC 绑定、DAI 与端口隔离怎么配
机房级的 ARP 攻击防御要做在交换机上,而不是指望每台服务器装 ARP 防火墙:用 DAI 或静态绑定校验每一个 ARP 报文,用端口隔离或客户 VLAN 让欺骗报文根本到不了别人,在网关上把关键 ARP 表项固定。服务器侧绑定网关 MAC 只是最后一道补充。
ARP 攻击防御措施在机房里要按“交换机为主、网关为辅、服务器补充”来做:交换机上启用 DHCP Snooping 与 DAI(动态 ARP 检测)或静态 IP-MAC-端口绑定,让伪造的 ARP 报文在接入口就被丢弃;同一 VLAN 内的客户之间做端口隔离,或者干脆每个客户一个 VLAN;网关上固定关键服务器的 ARP 表项并防止网关地址被冒用;服务器上再把网关 MAC 绑死。下面先看攻击在机房里长什么样,再逐项给配置。
ARP 攻击在机房里长什么样
ARP 协议没有认证,谁都可以在二层广播“某个 IP 对应我的 MAC”。在 IDC 环境里,攻击者通常是同一 VLAN 里一台被入侵的客户机,典型后果有两种:
- 冒充网关:向全 VLAN 广播“网关 IP 对应我的 MAC”,其他客户的出向流量被劫持到攻击机,表现为大面积掉线、延迟飙升、HTTPS 证书告警;
- 冒充某台服务器(IP 盗用):宣告别人的公网 IP 对应自己的 MAC,抢占 IP 或制造冲突。
排查时看两处:服务器上 ip neigh show 看到的网关 MAC 与交换机上联口后面的网关 MAC 是否一致;交换机 MAC 表里网关 MAC 是否出现在了某个接入口上。
# 服务器侧:网关 MAC 是否被改写
ip neigh show 103.45.12.1
# 华为:这个 MAC 是从哪个端口学到的
display mac-address 0011-2233-4455
# 思科
show mac address-table address 0011.2233.4455
防御措施一览
| 措施 | 部署位置 | 防住什么 | 前提与代价 |
|---|---|---|---|
| DHCP Snooping + DAI | 接入交换机 | 与绑定表不符的 ARP 报文 | 静态 IP 需要手工加绑定;绑定不全会误断 |
| 静态 IP-MAC-端口绑定 + IP Source Guard | 接入交换机 | ARP 欺骗与源 IP 伪造 | 换网卡、换端口都要改配置,靠台账维护 |
| 端口隔离 / 每客户 VLAN | 接入交换机 | 欺骗报文根本到不了同段其他客户 | 同段客户互访要经网关转发 |
| 网关侧防护 | 三层交换机或路由器 | 网关 IP 被冒用、网关 ARP 表被刷 | 需要设备支持相应特性 |
| 服务器侧绑定网关 MAC | 每台服务器 | 本机被劫持出向流量 | 只保护自己,网关换设备后要改 |
措施一:DHCP Snooping 与 DAI
DHCP Snooping 通过监听 DHCP 交互建立“IP-MAC-端口-VLAN”绑定表,DAI 用这张表校验每一个 ARP 报文,对不上就丢弃。上联口要设为信任端口,否则网关的 ARP 应答也会被拦。IP Source Guard 则用同一张表校验 IP 报文的源地址,把源地址伪造也一起挡掉。
思科 IOS 的配置:
ip dhcp snooping
ip dhcp snooping vlan 100
ip arp inspection vlan 100
! 同时校验 ARP 报文里的源 MAC、目的 MAC 和 IP 合法性
ip arp inspection validate src-mac dst-mac ip
!
interface GigabitEthernet1/0/48
description uplink
ip dhcp snooping trust
ip arp inspection trust
!
interface GigabitEthernet1/0/1
switchport access vlan 100
! 每秒超过 15 个 ARP 报文即认为异常,端口进入 err-disabled
ip arp inspection limit rate 15
ip verify source
华为 S 系列的配置:
dhcp enable
dhcp snooping enable
#
vlan 100
dhcp snooping enable
arp anti-attack check user-bind enable
#
interface GigabitEthernet0/0/48
description uplink
dhcp snooping trusted
#
interface GigabitEthernet0/0/1
port link-type access
port default vlan 100
arp anti-attack check user-bind enable
ip source check user-bind enable
arp anti-attack rate-limit enable
arp anti-attack rate-limit packet 10
验证命令:思科 show ip dhcp snooping binding、show ip arp inspection statistics;华为 display dhcp snooping user-bind all、display arp anti-attack statistics check user-bind interface GigabitEthernet0/0/1。统计里的丢包数持续增长,就说明有端口在发伪造报文。命令细节以设备型号和软件版本的官方文档为准。
措施二:静态 IP-MAC-端口绑定
机房里的公网 IP 绝大多数是静态配置,Snooping 学不到,必须手工写入绑定表,DAI 和 IP Source Guard 才有依据。
! 思科:把静态 IP 的服务器加入绑定表
ip source binding 0011.2233.4455 vlan 100 103.45.12.10 interface GigabitEthernet1/0/1
# 华为:系统视图下添加静态绑定
user-bind static ip-address 103.45.12.10 mac-address 0011-2233-4455 interface GigabitEthernet0/0/1 vlan 100
如果只想限制端口后面的 MAC 而不校验 IP,可以用端口安全或静态 MAC 表项:
! 思科:端口只允许一个指定 MAC
interface GigabitEthernet1/0/1
switchport mode access
switchport port-security
switchport port-security maximum 1
switchport port-security mac-address 0011.2233.4455
switchport port-security violation restrict
# 华为:静态 MAC 表项
mac-address static 0011-2233-4455 GigabitEthernet0/0/1 vlan 100
静态绑定的难点不在命令,而在维护:客户换网卡、服务器迁移端口、IP 回收再分配,每一次都要同步改交换机,漏改一次就是一个断网工单。这也是后面要讲台账的原因。
措施三:端口隔离与客户 VLAN
绑定是“校验”,隔离是“不让它到达”。两种做法:
- 每客户一个 VLAN:广播域彻底分开,ARP 欺骗只能在自己的 VLAN 里发生,影响不到别人。代价是每个 VLAN 要单独规划网关和地址段,一个 /29 分给一个客户时地址利用率不高;
- 端口隔离:多个客户共用一个公网 /24 时,把接入口加入同一个隔离组,接入口之间二层不通,只能与上联口通信。华为默认的隔离模式(
port-isolate mode l2)是二层隔离、三层可互通,同段客户互访只能经网关转发。
# 华为:接入口加入隔离组 1
interface GigabitEthernet0/0/1
port-isolate enable group 1
! 思科:受保护端口,同一交换机上的受保护端口之间不转发
interface GigabitEthernet1/0/1
switchport protected
思科的受保护端口只在单台交换机内生效,跨交换机隔离要用私有 VLAN(PVLAN);华为侧对应的还有 MUX VLAN 和 Super VLAN,用来在共享一个网关的同时隔离客户。
隔离之后,同段客户之间连 ARP 请求都收不到,默认互相不通。如果确实需要同段互访,要在网关的 VLAN 接口上开启 VLAN 内代理 ARP(华为 VLANIF 下 arp-proxy inner-sub-vlan-proxy enable,思科 SVI 下 ip local-proxy-arp),由网关代答 ARP 后再做三层转发。托管场景下客户之间本来就不该互访,一般不用开。
措施四:网关侧防护
网关是被冒充的头号目标,三层交换机上做三件事:
# 华为,系统视图
# 发现有人宣告网关 IP 时告警并丢弃
arp anti-attack gateway-duplicate enable
# 已学到的 ARP 表项 MAC 不被后续报文改写
arp anti-attack entry-check fixed-mac enable
# 定期发送免费 ARP,刷新下游对网关 MAC 的记忆
arp gratuitous-arp-sending enable
# 关键服务器写成静态 ARP
arp static 103.45.12.10 0011-2233-4455 vid 100 interface GigabitEthernet0/0/1
! 思科:静态 ARP
arp 103.45.12.10 0011.2233.4455 arpa
网关侧的静态 ARP 与接入交换机的静态绑定是一套数据的两个方向:前者保证网关找服务器不会被骗,后者保证服务器找网关不会被骗。
措施五:服务器侧绑定网关 MAC
这一步只能保护本机,但在客户机上做起来成本很低,适合写进交付文档:
# Linux:把网关 ARP 表项设为永久
ip neigh replace 103.45.12.1 lladdr 00:aa:bb:cc:dd:ee dev eth0 nud permanent
# 开机自动执行时写进网络脚本或 systemd 单元
:: Windows:管理员权限
netsh interface ipv4 add neighbors "Ethernet" 103.45.12.1 00-aa-bb-cc-dd-ee
网关设备更换或做了主备切换、MAC 变化时,这条绑定会让服务器断网,所以机房侧一定要把网关 MAC 的变更纳入变更通知。
在 IPAM 里维护绑定台账怎么落地
前面四类措施的共同前提是:每个 IP 对应哪个 MAC、接在哪台交换机的哪个端口、属于哪个 VLAN,必须有一份准确的台账,并且交换机上的绑定要随台账变化而变化。用 Excel 维护,几个月后就会和现网对不上。落地的做法:
- 在 IPAM 里以 IP 为主键记录归属服务器、客户、MAC、交换机与端口、VLAN、绑定状态,IP 段本身记录所在 VLAN 和网关设备;
- 把绑定动作挂在 IP 的生命周期上:分配给服务器时下发绑定,回收时删除绑定,换网卡时更新绑定,不允许绕过系统手工改交换机;
- 定期把交换机上的绑定表(
display dhcp snooping user-bind all、show ip source binding)导出与台账比对,差异条目逐一处理; - 新客户上线的检查单里加一条“绑定已下发并验证”,用
ip neigh和交换机统计确认。
Toplink DCIM 的 IP 地址管理按段登记地址,每个段记录所在 VLAN 和网关挂在哪台交换机上,IP 分配给服务器后,服务器列表里直接显示它接在哪台交换机的哪个端口和 VLAN;交换机管理里的 ARP 绑定与源地址校验在网页上填写,由系统按华为、H3C、思科等厂商的指令集翻译成命令下发,MAC 地址可以自动学习并绑定,换线、迁移时不需要再人工核对。台账和交换机配置出自同一处,前面那些“漏改一次就断网”的问题就不再靠人的记性了。
常见问题
DHCP Snooping 对静态 IP 的服务器有用吗?
本身没有用,Snooping 只能从 DHCP 交互中学到绑定关系。机房里的公网 IP 大多是静态配置的,需要用静态绑定命令把 IP、MAC、端口、VLAN 手工加进绑定表,DAI 和 IP Source Guard 才能据此校验。
开了 DAI 之后客户突然全断网是怎么回事?
DAI 会丢弃与绑定表不匹配的 ARP 报文,如果某个端口还没有绑定条目,这个端口上的所有 ARP 都会被丢掉。正确顺序是先把绑定表补齐并核对,再在 VLAN 上启用 DAI,上联口记得设为信任端口。
每个客户一个 VLAN 和端口隔离选哪个?
地址够用、交换机 VLAN 数量够用时,优先每客户一个 VLAN,广播域彻底分开;多个客户共用一个公网段时用端口隔离,接入口之间二层不通、只能与上联口通信,同样能挡住欺骗报文。