Dynamic ARP Inspection(DAI)工作原理及测试

本文详细介绍了DHCPSnooping与DAI的工作原理、配置步骤、测试方法及其作用。通过搭建测试拓扑,实验证明了这两种技术在防止非法接入和恶意ARP欺骗方面的有效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.工作原理:

A.根据DHCP Snooping或手工方式形成的MAC地址与IP地址绑定表,来确定网络中的非法接入的MAC地址

B.同时为了防止恶意ARP欺骗,还可以对接口的arp请求包进行限速

---测试发现,对于非信任口的arp请求和回复(包括无理arp)都会被丢弃,因此觉得在非信任端口做限速没有多大必要(没有手工修改DHCP绑定表,或用arp access-list做排除的情况)

参考链接:http://wenku.baidu.com/view/cda2e815c5da50e2534d7f05.html

二.测试拓扑:

154539919.jpg

测试交换机IOS:

--Cisco IOS Software, C3560 Software (C3560-IPSERVICESK9-M), Version 12.2(55)SE3, RELEASE SOFTWARE (fc1)

三.配置步骤:

A.交换机:

①全局开启DHCP Snooping

ipdhcp snooping

②在VLAN 11启用DHCP Snooping

ipdhcp snooping vlan 11

③指定连接R2(DHCP服务器)的接口为信任接口

interface FastEthernet0/2
ip dhcp snooping trust

④在VLAN 11开启DAI

ip arp inspection vlan 11

B.DHCP服务器配置

①设定ip地址池

ip dhcp pool dhcppool
  network 10.1.1.0 255.255.255.0
  default-router 10.1.1.2

②信任82选项

interface GigabitEthernet0/0
ip dhcp relay information trusted

四.测试:

A.R1和PC1都作为DHCP客户端

---这时DHCP Snooping binding表中同时有R1和PC1的mac地址和IP对照表,因此当R1去ping PC1时,PC1的ARP Reply包能够被交换机正常转发,相反也是一样,所以ping通

B.将PC的IP手工指定为DHCP分派之外的其他地址

---比如10.1.1.130

---这时DHCP Snooping binding表中没有PC1的mac地址和IP对照表,立马报出日志:

*Mar  2 00:45:40.424: %SW_DAI-4-DHCP_SNOOPING_DENY: 1 Invalid ARPs (Req) on Fa0/9, vlan 11.([0050.56bc.9f6a/10.1.1.130/0000.0000.0000/10.1.1.130/00:45:40 UTC Tue Mar 2

---这时R1 ping PC1不通,在PC1上面抓包,可以看到由R1发出的arp请求包,PC也给R1回复了一个arp reply包,但是R1上show arp却没有PC1的arp记录,可见DAI依据DHCP Snooping binding表来判断,如果没有记录的话,则把该端口的arp reply包给丢弃了

---如果这时PC1去ping R1的接口地址,不通,在PC上面抓包可以看到,发出的arp request包根本就没有得到回应,在R1上debug也看不到arp request,说明开启DAI后,DAI把没有记录的接口的ARPrequest包也给丢弃了。

---可见:交换机对DHCP Snooping绑定表没有记录及没有做特殊设置的接口的ARP回复包和请求包都会丢弃

C.对于DHCNP Snooping binding表没记录的解决方式

---R1和PC1虽然都作为DHCP客户端时能互相ping通,但是它们都ping不通10.1.1.2,DHCP服务器的地址。

---原因是DAI检查DHCP绑定表没有10.1.1.2的条目,将10.1.1.2回复的ARP Reply包给丢弃了

---这时R2上能收到R1和PC1发出的Arp Request包的,所以它的arp缓存里面有R1和PC1对应的条目的

---如果R1和PC1上手工添加R2的ARP记录,它们是可以PING通R2的

①指定连接静态IP的设备接口为信任接口

SW1(config-if)#ip arp inspection trust
②设定arp access-list,并在vlan arp审查过滤时调用

arp access-list testarp
permit ip host 10.1.1.2 mac host 0002.0002.0002

ip arp inspection filter testarp vlan 11 <static>

---这个static是可选的,输入和不输入有什么区别没有测试出来

---在输入arp access-list名称时是不进行检查的,即使输入不存在的名称,也不做提示

③在DHCP Snooping表中增加静态条目

ip source binding 0002.0002.0002 vlan 11 10.1.1.2 interface Fa0/2

---增加后可以通过如下命令查看:show ip source binding 显示动态和静态绑定项

<think>我们讨论的是动态ARP检测(DAI)与DHCP监听(Snooping)的结合使用。DAI用于防止ARP欺骗攻击,而DHCP Snooping则通过建立信任端口和监听DHCP交互来构建绑定表(IP-MAC-Port映射)。DAI利用这个绑定表来验证ARP请求和响应的合法性。 我将按照要求提供实现方案,包括架构、配置示例、关键机制等,并在最后提出相关问题。</think>### 基于DHCP Snooping的动态ARP检测(DAI)实现方案 动态ARP检测(DAI)与DHCP Snooping协同工作可有效防御ARP欺骗攻击,通过建立IP-MAC-Port绑定关系实现二层网络安全。以下是完整实现方案: --- #### 1. **核心防护架构** ```mermaid graph LR A[客户端] -->|DHCP请求| B(接入交换机) B -->|DHCP Snooping| C[绑定表] C --> D{DAI引擎} D -->|ARP验证| E[合法流量] D -->|攻击检测| F[阻断端口] ``` --- #### 2. **绑定表构建机制** **DHCP Snooping绑定表示例**: ```python class DHCPSnoopingBinding: def __init__(self): self.bindings = {} # MAC: (IP, Port, VLAN, LeaseTime) def update(self, packet): if packet.is_dhcp_ack(): mac = packet.src_mac ip = packet.yiaddr port = packet.in_port vlan = packet.vlan_id lease = packet.options['lease_time'] # 更新绑定表 self.bindings[mac] = (ip, port, vlan, time.time() + lease) def validate_arp(self, arp_packet): src_mac = arp_packet.src_mac src_ip = arp_packet.src_ip if src_mac not in self.bindings: return False # 未认证设备 stored_ip, stored_port, _, _ = self.bindings[src_mac] # 验证IP和端口一致性 return src_ip == stored_ip and arp_packet.in_port == stored_port ``` --- #### 3. **交换机配置(Cisco示例)** ```cisco ! 启用DHCP Snooping ip dhcp snooping ip dhcp snooping vlan 10,20 ! 配置信任端口 interface GigabitEthernet0/1 description Uplink to Router ip dhcp snooping trust ! interface range GigabitEthernet0/2-24 ip dhcp snooping limit rate 10 ! 限制请求速率 ! 启用DAI并关联绑定表 ip arp inspection vlan 10,20 ip arp inspection validate src-mac dst-mac ip ip arp inspection filter binding-table vlan 10 ip arp inspection filter binding-table vlan 20 ! 配置DAI信任端口 interface GigabitEthernet0/1 ip arp inspection trust ``` --- #### 4. **ARP验证流程** ```python def dai_packet_processing(packet): if packet.is_arp(): if packet.in_port.is_trusted: forward(packet) # 信任端口直接放行 else: if binding_table.validate_arp(packet): forward(packet) # 验证通过 else: block_port(packet.in_port) # 阻断攻击端口 log_attack(packet, "ARP Spoofing") else: forward(packet) # 非ARP流量 ``` --- #### 5. **防护策略矩阵** | 攻击类型 | DHCP Snooping防护 | DAI防护机制 | |---------------|---------------------------|--------------------------------| | ARP欺骗 | 建立IP-MAC绑定表 | 验证ARP包与绑定表一致性 | | DHCP饥饿攻击 | 端口请求速率限制 | 阻断异常ARP请求 | | 非法DHCP服务器 | 非信任端口丢弃DHCP Offer | 拒绝未注册设备的ARP响应 | | MAC泛洪 | 端口MAC数量限制 | 丢弃异常ARP请求 | --- #### 6. **违规处理机制** **自动响应脚本**: ```python def arp_inspection_response(): violations = get_dai_violations() for violation in violations: if violation.type == "IP-MAC MISMATCH": # 隔离违规设备 block_port(violation.port) send_alert(f"ARP欺骗攻击检测: {violation.mac} on {violation.port}") elif violation.count > 10: # 高频违规 # 永久禁用端口 shutdown_port(violation.port) log_event("端口禁用", f"持续ARP攻击: {violation.port}") ``` --- #### 7. **云环境集成(AWS方案)** ```terraform # VPC DHCP选项集 resource "aws_vpc_dhcp_options" "dai" { domain_name_servers = ["10.0.0.2"] ntp_servers = ["10.0.0.3"] # 启用DHCP Snooping options { option_name = "snooping" value = "enabled" } } # DAI安全组策略 resource "aws_networkmanager_connect_attachment" "dai" { core_network_id = awscc_networkmanager_core_network.example.id options { protocol = "GRE" } # DAI配置 security_policy = jsonencode({ "DAI": { "enabled": true, "binding_source": "DHCP_SNOOPING", "violation_action": "BLOCK_PORT" } }) } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值