目录
配置ARP报文限速(针对Super VLAN的VLANIF接口)
使能ARP网关冲突后,使用某MAC发送网关冲突ARP报文,再使用该MAC发送转发流量为何不通
用户发送相同源IP的ARP请求报文,为何有时只能收到5pps速率的回应报文
前言
学IE以前认为IA很简单,学IE以后发现IA最重要;好多IE学员拿到证以后还不知道什么是二层转发,什么是三层转发;这些都是IA的基础,基础扎实学IE才会顺风顺水一举拿下,学IA一定要做到对知识点一公里深一厘米宽,知识点延展不用太宽。
没有什么知识点是一个实验解决不了的,如果有就再抓个包!
上篇文章讲到了TCP/IP的5层模型(也可以叫4层,4层就是将数据链路层与物理层合并为一层,为了方便大家理解,初学者就按照5层理解),本篇文章详细讲解一下各层的常用协议。
传输层
TCP协议
TCP位于TCP/IP模型的传输层,它是一种面向连接的端到端协议。TCP作为传输控制协议,可以为主机提供可靠的数据传输。
面向连接三个阶段:建立(准备)、维护(通信)、终止,这三个阶段来保证可靠性,面向连接保证实时性,例:发邮件给同事说收到请回复,但是一般邮件不会及时回复,这种属于非面向(非实时回复);面对面或者打电话问同事下班去吃饭,同事实时回复你,这种属于面向。
TCP报文格式
TCP通常使用IP作为网络层协议,这时TCP数据段被封装在IP数据包内。
TCP数据段由TCP Header(头部)和TCP Data(数据)组成。TCP最多可以有60个字节的头部,如果没有Options字段,正常长度是20字节。
建立阶段
三次握手:TCP通过三次握手建立可靠连接。
TCP建立连接的过程
第一次握手:主机A发送一个标识了SYN的数据段,表示期望与服务器A建立连接,此数据段的序列号为seq=a,并进入SYN_SENT状态,等待服务器确认。
第二次握手:服务器A回复标识了SYN+ACK的数据段,此数据段的序列号为seq=b,确认序列号为主机A的序列号加1(a+1),以此作为对主机A的SYN报文的确认,此时服务器进入SYN_RECV状态;
第三次握手:主机A发送一个标识了ACK的数据段,此数据段的序列号为seq=a+1,确认序列号为服务器A的序列号加1(b+1),以此作为对服务器A的SYN报文的确认,此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
三次握手建立成功表示TCP建立成功。
下面通过实验抓包方式加深对TCP三次握手过程的理解
第一次握手
第二次握手
第三次握手
通信阶段
TCP流量控制
TCP滑动窗口技术通过动态改变窗口大小来实现对端到端设备之间的数据传输进行流量控制。
如图所示,主机A和服务器A之间通过滑动窗口来实现流量控制。为方便理解,此例中只考虑主机A发送数据给服务器A时,服务器A通过滑动窗口进行流量控制。
主机A向服务器发送4个长度为1024字节的数据段,其中主机的窗口大小(TCP三次握手时进行协商)为4096个字节。服务器A收到第3个数据段后,缓存区满,第4个数据段被丢弃。服务器以ACK 3073响应,窗口大小调整为3072,表明服务器的缓冲区只能处理3072个字节的数据段。于是主机A改变其发送速率,发送窗口大小为3072的数据段。
TCP传输过程
TCP可靠传输还体现在TCP使用了确认技术来确保目的设备收到了从源设备发来的数据,并且是准确无误的。
确认技术的工作原理如下:
目的设备接收到源设备发送的数据段时,会向源端发送确认报文,源设备收到确认报文后,继续发送数据段,如此重复。
如图所示,主机A向服务器A发送TCP数据段,为描述方便(假定每个数据段的长度都是500个字节)。当服务器A成功收到序列号是M+1499的字节以及之前的所有字节时,会以序列号M+1499+1=M+1500进行确认。另外,由于数据段N+3传输失败,所以服务器A未能收到序列号为M+1500的字节,因此服务器A还会再次以序列号M+1500进行确认。
通信阶段的seq需要加上报文的字节大小。
上面的图是华为官方PPT的图通过滑动窗口技术协商出MSS,根据MSS传输数据段,使用下面图简化一下
正常数据交换过程
主机A给主机B分两次发送两个100字节数据包
①主机A通过1个数据包发送100字节的数据包,数据包的seq号设置为1200
②主机B进行确认,向主机A发送ACK包,并将ACK号设置为1301
为了保证数据准确到达,目标机器在收到数据包(包括SYN包、FIN包、普通数据包等)包后必须立即回传ACK包,这样发送方才能确认数据传输成功。
此时ACK号为1301而不是1201,原因在于ACK号的增量为传输的数据字节数。假设每次ACK号不加传输的字节数,这样虽然可以确认数据包的传输,但无法明确100字节全部正确的传递还是丢了一部分,比如只传80字节。因此按如下的公式确认Ack号:
Ack号=Seq号+传递的字节数+1
与三次握手协议相同,最后加1是为了告诉对方要传递的Seq号。
数据交换过程中出现丢包
主机A向主机B传递100字节的数据(Seq=1301),但中间发生了错误,主机B未收到。经过一段时间后,主机A仍未收到对于 Seq 1301 的ACK确认,因此尝试重传数据。
为了完成数据包的重传,TCP每次发送数据包时都会启动定时器,如果在一定时间内没有收到目标机器传回的 ACK 包,那么定时器超时,数据包会重传(重传3次)。
发送端只有在收到对方的 ACK 确认包后,才会清空输出缓冲区中的数据。
上图演示的是数据包丢失的情况,也会有 ACK 包丢失的情况,一样会重传。
终止阶段
TCP关闭连接
TCP支持全双工模式传输数据,这意味着同一时刻两个方向都可以进行数据的传输。在传输数据之前,TCP通过三次握手建立的实际上是两个方向的连接,因此在传输完毕后,两个方向的连接必须都关闭。
TCP连接的建立是一个三次握手的过程,而TCP连接的终止则要经过四次握手。
如图所示:
①主机A想终止连接,于是发送一个标识了FIN,ACK的数据段,序列号为a。
②服务器A回应了一个ACK的数据段,序列号为b,确认序列号为a+1,作为对主机A的FIN报文的确认。
③服务A想终止连接,于是向主机A发送了一个标识了FIN,ACK的数据段,序列号为b
④主机A回应了一个ACK的数据段,序列号为a+1,确认序列号为b+1,作为对服务器A的FIN报文的确认。
以上四次交互便完成了两个方向连接的关闭(各关各的)。
UDP协议
UDP是一种面向无连接的传输层协议,传输可靠性没有保证。
当应用程序对传输的可靠性要求不高,但是对传输速度和延迟要求较高时,可以用UDP协议来替代TCP协议在传输层控制数据的转发。UDP将数据从源发送到目的端时,无需事先建立连接。UDP采用了简单、易操作的机制在应用程序间传输数据,没有使用TCP中的确认技术或滑动窗口机制,因此UDP不能保证数据传输的可靠性,也无法避免接收到重复数据的情况。
UDP头部
UDP头部仅占8字节,传输数据时没有确认机制。
UDP报文分为UDP报文头与UDP数据区域两部分。报文由源端口、目的端口、报文长度以及校验和组成。UDP适合于实时数据传输,如语音和视频流量。相比TCP,UDP的传输效率更高、开销更小,但是无法保证数据传输的可靠性。
UDP传输过程
使用UDP传输数据时,由应用程序根据需要提供报文到达确认、排序、流量控制等功能。
主机A发送数据包时,这些数据包是以有序的方式发送到网络中的,每个数据包独立地在网络中被发送,所以不同的数据包可能会通过不同的网络路径到达主机B。这样的情况下,先发送的数据包不一定先达到主机B。因为UDP数据包没有序号,主机B将无法通过UDP协议将数据包按照原来的顺序重新组合,所以此时需要应用程序提供报文的到达确认、排序和流量控制等功能。通常情况下,UDP采用实时传输机制和时间戳来传输语音和视频数据。
UDP传输过程中丢包不会重传
UDP不提供重传机制,占用资源小,处理效率高。
一些时延敏感的流量,如语音、视频等,通常使用UDP作为传输层协议。
TCP重新发送数据会带来传输延迟和重复数据,降低了用户的体验。对于时延敏感的应用,少量的数据丢失一般可以被忽略,这时使用UDP传输将能够提升用户的体验。
网络层
ICMP协议
Internet控制报文协议ICMP(Internet Control Message Protocol)是网络层的一个重要协议。ICMP协议用来在网络设备间传递各种差错与控制信息,它对于收集各种网络信息、诊断与排除各种网络故障具有至关重要的作用。
ICMP是TCP/IP协议簇的核心协议之一,它用于在IP网络设备之间发送控制报文,传递差错、控制、查询等信息。
ICMP差错检测
ICMP Echo Request与ICMP Echo Reply分别用来查询与响应某些信息,进行差错检测。
ICMP Echo消息常用于诊断源于目的之间的网络连通性,还可以提供其他信息,如报文往返时间等。
ICMP差错报告
当网络设备无法访问目标时,会自动发送ICMP目的不可达报文到发送端设备。
ICMP定义了各种错误信息,用于诊断网络连接性问题;根据这些错误信息,源设备可以判断出数据传输失败的原因。
比如,如果网络中发生了环路,导致报文在网络中循环,最终TTL超时,这种情况下网络设备会发送TTL超时消息给发送端设备。
又比如如果目的不可达,则中间的网络设备会发送目的不可达的消息给发送端设备。目的不可达的情况有多种,如果是网络设备无法找到目的网络,则发送目的网络不可达消息;如果网络设备无法找到目的网络中的目的主机,则发送目的主机不可达消息。
Type | Code | 描述 |
0 | 0 | 回显应答(ping应答)Echo Reply |
3 | 0 | 网络不可达 |
3 | 1 | 主机不可达 |
3 | 2 | 协议不可达 |
3 | 3 | 端口不可达 |
3 | 4 | 需要进行分片但设置不分片比特 |
3 | 5 | 源站选路失败 |
3 | 6 | 目的网络不识别 |
3 | 7 | 目的主机不识别 |
3 | 8 | 源主机被隔离(作废不用) |
3 | 9 | 目的网络被强制禁止 |
3 | 10 | 目的主机被强制禁止 |
3 | 11 | 由于TOS,网络不可达 |
3 | 12 | 由于TOS,主机不可达 |
3 | 13 | 由于过滤,通信被强制禁止 |
3 | 14 | 主机越权 |
3 | 15 | 优先权中止生效 |
4 | 0 | 源端被关闭 |
5 | 0 | 对网络重定向 |
5 | 1 | 对主机重定向 |
5 | 2 | 对服务类型与网络重定向 |
5 | 3 | 对服务类型与主机重定向 |
8 | 0 | 请求回显(ping请求)Echo Request |
9 | 0 | 路由器通告 |
10 | 0 | 路由器请求告 |
11 | 0 | 传输期间生存时间为0 |
11 | 1 | 在数据组装期间生存时间为0 |
12 | 0 | 坏的IP首部 |
12 | 1 | 缺少必须的选项 |
13 | 0 | 时间戳请求(作废不用) |
14 | 0 | 时间戳应答(作废不用) |
15 | 0 | 信息请求(作废不用) |
16 | 0 | 信息应答(作废不用) |
17 | 0 | 地址掩码请求 |
18 | 0 | 地址掩码应答 |
ICMP应用-Ping
ICMP的一个典型的应用是Ping。Ping是检测网络连通性的常用工具,同时也能够收集其他相关信息。用户可以在ping命令中指定不同参数,如ICMP报文长度、发送的ICMP报文个数、等待回复响应的超时时间等,设备根据配置的参数来构造并发送ICMP报文,进行Ping测试。
Ping命令的输出信息中包括目的地址、ICMP报文长度、序号、TTL值、以及往返时间。序号是包含在Echo回复消息(Type=0)中的可变参数字段,TTL与往返时间包含在消息的IP头中。
Ping中看到的TTL是目的返回给源的TTL,不能用于判断源目经过多少设备。
ICMP应用-Tracert
ICMP的另一个典型应用是Tracert。Tracert基于报文头中的TTL值来逐跳跟踪报文的转发路径。为了跟踪到达某特定目的地址的路径,源端首先将报文的TTL值设置为1。该报文达到第一个节点后,TTL超时,于是该节点向源端发送TTL超时消息,消息中写到时间戳。然后源端将报文的TTL值设置为2,报文到达第二个节点后超时,该节点同样返回TTL超时消息,以此类推,直到报文到达目的地。这样源端根据返回的报文中的信息可以跟踪到报文经过的每一个节点,并根据时间戳信息计算往返时间。Tracert是检测网络丢包及时延的有效手段,同时可以帮助管理员发现网络中的路由环路。
TTL缺省值是30。
Tracert显示数据包在网络传输过程中所经过的每一跳。
源端(RTA)向目的端(主机B)发送一个UDP报文,TTL值为1,目的UDP端口号是大于30000的一个数,因为在大多数情况下,大于30000的UDP端口号是任何一个应用程序都不可能使用的端口号。
第一跳(RTB)收到源端发出的UDP报文后,判断出报文的目的IP地址不是本机IP地址,将TTL值减1后,判断出TTL值等于0,则丢弃报文并向源端发送一个ICMP超时(Time Exceeded)报文(该报文中含有第一跳的IP地址10.0.0.2),这样源端就得到了RTB的地址。
第二跳(RTC)收到源端发出的UDP报文后,回应一个ICMP超时报文,这样源端就得到了RTC的地址(20.0.0.2)。
以上过程不断进行,直到目的端收到源端发送的UDP报文后,判断出目的IP地址是本机IP地址,则处理此报文。根据报文中的目的UDP端口号寻找占用此端口号的上层协议,因目的端没有应用程序使用该UDP端口号,则向源端反馈一个ICMP端口不可达(Destination Unreachable)报文。
源端收到ICMP端口不可达报文后,判断出UDP报文已经到达目的端,则停止Tracert程序,从而得到数据报文从源端目的端所经历路径(10.0.0.2,20.0.0.2,30.0.0.2)。
数据链路层
ARP协议
网络设备有数据要发送给另一台网络设备时,必须要知道对方的网络层地址(即IP地址)。IP地址由网络层来提供,但是仅有IP地址是不够的,IP数据报文必须封装成帧才能通过数据链路进行发送。数据帧必须要包含目的MAC地址,因此发送端还必须获取到目的MAC地址。通过目的IP地址而获取目的MAC地址的过程是由ARP(Address Resolution Protocol)协议来实现的。
ARP报文格式
报文长度是42字节。前14字节的内容表示以太网首部,后28字节的内容表示ARP请求或应答报文的内容。
字段 | 长度(bit) | 含义 |
Ethernet Address of Destination | 48bit | 目的MAC地址。发送ARP请求时,为广播MAC地址,0xFFFF-FFFF-FFFF |
Ethernet Address of Sender | 48bit | 源MAC地址 |
Frame Type | 16bit | 表示后面数据的类型。对于ARP请求或应答来说,该字段的值为0x0806 |
Hardware Type | 16bit | 表示硬件的类型。对于以太网,该类型的值为“1” |
Protocol Type | 16bit | 表示发送方要映射的协议地址类型。对于IP地址,该字段的值为0x0800 |
Hardware Length | 8bit | 表示硬件地址的长度,单位是字节。对于ARP请求或应答来说,该值为6 |
Protocol Length | 8bit | 表示协议地址的长度,单位是字节。对于ARP请求或应答来说,该值为4 |
OP | 16bit | 操作类型: 1 ARP请求 2 ARP应答 3 RARP请求 4 RARP应答 |
Ethernet Address of Sender | 48bit | 发送方以太网地址。这个字段和ARP报文首部的源以太网地址字段是重复信息 |
IP Address of Sender | 32bit | 发送方IP地址 |
Ethernet Address of Destination | 48bit | 接收方的以太网地址。发送ARP请求时,该处填充值为0x00.00.00.00.00.00 |
IP Address of Destination | 32bit | 接收方的IP地址 |
数据链路层在进行数据封装时,需要目的MAC地址。
每一个网络设备在数据封装前都需要获取下一跳的MAC地址。IP地址由网络层来提供,MAC地址通过ARP协议来获取。ARP协议是TCP/IP协议簇中重要组成部分,ARP能够通过目的IP地址发现目标设备的MAC地址,从而实现数据链路层的可达性。
ARP工作过程
主机A发送一个数据包给主机C之前,首先要获取主机C的MAC地址。
通过ARP协议,网络设备可以建立目标IP地址与MAC地址之间的映射。网络设备通过网络层获取到目的IP地址之后,还要判断目的MAC地址是否已知。
ARP缓存
网络设备一般都有一个ARP缓存(ARP Cache),ARP缓存用来存放IP地址与MAC地址的关联信息。在发送数据前,设备会先查找ARP缓存表。
如果缓存表中存在对方设备的MAC地址,则直接采用该MAC地址来封装帧,然后将帧发送出去。
如果缓存表中不存在对方设备的MAC地址,则通过发送ARP Request报文来获的它。
学习到的IP地址与MAC地址的映射关系会被放入ARP缓存表中存放一段时间。在有效期内,设备可以直接从这个表中查找目的MAC地址来进行数据封装,而无需进行ARP查询。过了这段有效期,ARP表项会被自动删除。
如果目标设备位于其他网络,则源设备会在ARP缓存表中查找网关的MAC地址,然后将数据发送给网关,网关再把数据转给给目的设备。
主机A收到ARP Reply以后,会检查ARP报文中目的MAC地址是否与自己的MAC地址匹配。如果匹配,ARP报文中的源MAC地址与源IP地址会被记录到主机A的ARP缓存表中,ARP表项的老化超时时间缺省为1200秒。
ARP请求
主机A的ARP缓存表中不存在主机C的MAC地址,所以主机A会发送ARP Request来获取目的MAC地址。ARP Request报文封装在以太帧里。帧头中的源MAC地址为发送端主机A的MAC地址。此时,由于主机A不知道主机C的MAC地址,所以目的MAC地址为广播地址FF-FF-FF-FF-FF-FF。ARP Request报文中包含源IP地址、目的IP地址、源MAC地址、目的MAC地址,其中目的MAC地址值为0。ARP Request报文会在整个网络上广播,该网络中所有主机包括网关都会接收到此ARP Request报文。网关将会阻止该报文发送到其他网络上。
ARP响应
所有主机接收到该ARP Request报文后,会检查它的目的协议地址字段与自身的IP地址是否匹配。如果不匹配,则主机将不会响应该ARP Request报文。如果匹配,则该主机会将ARP报文中的源MAC地址与源IP地址信息记录到自己的APR缓存表中,然后通过ARP Reply报文进行响应。
主机C会向主机A回应ARP Reply报文。ARP Reply报文中的源协议地址是主机C自己的IP地址,目标协议地址是主机A的IP地址,目的MAC地址是主机A的MAC地址,源MAC地址是自己的MAC地址,同时Operation Code被设备为reply。ARP Reply报文通过单播传送。
处于不同网段的设备通信时,主机会请求网关的MAC地址。
ARP表项分为动态ARP、静态ARP与免费ARP。
动态ARP
动态ARP:动态ARP表项由ARP协议通过ARP报文自动生成与维护,可以被老化,可以被新的ARP报文更新,可以被静态ARP覆盖。动态ARP适用于拓扑结构复杂、通信实时性要求高的网络。
静态ARP
静态ARP:静态ARP表项是由网络管理员手工建立的IP地址与MAC地址之间固定的映射关系。静态ARP表项不会老化,不会被动态ARP表项覆盖。
静态ARP表项又分为短静态ARP表项与长静态ARP表项。
短静态ARP表项:手工建立IP地址与MAC地址之间固定的映射关系,未同时指定VLAN与出接口。
如果出接口是处于二层模式的以太网接口,短静态ARP表项不能直接用于报文转发。当需要转发报文时,设备会先发送ARP请求报文,如果收到的ARP应答报文中的源IP地址与源MAC地址与ARP表项中所配置的IP地址与MAC地址相同,则将接收到的ARP应答报文的VLAN与接口加入静态ARP表项中,后续设备可直接用该静态ARP表项转发报文。
长静态ARP表项:手工建立IP地址与MAC地址之间固定的映射关系,并同时指定该ARP表项所在VLAN与出接口。
长静态ARP表项可以直接用于报文转发。建议用户采用长静态ARP表项。
系统视图:arp static 1.1.1.1 1111-1111-1111 vid 10 interface Ethernet2/0/0
应用场景
正常情况下网络中设备可以通过ARP协议进行ARP表项的动态学习,生成的动态ARP表项可以被老化,可以被更新。但是当网络中存在ARP攻击时,设备中动态ARP表项可能会被更新成错误的ARP表项,或者被老化,造成合法用户通信异常。静态ARP表项不会被老化,也不会被动态ARP表项覆盖,可以保证网络通信的安全性。静态ARP表项可以限制本端设备与指定IP地址的对端设备通信时只使用指定的MAC地址,此时攻击报文无法修改本端设备的ARP表中IP地址与MAC地址的映射关系,从而保护了本端设备与对端设备间的正常通信。一般在网关设备上配置静态ARP表项。
对于以下场景,用户可以配置静态ARP表项。
- 对于网络中的重要设备,如服务器等,可以在路由器上配置静态ARP表项。这样可以避免路由器上重要IP地址对应的APR表项被ARP攻击报文错误更新,从而保证用户于重要设备之间正常通信。
- 当网络中用户设备MAC地址为组播MAC地址时,可以在路由器上配置静态ARP表项。缺省情况下,设备收到源MAC地址为组播MAC地址的ARP报文时不会进行ARP学习。
- 当希望禁止某个IP地址访问设备时,可以在路由器上配置静态ARP表项,将该IP地址与一个不存在的MAC地址进行绑定。
免费ARP
设备主动使用自己的IP地址作为目的IP地址发送ARP请求,此种方式成为免费ARP。
免费APR作用如下:
①免费ARP可以用来探测IP地址是否冲突。
主机被分配了IP地址或者IP地址发生变更后,必须立刻检测其所分配的IP地址在网络上是否是唯一的,以避免地址冲突。主机通过发送ARP Request报文来进行地址冲突检测。主机A将ARP Request广播报文中的目的IP地址字段设置为自己的IP地址,该网络中所有主机包括网关都会接收到此报文。当目的IP地址已经被某一个主机或网关使用时,该主机或网关就会回应ARP Reply报文。通过这种方式,主机A就能探测IP地址冲突了。
②在VRRP备份组中用来通告主备发生变换:发生主备变换后,MASTER设备会广播发送一个免费ARP报文来通告发生了主备变换。
③用于通告一个新的MAC地址:发送方更换了网卡,MAC地址变化了,为了能够在动态ARP表项老化前通告网络中其他设备,发送方可以发送一个免费ARP。
设备收到免费ARP报文后,进行如下判断:
如果免费ARP报文中源IP地址与自己的IP地址相同,则周期性的广播发送免费ARP应答报文,告知此IP地址在网络中存在冲突,直到冲突解除。
如果免费ARP报文中的源IP地址与自己的IP地址不同,免费ARP报文是在Vlanif接口收到的,并且设备上已经有免费ARP报文中源IP地址对应的动态ARP表项,则进行ARP学习,即根据收到的免费ARP报文更新该ARP表项。其余情况收到免费ARP报文后均不进行ARP学习。
ARP Proxy
说到ARP就一定会提到ARP代理,下面一起看看ARP代理的知识点以及使用场景。
如果ARP请求是从一个网络的主机发往同一网段但不在同一物理网络上的另一台主机,那么连接这两个网络的设备就可以回答该ARP请求,这个过程称作ARP代理(ARP Proxy)。
Proxy ARP分为路由式Proxy ARP、VLAN内Proxy ARP与VLAN间Proxy ARP。
路由式Proxy ARP
适用场景
需要互通的主机(主机上没有配置缺省网关)处于相同网段但不在同一物理网络(即不在同一广播域)的场景。
接口视图:arp-proxy enable
VLAN内Proxy ARP
需要互通的主机处于相同网段,并且属于相同VLAN,但是VLAN内配置了端口隔离的场景。
vlanif接口视图:arp-proxy inner-sub-vlan-proxy enable
VLAN间Proxy ARP
需要互通的主机处于相同网段,但属于不同VLAN的场景。VLAN聚合场景使用。
vlanif接口视图:arp-proxy inter-sub-vlan-proxy enable
配置Proxy ARP
路由器可以作为ARP请求中目标主机的代理,代为回答一些特殊情况下不可达的ARP请求。
前置任务
在配置ARP代理之前,需完成以下任务:
- 配置接口的链路层协议参数,使接口的链路协议状态为Up。
配置流程
以下任务没有顺序关系,可以根据需要选择执行下面的配置任务。
配置路由式Proxy ARP
背景信息
企业内部进行子网划分时,可能会出现两个子网网络属于同一网段,但是确不属于同一物理网络的情况,两个子网网络间被路由器分隔。这是可以通过修改网络内主机的路由信息,使发往其它子网的数据先发送到连接不同子网的网关设备上,再由网关设备转发此数据报文。但是这种解决方案需要配置子网中所有主机的路由,并不便于管理与维护。
在网关上部署路由式Proxy ARP功能,可以有效解决子网划分带来的管理与维护方面的问题。路由式Proxy ARP的功能可以使IP地址属于同一网段却不属于同一物理网络的主机间能够相互通信,并且主机上不需要配置缺省网关,便于管理与维护。
路由式Proxy ARP组网如下图所示。Router通接口IF1与IF2连接两个子网网络,接口IF1与接口IF2的IP地址不在同一网段。子网1内的主机Host_1与接口IF1的IP地址在同一网段,子网2内的主机Host_2与接口IF2的IP地址在同一网段,子网1内的主机Host_1与子网2内的主机Host_2的IP地址也在同一网段。主机Host_1与Host_2上未配置缺省网关。在Router上配置路由式Proxy ARP可以使子网1与子网2内主机间能够相互通信。
配置命令
接口视图:arp-proxy enable \\使能接口的路由式Proxy ARP功能。缺省情况下,接口的路由式Proxy ARP功能处于未使能状态。在设备上使能路由式Proxy ARP后,主机上应该减小ARP表项老化超时时间,使无效的ARP表项尽快失效,减少发给路由器而路由器不能转发的报文。
配置VLAN内Proxy ARP
背景信息
当VLAN内配置了端口隔离时,属于相同VLAN的用户无法实现互通。在关联了VLAN的接口上使能VLAN内Proxy ARP功能,可以实现用户间的三层互通。
如下图所示,主机Host_1与Host_2属于同一个VLAN。但是Router与主机Host_1与Host_2相连的接口IF1与IF2间配置了端口隔离。在Router上配置VLAN内Proxy ARP功能可以使主机Host_1与Host_2间实现互通。
配置命令
VLANIF接口视图:arp-proxy inner-sub-vlan-proxy enable \\使能VLAN内Proxy ARP功能。缺省未使能。
配置VLAN间Proxy ARP
背景信息
当属于同一网段但不属于不同VLAN的用户间要实现三层互通时,可以在关联了VLAN的接口上使能VLAN间Proxy ARP功能。
例如在Super-VLAN对应的VLANIF接口上使能VLAN间Proxy ARP功能,实现Sub-VLAN间用户通信。
如下图所示,主机Host_1与Host_2属于同一网段,但不属于不同的VLAN。在Router上配置VLAN间Proxy ARP可以使主机Host_1与Host_2间实现互通。
配置VLANIF接口也可以使不同VLAN间用户实现三层互通,具体配置可参见09【HCIE钻研之路】-IA-VLAN间通信的配置VLAN间互访。
配置命令
VLANIF接口视图:arp-proxy inter-sub-vlan-proxy enable,使能VLAN间Proxy ARP。缺省情况下,VLAN间Proxy ARP功能处于未使能状态。
ARP-Ping
ARP-Ping包括ARP-Ping IP与ARP-Ping MAC
ARP-Ping IP
ARP-Ping IP通过发送ARP请求报文确定特定的IP地址是否被网络中其他设备使用
ARP-Ping IP是利用ARP报文在局域网内探测IP地址是否被其它设备使用的一种方法。
用户在设备上配置IP地址前,如果需要确认该IP地址有没有被网络中其他设备使用,可以通过发送ARP请求报文,确认该IP的使用情况,以便做出相应调整。
通过Ping命令也可以探测该IP地址是否被网络中其他设备使用。但是如果带有防火墙的目的主机与路由设备设置了对Ping报文不进行回复的动能时,就不会响应Ping报文,造成该IP地址没有被使用的假象。由于ARP报文是二层协议,大多数情况下可以透过设置了ARP-Ping IP发送的是ARP请求报文。
以下是ARP-Ping IP的具体实现过程。
1.用户通过命令ARP-Ping IP设置指定的IP地址后,设备发送ARP请求报文并启动ARP应答报文的超时定时器。
2.局域网内路由设备或主机收到ARP请求报文后,如果发现报文中的目的IP地址与本设备IP地址相同,则回复APR应答报文。
3.发送方设备根据是否收到ARP应答报文进行如下两种操作。
- 发送方设备收到ARP应答报文后,将应答报文中源IP地址与命令行中输入的IP地址进行比较。若匹配,则发送方设备上显示所输入IP地址相对应的MAC地址,并且关闭ARP应答报文的超时定时器,本次操作结束。若不匹配,则丢弃该ARP应答报文,并且输入该IP地址未被使用的提示信息。
- 若ARP应答报文的超时定时器超时,则在发送方设备上输出该IP地址未被使用的提示信息。
ARP-Ping MAC
ARP-Ping MAC通过发送ICMP请求报文来确定特定的MAC地址是否被网络中其他设备使用
ARP-Ping MAC是通过发送ICMP请求(Echo Request)报文来确定MAC地址是否被其他设备使用的一种方法。
以下是ARP-Ping MAC的具体实现过程
1.用户通过ARP-Ping MAC设置指定的MAC地址后,发送ICMP报文并启动ICMP应答报文的超时定时器。
2.局域网内的设备收到ICMP请求报文后,会回复ICMP应答(Echo Reply)报文。
3.发送方设备根据是否收到ICMP应答报文进行如下两种操作。
- 发送方设备收到ICMP应答报文后,将应答报文中的源MAC地址与命令行中输入的MAC地址相比较。若匹配,在发送方设备上显示出该报文的IP地址,并提示该MAC地址已被使用并且关闭超时定时器,本次操作结束。若所有收到的ICMP应答报文的源MAC地址与命令行中输入的MAC地址均不匹配,则丢弃这些ICMP应答报文,并在发送方设备上输出该MAC地址未被使用的提示信息。
- 若ICMP应答报文的超时定时器超时并且未收到ICMP响应报文,在发送方设备上输出该MAC地址未被使用的提示信息。
ARP安全
ARP安全简介
介绍ARP安全的定义与作用。
定义
ARP(Address Resolution Protocol)安全是针对ARP攻击的一种安全特性,它通过一系列对ARP表项学习与ARP报文处理的限制、检查等措施来保证网络设备的安全性。ARP安全特性不仅能够防范针对ARP协议的攻击,还可以防范网段扫描攻击等ARP协议的攻击。
目的
ARP协议简单、易用的优点,但是也因为其没有任何安全机制,容易被攻击者利用。在网络中,常见的ARP攻击方式主要包括:
- ARP泛洪攻击,也叫拒绝服务攻击DoS(Denial of Service),主要存在这两种场景:
◆设备处理ARP报文与维护ARP表项都需要消耗系统资源,同时为了满足ARP表项查询效率的要求,一般设备都会对ARP表项规模有规格限制。攻击者就利用这一点,通过伪造大量源IP地址变化的ARP报文,使得设备ARP表资源被无效的ARP条目耗尽,合法用户的ARP报文不能继续生成ARP条目,导致正常通信终端。
◆攻击者利用工具扫描本网段主机或者进行跨网段扫描时,会向设备发送大量目标IP地址不能解析的IP报文,导致设备出发大量ARP Miss消息,生成并下发大量临时ARP表项,并广播大量ARP请求报文对目标IP地址进行解析,从而造成CPU负荷过重。
- ARP欺骗攻击,是指攻击者通过发送伪造的ARP报文,恶意修改设备或网络内其他用户主机的ARP表项,造成用户或网络的报文通信异常。
ARP攻击行为存在以下危害:
- 会造成网络连接不稳定,引发用户通信终端。
- 利用ARP欺骗截取用户报文,进而非法获取游戏、网银、文件服务等系统的账号与口令,造成被攻击者重大利益损失。
为了避免上述ARP攻击行为造成的各种危害,ARP安全特性针对不同的攻击类型提供了多种解决方案,具体表1与表2所示:
表1 ARP安全针对泛洪攻击的解决方案
防攻击功能 | 功能说明 | 部署设备 |
---|---|---|
ARP报文限速 | 通过ARP报文限速功能、可以防止设备因处理大量ARP报文,导致CPU负荷过重而无法处理其他业务。 | 建议在网关设备上部署本功能 |
ARP Miss消息限速 | 通过ARP Miss消息限速功能,可以防止设备因收到大量目的IP不能解析的IP报文,触发大量ARP Miss消息,导致CPU负荷过重而无法处理其他业务。 | 建议在网关设备上部署本功能 |
ARP表项严格学习 | 使能ARP表项严格学习功能后,只有本设备主动发送的ARP请求报文的应答报文才能触发本设备学习ARP,其他设备主动向本设备发送的ARP报文不能触发本设备学习ARP。这可以防止设备收到大量ARP攻击报文时,ARP表被无效的ARP条目占满。 | 建议在网关设备上部署本功能 |
ARP表项限制 | 使能ARP表项限制功能后,设备接口只能学习到设定的最大动态ARP表项数目。这可以防止当一个接口所接入的某一台用户主机发起ARP攻击时整个设备的ARP表资源都被耗尽。 | 建议在网关设备上部署本功能 |
表2 ARP安全针对欺骗攻击的解决方案
防攻击功能 | 功能说明 | 部署设备 |
---|---|---|
ARP表项老化 | 使能ARP表项固化功能后,设备在第一次学习到ARP之后,不再允许用户更新此ARP表项或只能更新此ARP表项的部分信息,或者通过发送ARP请求报文的方式进行确认,以防止攻击者伪造ARP报文修改正常用户的ARP表项内容。 设备提供三种ARP表项固化模式:fixed-all模式、fixed-mac模式与send-mac模式。 | 建议在网关设备上部署本功能 |
动态ARP检测 | 使能动态ARP检测DAI(Dynamic ARP Inspection)功能后,当设备收到ARP报文时,将此ARP报文的源IP、源MAC、收到ARP报文的接口及VLAN信息与DHCP Snooping绑定表的信息进行比较,如果信息匹配,则认为是合法用户,允许此用户的ARP报文通过,否则认为是攻击,丢弃该ARP报文。 本功能仅适用于DHCP Snooping场景。 | 建议在网关设备上部署本功能 |
ARP防网关冲突 | 通过ARP防网关冲突功能,可以防止用户仿冒网关发送ARP报文,非法修改网络内其他用户的ARP表项。 | 建议在网关设备上部署本功能 |
发送免费ARP报文 | 使能发送免费ARP报文功能后,设备作为网关,主动向用户发送以自己IP地址为目标IP地址的ARP请求报文,定时更新用户ARP表项的网关MAC地址,防止用户的报文不能正常的转发到网关或者被恶意攻击者窃听。 | 建议在网关设备上部署本功能 |
ARP报文内MAC地址一致性检查 | 通过ARP报文内MAC地址一致性检查功能,可以防止以太网数据帧首部中的源、目的MAC地址与ARP报文数据区中的源、目的MAC地址不一致的ARP欺骗攻击。 | 建议在网关设备上部署本功能 |
ARP报文合法性检查 | 使能ARP报文合法性检查功能后,设备会对以太网数据帧首部中的源MAC地址与ARP报文数据区中源MAC地址不一致的ARP报文进行过滤。 | 建议在网关设备上或接入设备上部署本功能 |
ARP表项严格学习 | 使能ARP表项严格学习功能后,只有本设备主动发送的ARP请求报文的应答报文才能触发本设备学习ARP,其他设备主动向本设备发送的ARP报文不能触发本设备学习ARP。这可以防止设备因收到伪造的ARP报文,错误地更新ARP表项,导致合法用户的通信流量发生终端。 | 建议在网关设备上部署本功能 |
受益
- 可以有效降低用户为保证网络正常运行与网络信息安全而产生的维护成本。
- 可以为用户提供安全的网络环境与更稳定的网络服务。
ARP安全原理描述
ARP报文限速
如果设备对收到的大量ARP报文全部进行处理,可能导致CPU负荷过重而无法处理其他业务。因此,在处理之前,设备需要对ARP报文进行限速,以保护CPU资源。
设备提供了如下几类针对ARP报文的限速功能:
- 根据源MAC地址或源IP地址进行ARP报文限速
当设备检测到某一个用户在短时间内发送大量的ARP报文,可以针对该用户配置基于源MAC地址或源IP地址的ARP报文限速。在1秒时间内,如果该用户的ARP报文数目超过设定阈值(ARP报文限速),则丢弃超出阈值部分的ARP报文。
◆根据源MAC地址进行ARP报文限速:如果指定MAC地址,则针对指定源MAC地址的ARP报文根据限速值进行限速;如果不指定MAC地址,则针对每一个源MAC地址的ARP报文根据限速值进行限速。
◆根据源IP地址进行ARP报文限速:如果指定IP地址,则针对指定源IP地址的APR报文根据限速值进行限速;如果不指定IP地址,则针对每一个源IP地址的ARP报文根据限速值进行限速。
- 针对Super VLAN的VLANIF接口下的ARP报文限速
当设备的VLANIF接口接收到触发ARP Miss消息的IP报文(关于ARP Miss消息的详细解释请参见ARP Miss消息限速)时,或者在设备的VLANIF接口上启用ARP代理功能之后,设备接收到目的IP符合代理条件且该IP对应的ARP条目不存在的ARP请求报文时,都会触发Super VLAN的VLANIF接口进行ARP学习。设备会将ARP请求报文在每个Sub VLAN下复制,如果该Super VLAN下配置了大量Sub VLAN,那么设备将产生大量的ARP请求报文。为了避免CPU因复制、发送大量ARP请求报文而负担过重,设备支持Super VLAN的VLANIF接口下的ARP报文限速功能,已对该场景下设备发送的ARP请求报文进行流量控制。
- 针对全局与接口的ARP报文限速
设备支持在全局与接口下配置ARP报文的限速值与限速时间,当同时在全局与接口下配置ARP报文的限速值与限速的同时,设备会先按照接口进行限速,再按照全局进行限速。
◆针对全局的ARP报文限速:在设备出现ARP攻击时,限制全局处理的ARP报文数量。
◆针对接口的ARP报文限速:在某个接口出现ARP攻击时,限制处理该接口收到的ARP报文数量,配置本功能可以保证不影响其他接口的ARP学习。
ARP Miss消息限速
如果网络中有用户向设备发送大量目标IP地址不能解析的IP报文(即路由表中存在该IP报文的目的IP对应的路由表项,但设备上没有该路由表项中下一跳对应的ARP表项),将导致设备触发大量的ARP Miss消息。这种触发ARP Miss消息的IP报文(即ARP Miss报文)会被上送到主控板进行处理,设备会根据ARP Miss消息生成与下发大量临时ARP表项并向目的网络发送大量ARP请求报文,这样就增加了设备CPU的负担,同时严重消耗目的网络的带宽资源。如下图所示,攻击者向网关发送目的地址为10.2.1.5/24且不能解析的IP报文。
为了避免这种IP报文攻击所带来的危害,设备提供了如下几类针对ARP Miss消息的限速功能。
- 根据源IP地址进行ARP Miss消息限速
当设备检测到某一源IP地址的IP报文在1秒内触发的ARP Miss消息数量超过了ARP Miss消息限速值,就认为此源IP地址存在攻击。
如果指定了IP地址,则针对指定源IP地址的ARP Miss消息根据限速值进行限速;如果不指定IP地址,则针对每一个IP地址的ARP Miss消息根据限速值进行限速。
- 针对全局的ARP Miss消息限速
设备支持对全局处理的ARP Miss消息数量,根据限速值进行限速。
- 通过设定临时ARP表项的老化时间控制ARP Miss消息的出发频率
当IP报文出发ARP Miss消息时,设备会根据ARP Miss消息生成临时ARP表项,并且向目的网段发送ARP请求报文。
◆在临时ARP表项老化时间范围内:
◆设备收到ARP应答报文前,匹配临时ARP表项的IP报文将被丢弃并且不会触发ARP Miss消息。
◆设备收到ARP应答报文后,则生成正确的ARP表项来替换临时ARP表项。
◆当老化时间超时后,设备会清除临时ARP表项。此时如果设备转发IP报文匹配不到对应的ARP表项,则会重新触发ARP Miss消息并生成临时ARP表项,如此循环重复。
当判断设备受到攻击时,可以增大临时ARP表项的老化时间,减小设备ARP Miss消息的触发频率,从而减小攻击对设备的影响。
ARP表项严格学习
如果大量用户在同一时间段内向设备发送大量ARP报文,或者攻击者伪造正常用户的ARP报文发送给设备,则会造成下面的危害:
- 设备因处理大量ARP报文而导致CPU负荷过重,同时设备学习大量的ARP报文可能导致设备ARP表项资源被无效的ARP条目耗尽,造成合法用户的ARP报文不能继续生成ARP条目,进而导致用户无法正常通信。
- 伪造的ARP报文将错误地更新设备的ARP表项,导致用户无法正常通信。
为避免上述危害,可以在网关设备上部署ARP表项严格学习功能。
ARP表项严格学习是指只有本设备主动发送的ARP请求报文的应答报文才能触发本设备学习ARP,其他设备主动向本设备发送的ARP报文不能触发本设备学习ARP,这样,可以拒绝大部分的ARP报文攻击。
如上图所示。通常情况下,当UserA向Gateway发送ARP请求报文后,Gateway会向UserA回应ARP应答报文,并且添加或更新对应的ARP表项。当Gateway配置ARP表格严格学习功能以后:
- 对于Gateway收到UserA发送来的ARP请求报文,Gateway不添加也不更新UserA对应的ARP表项。如果该请求报文请求的是Gateway的MAC地址,那么Gateway会向UserA回应ARP应答报文。
- 如果Gateway向UserB发送ARP请求报文,待收到与该请求对应的ARP应答报文后,Gateway会添加或更新UserB对应的ARP表项。
ARP表项限制
ARP表项限制功能应用在网关设备上,可以限制设备的某个接口学习动态ARP表项是数目。默认状态下,接口可以学习的动态ARP表项数目规格与全局的ARP表项规格保持一致。当部署完ARP表项限制功能后,如果指定接口下的动态ARP表项达到了允许学习的最大数目,将不再允许该接口继续学习动态ARP表项,以保证当一个接口所接入的某一用户主机发起ARP攻击时不会导致这个设备的ARP表资源都被耗尽。
ARP表项固化
如下图所示,Attacker仿冒UserA向Gateway发送伪造的ARP报文,导致Gateway的ARP表中记录了错误的UserA地址映射关系,造成UserA接收不到正常的数据报文。
为了防御这种欺骗网关攻击,可以在网关设备上部署ARP表项固化功能。网关设备在第一次学习到ARP以后,不再允许用户更新此ARP表项或只能允许更新此ARP表项的部分信息,或者通过发送单播ARP请求报文的方式对更新ARP条目的报文进行合法性确认。
设备提供的三种ARP表项固化模式,如下表所示。
固化模式 | 功能 |
---|---|
fixed-all模式 | 如果设备收到的ARP报文中的MAC地址、接口或VLAN信息与ARP表中的信息不匹配,则直接丢弃该ARP报文。此模式适用于用户MAC地址固定,并且用户接入位置相对固定的场景。 |
fixed-mac模式 | 如果设备收到的ARP报文中MAC地址与ARP表中的信息不匹配,则直接丢弃该ARP报文;如果匹配,但是收到报文的接口或VLAN信息与ARP表中对应条目不匹配,则可以更新对应ARP条目中的接口与VLAN信息。此模式适用于用户MAC地址固定,但用户接入位置频繁变动的场景。 |
send-ack模式 | 如果设备收到的ARP报文A涉及ARP表项MAC地址、接口或VLAN信息的修改,设备不会立即更新ARP表项,而是先向待更新的ARP表项现有MAC地址对应的用户发送一个单播的ARP请求报文进行确认。
◆如果在随后的3秒内收到ARP应答报文C,且ARP报文A与ARP应答报文C的源IP地址、源MAC地址、接口与VLAN信息一直,则认为现有ARP条目已经无效且ARP报文A是可以更新该ARP条目的合法报文,并根据ARP报文A来更新该ARP条目。 ◆如果在随后的3秒内未收到ARP应答报文,或者ARP报文A与收到的ARP应答报文C的源IP地址、源MAC地址、接口与VLAN信息不一致,则认为ARP报文A为攻击报文,设备会忽略收到的ARP报文A,ARP条目不会更新。 此模式适用于用户的MAC地址与接入位置均频繁变动的场景。 |
动态ARP检测
网络中针对ARP的攻击层出不穷,中间人攻击是最常见的ARP欺骗攻击方式之一。
中间人攻击(Man-in-the-middle attack)是指攻击者与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为与对方直接对话,但事实上整个会话都被攻击者完全控制。在中间人攻击中,攻击者可以拦截通讯双方的通话并插入新的内容。
如下图所示,是中间人攻击的一个场景。攻击者主动向UserA发送伪造UserB的ARP报文,导致UserA的ARP表中记录了错误的UserB地址映射关系,攻击者可以轻易获取得到UserA原本发往UserB的数据;同样,攻击者也可以轻易获取到UserB原本要发往UserA的数据。这样UserA与UserB间的信息安全无法得到保障。
为了防御中间人攻击,可以在Router上部署动态ARP检测DAI(Dynamic ARP Inspection)功能。
动态ARP检测是利用绑定表来防御中间人攻击的。当设备收到ARP报文时,将此ARP报文对应的源IP、源MAC、VLAN以及接口信息与绑定表的信息进行比较,如果信息匹配,说明发送该ARP报文的用户是合法用户,允许此用户的ARP报文通过,否则就认为是攻击,丢弃该ARP报文。
说明:动态ARP检测功能仅适用于DHCP Snooping场景。设备使能DHCP Snooping功能后,当DHCP用户上线时,设备会自动生成DHCP Snooping绑定表;对于静态配置IP地址的用户,设备不会生成DHCP Snooping绑定表,所以需要手动添加静态绑定表。关于DHCP Snooping的详细介绍,见后续章节。
当Router上部署动态ARP检测功能后,如果攻击者连接到Router并视图发送伪造的ARP报文,Router会根据绑定表检测到这种攻击行为,对该ARP报文进行丢弃处理。如果Router上同时使能了动态ARP检测丢弃报文告警功能,则当ARP报文因不匹配绑定表而被丢弃的数量超过了告警阈值时,Router会发出告警通知管理员。
ARP防网关冲突
如下图所示,攻击者B将伪造网关的ARP报文发送给用户A,使用户A误以为攻击者即为网关。用户A的ARP表中会记录错误的网关地址映射关系,使得用户A跟网关的正常数据通信中断。
为了防范攻击者仿冒网关,可以在网关设备上使能ARP防网关冲突功能。当设备收到的ARP报文存在下列情况之一:
- ARP报文的源IP地址与报文入接口对应的VLANIF接口的IP地址相同。
- ARP报文的源IP地址是入接口的虚拟IP地址,但ARP报文源MAC地址不是VRRP虚拟MAC。
说明:一个VRRP备份组,被当做一个共享局域网内主机的缺省网关,即虚拟交换机。一个虚拟交换机拥有一个VRRP虚MAC,VRRP虚MAC根据虚拟交换机的ID生成,格式为:00-00-5E-00-01-{VRID}{VRRP}。当虚拟交换机回应ARP请求时,使用的是VRRP虚MAC地址,而不是接口的真实MAC地址。
设备就认为该ARP报文是网关地址冲突的ARP报文,设备将生成ARP防攻击表项,并在后续一段时间内丢弃该接口收到的同VLAN以及同源MAC地址的ARP报文,这样可以防止与网关冲突的ARP报文在VLAN内广播。
此时,还可以在设备上使能发送免费ARP功能,通过广播发送正确的免费ARP报文到所有用户,迅速将已经被攻击的用户记录的错误网关地址映射关系修改正确。
发送免费ARP报文
如下图所示,Attacker仿冒网关向UserA发送了伪造的ARP报文,导致UserA的ARP表中记录了错误的网关地址映射关系,从而正常的数据不能被网关接收。
为了避免上述危害,可以在网关设备上部署发送免费ARP报文功能,定期更新用户的ARP表项,使得用户ARP表项中记录的是正确的网关MAC地址。
ARP报文内MAC地址一致性检查
ARP报文内MAC地址一致性检查功能主要应用于网关设备上,可以防御以太网数据帧首部中的源/目的MAC地址与ARP报文中的源/目的MAC地址不同的ARP攻击。
部署本功能后,网关设备在进行ARP学习前将对ARP报文进行检查。如果以太网数据帧首部中的源/目的MAC地址与ARP报文中的源/目的MAC地址不同,则认为是攻击报文,将其丢弃;否则,继续进行ARP学习。
ARP报文合法性检查
设备在收到ARP报文时,会对ARP报文的有效性进行检查,检查的项目包含但不局限于:
- 检查报文的长度
- 以太网数据帧首部中的源MAC、目的MAC合法性检查
- ARP请求、回应类型检查
- MAC地址长度检查
- IP地址长度检查
- ARP帧格式是否为以太帧类型检查
这些检查是用来判断ARP报文的格式跟ARP协议的规定是否一致。其中以太网数据帧首部中的源MAC地址与ARP报文数据区中的源MAC地址不一致的ARP报文是协议允许的报文,但是在实际应用中,该类报文很可能是攻击报文。
在接入设备或网关设备上使能ARP报文合法性检查功能后,设备会对收到的ARP报文进行以太网数据帧首部中的源MAC地址与ARP报文数据区中的源MAC地址的一致性检查,如果两者不一致,则直接丢弃该ARP报文,否则允许该ARP报文通过。
DHCP触发ARP学习
在DHCP用户场景下,当DHCP用户数目很多时,设备进行大规模ARP表项的学习与老化对设备性能与网络环境形成攻击。
为了避免此问题,可以在网关设备上部署DHCP触发ARP学习功能。当DHCP服务器给用户分配了IP地址,网关设备会根据VLANIF接口上收到的DHCP ACK报文直接生成该用户的ARP表项。该功能生效的前提是使能DHCP Snooping功能。
网关设备上还可同时部署动态ARP检测功能,防止DHCP用户的ARP表项被伪造的APR报文恶意修改。
ARP安全应用场景
防ARP泛洪攻击
如下图所示,局域网中用户通过SwitchA与SwitchB接入连接到Gateway访问Internet。当网络中出现过多的ARP报文时,会导致网关设备CPU负载过高,影响设备正常处理用户的其它业务。另一方面,网络中过多的ARP报文会占用大量的网络带宽,引起网络拥塞,从而影响整个网络通信的正常运行。
为了避免上述危害,可以在网关设备上部署防ARP泛洪攻击功能,包括ARP报文限速功能、ARP Miss消息限速功能、ARP表项严格学习以及ARP表项限制功能。
- 部署ARP报文限速功能后,Gateway会对收到的ARP报文进行数量统计,如果在一定时间内,ARP报文的数量超出了配置的阈值(ARP报文限速值),则丢弃超出阈值部分的ARP报文,这样可以防止设备因处理大量ARP报文造成CPU负荷过重。
- 部署ARP Miss消息限速功能后,Gateway会对ARP Miss消息进行数量统计,如果在一定时间内,ARP Miss消息的数量超出了配置的阈值(ARP Miss消息限速),则超出部分的ARP Miss消息将被忽略,且Gateway会丢弃触发ARP Miss消息的IP报文,这样可以防止Gateway因处理大量目标IP地址不能解析的IP报文造成CPU负荷过重。
- 部署ARP表项严格执行功能后,Gateway仅仅学习自己发送的ARP请求报文的应答报文,并不学习其它设备主动向Gateway发送的ARP报文,这样可以防止Gateway因学习大量ARP报文而导致ARP表项资源被无效的ARP条目耗尽。
- 部署ARP表项限制功能后,Gateway会对各个接口学习动态ARP表项的数据进行限制打。当指定接口下动态ARP表项达到允许学习的最大数目后,将不允许新增动态ARP表项,这样可以防止一个接口所接入的某一用户主机发起ARP攻击而导致整个设备的ARP表资源都被耗尽。
防ARP欺骗攻击
如下图所示,局域网中UserA、UserB、UserC等用户通过Switch接入连接到Gateway访问Internet。
正常情况下,UserA、UserB、UserC上线之后,通过相互之间交互ARP报文,UserA、UserB、UserC与Gateway上都会创建相应的ARP表项。此时,如果有攻击者通过在广播内发送伪造的ARP报文,篡改Gateway或者UserA、UserB、UserC上的ARP表项,攻击者可以轻而易举地窃取UserA、UserB、UserC的信息或者阻碍UserA、UserB、UserC正常访问网络。
为避免上述危害,可以在网关设备上部署防ARP欺骗攻击功能,包括ARP表项固化功能、ARP表项严格学习功能、发送免费ARP报文等功能。
- 部署ARP表项固化功能后,Gateway在第一次学习到ARP之后,不再允许用户更新此ARP表项或只能更新此ARP表项的部分信息,或者通过发送单播ARP请求报文的方式对更新ARP条目的报文进行合法性确认,这样可以防止攻击者伪造ARP报文修改网关上其他用户的ARP表项。
- 部署ARP表项严格学习功能后,Gateway仅仅学习自己向UserA、UserB或UserC发送的ARP请求报文的应答报文,不学习攻击者主动向Gateway发送的ARP报文,并且不允许攻击者主动发送的ARP报文更新Gateway上现有的ARP条目,这样可以防止攻击者冒充其他用户修改网关上对应的ARP表项。
- 部署发送免费ARP报文功能后,Gateway主动向用户发送以自己IP地址为目标IP地址的ARP请求报文,定时更新用户ARP表项的网关MAC地址,这样可以防止用户的报文不能正常的转发到网关或被恶意攻击者窃听。
配置ARP安全
配置防ARP泛洪攻击
通过配置防ARP泛洪攻击功能,可以避免ARP泛洪攻击带来的ARP表项资源被无效ARP条目耗尽、CPU负荷过重造成用户无法正常通信等危害。
前置任务
在配置防ARP泛洪攻击之前,需完成以下任务:
- 连接接口并配置接口的物理参数,使接口的物理层状态为Up。
配置流程
在配置防ARP泛洪攻击任务中,各配置步骤均是并列关系,无严格配置顺序,用户根据需要选择配置即可。
说明:当针对全局、接口的ARP报文限速以及根据源MAC地址、源IP地址进行ARP报文限速中的多个限速功能同时配置时,设备对同时满足这些限速条件的ARP报文以其中最小的限速值进行限速。
当针对全局的ARP Miss消息限速以及根据源IP地址进行ARP Miss消息限速中的多个限速功能同时配置时,设备对同时满足这些限速条件的ARP Miss消息以其中最小的限速值进行限速。
配置ARP报文限速(根据源MAC地址)
背景信息
设备处理大量源MAC地址相对固定的ARP报文会造成CPU繁忙,并且如果ARP报文的源IP地址同时不断变化,还会导致设备的ARP表资源被耗尽。
为了避免此问题,可以在网关设备上配置设备根据源MAC地址进行ARP报文限速。设备会对上送CPU的ARP报文根据源MAC地址进行统计,如果在1秒内收到的同一个源MAC地址的ARP报文超过设定阈值(ARP报文限速值),设备则丢弃超出阈值部分的ARP报文。
操作步骤
- 执行命令system-view,进入系统视图。
- 配置根据源MAC地址进行ARP报文限速
- 执行命令arp speed-limit source-mac maximum maximum,配置根据任意源MAC地址进行ARP报文限速的限速值。
- 执行命令arp speed-limit source-mac mac-address maximum maximum,配置对指定MAC地址用户的ARP报文进行限速的限速值。
两种配置同时存在的情况下,当ARP报文源MAC地址匹配限速指定的MAC地址时,对该源MAC地址的ARP限速值为后一步骤中配置的maximum值;否则为前一步骤中配置的maximum值。
缺省情况下,设备对每一个源MAC地址的ARP报文速率限制为0,即不根据源MAC地址进行ARP报文限速。
配置ARP报文限速(根据源IP地址)
背景信息
设备处理大量源IP地址相对固定的ARP报文(例如同一个源IP地址的ARP报文对应的MAC地址或出接口信息不断发生跳变),会造成CPU繁忙,影响到正常业务的处理。
为了避免此问题,可以在网关设备上配置根据源IP地址进行ARP报文限速。设备会对上送CPU的ARP报文根据源IP地址进行统计,如果在1秒内收到的同一个源IP地址的ARP报文超过设定阈值(ARP报文限速值),设备会丢弃超出阈值部分的ARP报文。
操作步骤
- 执行命令system-view,进入系统视图。
- 配置根据源IP地址进行ARP报文限速
- 执行命令arp speed-limit source-ip maximum maximum,配置根据任意源IP地址进行ARP报文限速的限速值。
- 执行命令arp speed-limit ip-address maximum maximum,配置对指定IP地址用户的ARP报文进行限速的限速值。
两种配置同时存在的情况下,当ARP报文源IP地址匹配限速指定的IP地址时,对该源IP地址的ARP报文限速值为后一步骤中配置的maximum值;否则为前一步骤中配置的maximum值。
缺省情况下,设备允许1秒内最多只能有同一个源IP地址的5个ARP报文通过。
配置ARP报文限速(针对全局与接口)
背景信息
如果设备对收到大量的ARP报文全部进行处理,可能导致CPU负荷过重而无法处理其他业务。因此,在处理之前,设备需要对ARP报文进行限速,以保护CPU资源。
使能ARP报文限速功能后,可以在全局或接口下配置ARP报文的限速值与限速时间。在ARP报文限速时间内,如果收到的ARP报文数据超过ARP报文限速值,设备会丢弃超出限速值的ARP报文。
- 针对全局的ARP报文限速:在设备出现ARP攻击时,限制全局处理的ARP报文数量。
- 针对接口的ARP报文限速:在某个接口出现ARP攻击时,限制处理该接口收到的ARP报文数量,配置本功能可以保证不影响其他接口的ARP学习。
当同时在全局与接口下配置ARP报文的限速值与限速时间时,设备会先按照接口进行限速,再按照全局进行限速。
当设备丢弃的ARP报文数量较多时,如果希望设备能够以告警的方式提醒网络管理员,则可以使能ARP报文限速丢弃告警功能。当丢弃的ARP报文数超过告警阈值时,设备将产生告警。
说明:如果配置了ARP报文限速丢弃告警功能,则需要使用命令arp anti-attack log-trap-timer time调整设备发送告警的时间间隔。
建议在网关设备上进行如下配置。
操作步骤
- 执行命令system-view,进入系统视图。
- (可选)执行命令interface interface-type interface-number,进入接口视图。在系统视图下配置ARP报文限速功能无需执行此步骤。
- 执行命令arp anti-attack rate-limit enable,使能ARP报文限速功能。缺省情况下,未使能ARP报文限速功能。
- 执行命令arp anti-attack rate-limit packet-number [ interval-value ],配置APR报文的限速值、限速时间。缺省情况下,在1秒内设备最多允许100个ARP报文通过。
- (可选)执行命令 arp anti-attack rate-limit alarm enable,使能ARP报文限速丢弃告警功能。缺省情况下,未使能ARP报文限速丢弃告警功能。
- (可选)执行命令arp anti-attack rate-limit alarm threshold threshold,配置ARP报文你限速丢弃告警阈值。缺省情况下,ARP报文限速丢弃告警阈值为100。
配置ARP报文限速(针对Super VLAN的VLANIF接口)
背景信息
以下两种情况会触发Super VLAN的VLANIF接口进行ARP学习:
- VLANIF接口接收到触发ARP Miss消息的IP报文。
- VLANIF接口上启用ARP代理功能之后,设备接收到目的IP符合代理条件且该IP对应的ARP条目不存在的ARP请求报文
Super VLAN的VLANIF接口进行ARP学习时会将ARP请求报文在每个Sub VLAN下复制,如果该Super VLAN下配置了大量的Sub VLAN,那么设备将产生大量的ARP请求报文。为了避免CPU因复制、发送大量ARP请求报文而负担过重,设备支持Super VLAN的VLANIF接口下的ARP报文限速功能,以对该场景下设备发送的ARP请求报文进行流量控制。
当设备CPU较为繁忙时,可适当调小ARP请求报文的广播发送限制速率;当设备CPU较为空闲时,且希望能够快速广播ARP请求报文,可适当调大该速率。请根据设备实际状况与实际网络环境进行调整。
建议在网关设备上进行如下配置。
说明:AR160系列中,仅AR161EW、AR161EW-M1、AR169EW、AR169GEW-L不支持Super VLAN。
操作步骤
- 执行命令system-view,进入系统视图。
- 执行命令arp speed-limit flood-rate rate,配置所有Super VLAN的VLANIF接口下ARP请求报文的广播发送限制速率。缺省情况下,所有Super VLAN的VLANIF接口下ARP请求报文的广播发送限制速率为1000pps。
配置ARP Miss消息限速(根据源IP地址)
背景信息
如果网络中有用户向设备发送大量目标IP地址不能解析的IP报文(即路由表中存在该IP报文的目的IP对应的路由表项,但设备上没有该路由表中下一跳对应的ARP表项),将导致设备触发大量ARP Miss消息。这种触发ARP Miss消息的IP报文会被上送到设备进行处理,设备会根据ARP Miss消息生成与下发大量临时ARP表项并向目的网络发送大量ARP请求报文,这样就增加了设备CPU的负担,同时严重消耗目的网络的带宽资源。
当设备检测到某一源IP地址的IP报文你在1秒内触发的ARP Miss消息数量超过了限速值,就认为源IP地址存在攻击。
管理员可以根据实际网络环境,对ARP Miss消息的限速值进行调整,限制设备在一定时间内只处理指定数目的ARP Miss消息,避免设备的资源浪费在处理ARP Miss消息上,保证用户的其他业务能够正常运行。
建议在网关设备上进行如下配置。
操作步骤
- 执行命令system-view,进入系统视图。
- 配置根据源IP地址进行ARP Miss消息限速
- 执行命令arp-miss speed-limit source-ip maximum maximum,配置根据源IP地址进行ARP Miss消息限速的限速值。
- 执行命令arp-miss speed-limit source-ip ip-address maximum maximum,配置对指定IP地址用户的ARP Miss消息限速的限速值。
两种配置同时存在的情况下,当触发ARP Miss消息的IP报文的源IP地址匹配限速指定的IP地址,对该源IP地址的IP报文触发的ARP Miss消息限速值为后一步骤中配置的maximum值;否则为前一步骤中配置的maximum值。
如果将限速值配置为0,则表示不根据源IP地址进行ARP Miss消息限速。缺省情况下,设备允许每秒最多处理同一个源IP地址触发5个ARP Miss消息。
配置ARP Miss消息限速(针对全局)
背景信息
如果网络中有用户向设备发送大量目标IP地址不能解析的IP报文(即路由表中存在该IP报文的目的IP对应的路由表项,但设备上没有路由表项中下一跳对应的ARP表项),将导致设备触发大量的ARP Miss消息。这种触发ARP Miss消息的IP报文会被上送到设备进行处理,设备会根据ARP Miss消息生成与下发大量临时ARP表项并向网络发送大量ARP请求报文,这样就增加了设备CPU的负担,同时严重消耗目的网络的带宽资源。
为了避免这种IP报文攻击所带来的危害,建议在网关设备上部署ARP Miss消息限速功能。
当设备忽略的ARP Miss消息数量较多时,如果希望设备能够以告警的方式提醒网络管理员,则可以配置ARP Miss消息限速丢弃告警功能。当设备忽略处理的ARP Miss消息个数超过告警阈值时,设备将产生告警。
说明:如果配置了ARP Miss消息限速丢弃告警功能,则需要使用命令arp anti-attack log-trap-timer time调整设备发送告警的时间间隔。
操作步骤
- 执行命令system-view,进入系统视图。
- 执行命令arp-miss anti-attack rate-limit enable,使能ARP Miss消息限速功能。缺省情况下,未使能ARP Miss消息限速功能。
- 执行命令arp-miss anti-attack rate-limit packet-number [ interval-value ],配置ARP Miss消息的限速值与限速时间。缺省情况下,在1秒内设备最多允许处理100个ARP Miss消息。
- (可选)执行命令arp-miss anti-attack rate-limit alarm enable,使能ARP Miss消息限速丢弃功能。缺省情况下,未使能ARP Miss消息限速丢弃告警功能。
- (可选)执行命令arp-miss anti-attack rate-limit alarm threshold threshold,配置ARP Miss消息限速丢弃告警阈值。缺省情况下,ARP Miss消息限速丢弃告警阈值为100。
配置临时ARP表项的老化时间
背景信息
当IP报文触发ARP Miss消息时,设备会根据ARP Miss消息生成临时ARP表项(查看ARP表项时,如果MAC ADDRESS字段显示为“Incomplete”,表示当前表项为临时ARP表项),并且向目的网段发送ARP请求报文。
- 在临时ARP表项老化时间范围内:
- 设备收到ARP报文应答前,匹配临时ARP表项的IP报文将被丢弃并且不会触发ARP Miss消息。
- 设备收到ARP报文应答后,则生成正确的ARP表项来替换临时ARP表项。
- 当老化时间超时后,设备会清除临时ARP表项。此时如果设备转发IP报文匹配不到对应的ARP表项,则会重新触发ARP Miss消息并生成临时ARP表项,如此循环重复。
故可以通过配置临时ARP表项的老化时间来控制ARP Miss消息的出发频率。当判断设备受到攻击时,可以调大该时间,减小设备ARP Miss消息的出发频率,从而减小攻击对设备的影响。
操作步骤
- 执行命令system-view,进入系统视图。
- 执行命令interface interface-type interface-number,进入接口视图,接口类型包括Ethernet、GE、Eth-Trunk与VLANIF。
- 执行命令arp-fake expire-time expire-time,配置临时ARP表项的老化时间。缺省情况下,临时ARP表项的老化时间是1秒。
配置ARP表项严格学习
背景信息
如果大量用户在同一时间段内向设备发送大量ARP报文,或者攻击者伪造正常用户的ARP报文发送给设备,则会造成如下危害:
- 设备因处理大量APR报文而导致CPU负荷过重,同时设备学习大量的ARP报文可能导致设备ARP表项资源被无效的ARP条目耗尽,造成合法用户的ARP报文不能继续生成ARP条目,导致正常用户无法正常通信。
- 伪造的ARP报文将错误地更新设备ARP表项,导致合法用户无法正常通信。
为避免上述危害,可以在网关设备上配置ARP表项严格学习功能。配置该功能后,只有本设备主动发送的ARP请求报文的应答报文才能触发本设备学习ARP,其他设备主动向本设备发送的ARP报文不能触发本设备学习ARP,这样,可以拒绝大部分的ARP报文攻击。
ARP表项严格学习功能可在全局与接口视图下进行配置。
- 全局使能该功能,则设备的所有接口均进行ARP表项严格学习。
- 接口视图下使能该功能,则只有该接口进行ARP表项严格学习。
当同时在全局与接口视图下进行配置时,接口下配置的优先级高于全局配置的优先级。
说明:在全局使能ARP表项严格学习功能的前提下:
- 如果在指定接口下执行命令arp learning strict force-disable,则该接口将会被强制执行去是使能ARP表项严格学习的功能。
- 如果在指定接口下执行命令arp learning strict trust时,则该接口的ARP表项严格学习功能与全局的配置保持一致。
操作步骤
- 配置全局ARP表项严格学习功能
- 执行命令system-view,进入系统视图。
- 执行命令arp learning strict,配置全局ARP表项严格学习功能。缺省未使能。
- 配置接口的ARP表项严格学习功能
- 执行命令system-view,进入系统视图。
- 执行命令interface interface-type interface-number,进入接口视图。
- 执行命令arp learning strict { force-enable | force-disable | trust },配置接口的ARP表项严格学习功能。缺省未使能。
参数 | 参数说明 | 取值 |
---|---|---|
force-enable | 使能ARP表项严格学习功能。 | - |
force-disable | 去使能ARP表项严格学习功能。 | - |
trust | ARP表项严格学习功能与全局配置保持一致。 说明:配置trust参数与配置undo arp learning strict命令的功能效果一致。 | - |
配置基于接口的ARP表项限制
背景信息
为了防止当一个接口所接入的某一用户主机发起ARP攻击时导致整个设备的ARP表资源都被耗尽,可以在指定接口下配置接口能够学习的最大动态ARP表项数目。当指定接口下的动态ARP表项达到允许学习的最大数目后,将不允许新增动态ARP表项。
建议在网关设备上进行如下配置。
操作步骤
- 配置以太网接口的ARP表项限制
- 执行命令system-view,进入系统视图。
- 执行命令interface interface-type interface-number,进入接口视图。
- 执行命令arp-limit vlan vlan-id1 [ to vlan-id2 ] maximum maximum,配置基于以太网接口的ARP表项限制。缺省情况下,设备接口能学到的最大动态ARP表项数目是该接口下能配置的最大值。接口类型包括Ethernet、GE、VE与Eth-Trunk。这些接口既可以是三层接口也可以是二层接口。作为三层接口时,不能配置vlan-id。做为二层接口时,必须配置vlan-id。
- 配置VLANIF接口的ARP表项限制
- 执行命令system-view,进入系统视图。
- 执行命令interface vlanif interface-number,进入VLANIF接口视图。
- 执行命令arp-limit maximum maximum,配置基于VLANIF接口的ARP表项限制。缺省情况下,设备接口能学习到的最大动态ARP表项数目是该接口下能配置的最大值。
- 配置以太网子接口的ARP表项限制
- 执行命令system-view,进入系统视图。
- 执行命令interface interface-type interface-number [ .subnumber ],进入子接口视图。
- 执行命令arp-limit vlan vlan-id1 [ to vlan-id2 ] maximum maximum,配置基于物理子接口的ARP表项限制。缺省情况下,设备接口能学到的最大动态ARP表数目是该接口下能配置的最大值。接口类型包括Ethernet、GE、VE与Eth-Trunk。这些接口既可以是三层接口也可以是二层接口。作为三层接口时,不能配置vlan-id。作为二层接口时,必须配置vlan-id。
检查防ARP泛洪攻击配置结果
操作步骤
- 使用命令display arp anti-attack configuration { arp-rate-limit | arpmiss-rate-limit | arp-speed-limit | arpmiss-speed-limit | entry-check | gateway-duplicate | packet-check | all},查看ARP攻击配置。
参数 | 参数说明 | 取值 |
---|---|---|
arp-rate-limit | 查看针对全局与接口的ARP报文限速的配置。 | - |
arpmiss-rate-limit | 查看ARP Miss消息限速的配置。 | - |
arp-speed-limit | 查看ARP报文根据源IP地址与源MAC地址进行限速的配置。 | - |
arpmiss-speed-limit | 查看ARP Miss消息根据源IP地址进行限速的配置。 | - |
entry-check | 查看ARP表项固化模式。 | - |
gateway-duplicate | 查看防网关冲突攻击是否使能。 | - |
packet-check | 查看ARP报文合法性检查是否使能。 | - |
all | 查看全部ARP防攻击配置。 |
- 使用命令display arp-limit [ interface interface-type interface-number ] [ vlan vlan-id ],查看接口可以学习到的动态ARP表项数目的最大值。
- 使用命令display arp learning strict,查看全局与所有接口上的ARP表项严格学习情况。
配置防ARP欺骗攻击
通过配置防ARP欺骗攻击时,可以防止伪造的ARP报文恶意修改设备或网络内其他用户主机的ARP表项,造成网络中的报文转发异常。
前置任务
在配置防ARP欺骗攻击之前,需要完成以下任务:
- 连接接口并配置接口的物理参数,使接口的物理层状态为Up。
配置流程
在配置防ARP欺骗攻击任务中,各配置步骤均是并列关系,无严格配置顺序,用户根据需要选择配置即可。
配置ARP表项固化
为了防止ARP地址欺骗攻击,可以在网关设备上配置ARP表项固化功能。三种ARP表项固化模式适用于不同的应用场景,且是互斥关系。
- fixed-mac方式:设备收到的ARP报文中的MAC地址与ARP表中对应条目的MAC地址不匹配,则直接丢弃该ARP报文;如果匹配,但是收到报文的接口或VLAN信息与ARP表中对应条目不匹配,则可以更新对应ARP条目中的接口与VLAN信息。此方式适用于用户MAC地址固定,但用户接入位置频繁变动的场景。当用户从不同接口接入设备时,设备上该用户对应的ARP表项中的接口信息可以及时更新。
- fixed-all方式:只有当ARP报文对应的MAC地址、VLAN信息与ARP表项中的信息完全匹配时,设备才可以更新ARP表项的其他内容。此方式适用于用户MAC地址固定,并且用户接入位置相对固定的场景。
- send-ack方式:设备收到一个涉及MAC地址、VLAN、接口修改的ARP报文时,不会立即更新ARP表项,而是先向更新的ARP表项现有MAC地址对应的用户发送一个单播的ARP请求报文进行确认,根据确认结果再决定是否更新ARP表项中的MAC地址、VLAN与接口信息。此方式适用于用户的MAC地址与接入位置频繁变动的场景。
可在全局下配置ARP表项固化功能。全局配置该功能后,默认设备上所有接口的ARP表项固化功能均已使能。
操作步骤
- 全局使能ARP表项固化功能
- 执行命令system-view,进入系统视图。
- 执行命令arp anti-attack entry-check { fixed-mac | fixed-all | send-ack } enable,配置ARP表项固化功能。缺省情况下,未配置ARP表项固化的功能。
配置动态ARP检测
背景信息
为了防御中间人攻击,避免合法用户的数据被中间人窃取,可以在接入设备上使能动态ARP检测DAI功能。设备会将ARP报文对应的源IP、源MAC、接口、VLAN信息与绑定表中的信息进行比较,如果信息匹配,说明发送该ARP报文的用户是合法用户,允许此用户的ARP报文通过,否则就认为是攻击,丢弃该ARP报文。
可在接口视图或VLAN视图下使能动态ARP检测功能。在接口视图下使能时,则对该接口收到的所有ARP报文进行绑定表匹配检查;在VLAN视图下使能时,则对加入该VLAN的接口收到的属于该VLAN的ARP报文进行绑定表匹配检查。
当设备丢弃的不匹配绑定表的ARP报文数量较多时,如果希望设备能够以告警的方式提醒网络管理员,则可以使能动态ARP检测丢弃报文告警功能。当丢弃的ARP报文数超过告警阈值时,设备将产生告警。
说明:4GE-2S、4ES2G-S、4ES2GP-S与9ES2单板不支持动态ARP检测功能。
当网关设备上部署了DHCP触发ARP学习功能时,则可以在网关设备上部署本功能。
本功能仅适用于DHCP Snooping场景。设备使能DHCP Snooping功能后,当DHCP用户上线时,设备会自动生成DHCP Snooping绑定表;对于静态配置IP地址的用户,设备不会生成DHCP Snooping绑定表,所以需要手动添加静态绑定表。DHCP Snooping的配置,请参见后面章节的DHCP Snooping配置。静态绑定表的配置,请参见后面章节的配置基于静态绑定表的IPSG。
在设备上配置动态ARP检测功能时,还需同时配置端口隔离与ARP代理功能,否则动态ARP检测功能无法生效。端口隔离的配置,请见08【HCIE钻研之路】-IA-以太网交换与VLAN。ARP代理的配置,见上小节。
操作步骤
1.执行命令system-view,进入系统视图。
2.执行命令interface interface-type interface-number,进入接口视图;或者执行命令vlan vlan-id,进入VLAN视图。
3.执行命令arp anti-attack check user-bind enable,使能动态ARP检测功能(即对ARP报文进行绑定表匹配检查功能)。缺省情况下,未使能动态ARP检测功能。
4.(可选)接口视图下执行命令arp anti-attack check user-bind check-item { ip-address | mac-address | vlan }*,或者VLAN视图下执行命令arp anti-attack check user-bind check-item { ip-address | mac-address | interface }*,配置对ARP报文进行绑定表匹配检查的检查项。
缺省情况下,对ARP报文的IP地址、MAC地址、VLAN与接口信息都进行检查。
如果希望仅匹配绑定表某一项或某两项内容的特殊ARP报文也能够通过,则可以配置对ARP报文进行绑定表匹配检查时只检查某一项或某两项内容。
说明:指定ARP报文绑定表匹配检查项对配置了静态绑定表的用户不起作用,即设备仍然按照静态绑定表的内容对ARP报文进行绑定表匹配检查。
5.(可选)接口视图下执行命令arp anti-attack check user-bind alarm enable,使能动态ARP检测丢弃报文告警功能。
缺省情况下,未使能动态ARP检测丢弃报文告警功能。
须知:由于动态ARP检测丢弃报文告警功能针对的是接口下DAI功能丢弃的ARP报文数告警统计,因此建议不要同时在VLAN视图下配置命令arp anti-attack check user-bind enable以及在加入该VLAN的接口视图下配置命令arp anti-attack check user-bind alarm enable,避免VLAN下的DAI功能可能造成实际丢包数目与接口DAI告警统计值之间的偏差。
由于设备缺省的发送ARP告警的时间间隔为0(即不发送ARP告警信息),因此使能动态DAI检测丢弃报文告警功能后,必须使用命令arp anti-attack log-trap-timer time调大设备发送告警的时间间隔,设备才会发送ARP告警。
6.(可选)接口视图下执行命令arp anti-attack check user-bind alarm threshold threshold,配置动态ARP检测丢弃报文告警阈值。
缺省情况下,动态ARP检测丢弃报文告警阈值为系统视图下arp anti-attack check user-bind alarm threshold threshold命令配置的值。如果系统视图下没有配置该值,则接口下缺省的告警阈值为100。
配置ARP防网关冲突
背景信息
如果有攻击者仿冒网关,在局域网内部发送源IP地址是网关IP地址的ARP报文,会导致局域网内其他用户主机的ARP表记录错误的网关地址映射关系。这样其他用户主机就会把发往网关的流量均发给了攻击者,攻击者可轻易侦听到他们发送的数据内容,并且最终会造成这些用户主机无法访问网络。
为了防止攻击者仿冒网关,当用户主机直接接入网关时,可以在网关设备上使能ARP防网关冲突攻击功能。当设备收到的ARP报文存在下列情况之一:
- ARP报文的源IP地址的报文与报文入接口对应的VLANIF接口的IP地址相同。
- ARP报文的源IP地址是入接口的虚拟IP地址,但ARP报文源MAC地址不是VRRP虚MAC。
设备就认为该ARP报文是网关地址冲突的ARP报文,设备将生成ARP防攻击表项,并在后续一段时间内丢弃该接口收到的同VLAN以及同源MAC地址的ARP报文,这样就可以防止与网关地址冲突的ARP报文在VLAN内广播。
操作步骤
- 执行命令system-view,进入系统视图。
- 执行命令arp anti-attack gateway-duplicate enable,使能ARP防网关冲突攻击功能。缺省情况下,未使能ARP防网关冲突攻击功能。
配置发送ARP免费报文
背景信息
如果有攻击者向其他用户发送仿冒网关的ARP报文,会导致其他用户的ARP表中记录错误的网关地址映射关系,造成其他用户的正常数据不能被网关接收。此时可以在网关设备上配置发送免费ARP报文的功能,用来定期更新合法用户的ARP表项,使得合法用户ARP表项中记录的是正确的网关地址映射关系。
可在全局或VLANIF接口下配置发送免费ARP报文功能。
- 全局配置该功能后,则默认设备上所有接口的发送ARP免费报文功能均已使能。
- 在全局与VLANIF接口下同时配置了该功能时,VLANIF接口下的配置优先生效。
操作步骤
1.执行命令system-view,进入系统视图。
2.(可选)执行命令interface vlanif interface-number,进入VLANIF接口视图。
说明:在系统视图下配置发送ARP免费报文功能无需执行此步骤。
3.执行命令arp gratuitous-arp send enable,使能发送免费ARP报文的功能。
缺省情况下,未使能发送免费ARP报文的功能。
4.(可选)执行命令arp gratuitous-arp send interval interval-time,配置发送免费ARP报文的时间间隔。缺省情况下,发送免费ARP报文的时间间隔为90秒。
配置ARP报文内MAC地址一致性检查
背景信息
ARP报文内MAC地址一致性检查功能主要应用于网关设备上,可以防御以太网数据帧首部中的源/目的MAC地址与ARP报文数据区中的源/目的MAC地址不同的ARP攻击。
配置ARP报文内MAC地址一致性检查后,网关设备在进行ARP学习前对ARP报文进行检查。如果以太网数据帧首部中的源/目的MAC地址与ARP报文数据区中的源/目的MAC地址不同,则认为是攻击报文,将其丢弃;否则,继续进行ARP学习。
操作步骤
- 执行命令system-view,进入系统视图。
- 执行命令interface interface-type interface-number,进入接口视图。
- 执行命令arp validate { source-mac | destination-mac }*,使能ARP报文内MAC地址一致性检查功能,即设备对以太网数据帧首部中的源/目的MAC地址与ARP报文数据区中的源/目的MAC地址进行一致性检查的功能。
缺省情况下,设备不对以太网数据帧首部中的源/目的MAC地址与ARP报文数据区中的源/目的MAC地址进行一致性检查。
说明:本命令不支持在子接口上配置。当子接口接收到ARP报文时,ARP报文内MAC地址一致性检查遵循主接口下的检查规则。
本命令不支持在VLANIF接口上配置。当VLANIF接口接收到ARP报文时,ARP报文内MAC地址一致性检查遵循成员口下的检查规则。
配置ARP报文合法性检查
背景信息
设备在收到ARP报文时,会对ARP报文的有效性进行检查,检查的项目包含但不局限于:
- 检查报文的长度
- 以太网数据帧首部中的源MAC、目的MAC合法性检查
- ARP请求、回应类型检查
- MAC地址长度检查
- IP地址长度检查
- ARP帧格式是否为以太帧类型检查
这些检查是用来判断ARP报文的格式跟ARP协议的规定是否一致。其中以太网数据帧首部中的源MAC地址与ARP报文数据区中的源MAC地址不一致的ARP报文是协议允许的报文,但是在实际应用中,该类报文很可能是攻击报文。
使能ARP报文合法性检查功能后,设备会对收到的ARP报文进行以太网数据帧首部中的源MAC地址与ARP报文数据区中的源MAC地址的一致性检查,如果两者不一致,则直接丢弃该ARP报文,否则允许该ARP报文通过。
操作步骤
- 执行命令system-view,进入系统视图。
- 执行命令arp anti-attack packet-check sender-mac,使能ARP报文合法性检查功能,即对ARP报文中的源MAC地址与以太网数据帧首部中的源MAC地址进行一致性检查的功能。
缺省情况下,未使能ARP报文合法性检查功能。
配置ARP表项严格学习
背景信息
如果大量用户在同一网段内向设备发送大量ARP报文,或者攻击者伪造正常用户的ARP报文发送给设备,则会造成如下危害:
- 设备因处理大量ARP报文而导致CPU负荷过重,同时设备学习大量的ARP报文可能导致设备ARP资源表项被无效的ARP条目耗尽,造成合法用户的ARP报文不能继续生成ARP条目,导致用户无法正常通信。
- 伪造的ARP报文将错误地更新设备ARP表项,导致合法用户无法正常通信。
为避免上述危害,可以在网关设备上配置ARP表项严格学习功能。配置该功能后,只有本设备主动发送的ARP请求报文的应答报文才能触发本设备学习ARP,其他设备主动向本设备发送的ARP报文不能触发本设备学习ARP,这样,可以拒绝大部分的ARP报文攻击。
ARP表项严格学习功能可在全局与接口视图下进行配置。
- 全局使能该功能,则设备的所有接口均进行ARP表项严格学习。
- 接口视图下使能该功能,则只有该接口进行ARP表项严格学习。
当同时在全局与接口视图下进行配置时,接口下配置的优先级高于全局配置的优先级。
说明:在全局使能ARP表项严格学习功能的前提下:
- 如果在指定接口下执行命令arp learning strict force-disable,则该接口将会被强制执行去使能ARP表项严格学习功能。
- 如果在指定接口下执行命令arp learning strict trust时,则该接口的ARP表项严格学习功能与全局的配置保持一致。
操作步骤
- 配置全局ARP表项严格学习功能
- 执行命令system-view,进入系统视图。
- 执行命令arp learning strict,配置全局ARP表项严格学习功能。
缺省情况下,未使能ARP表项严格学习功能。
- 配置接口的ARP表项严格学习功能
- 执行命令system-view,进入系统视图。
- 执行命令interface interface-type interface-number,进入接口视图。
- 执行命令arp learning strict { force-enable | force-disable | trust },配置接口的ARP表项严格学习功能。
缺省情况下,未使能ARP表项严格学习功能。
配置DHCP触发ARP学习
背景信息
在DHCP用户场景下,当DHCP用户数目很多时,设备进行大规模ARP表项的学习与老化会对设备性能与网络环境形成冲击。
为了避免此问题,可以在网关设备上使能DHCP触发ARP学习功能。当DHCP服务器给用户分配了IP地址,网关设备会根据VLANIF接口上收到的DHCP ACK报文直接生成该用户的ARP表项。
说明:DHCP触发ARP学习功能生效的前提是通过命令dhcp snooping enable使能DHCP Snooping功能。
在VRRP与DHCP Relay组合场景下,VRRP主备设备上都不能再配置命令dhcp snooping enable与arp learning dhcp-trigger。
网关设备上还可同时部署动态ARP检测功能,防止DHCP用户的ARP表项被伪造的ARP报文恶意修改。
操作步骤
- 执行命令system-view,进入系统视图。
- 执行命令interface vlanif vlan-id,进入VLANIF接口视图。
- 执行命令arp learning dhcp-trigger,使能DHCP触发ARP学习功能。
缺省情况下,未使能DHCP触发ARP学习功能。
检查防ARP欺骗攻击配置结果
- 使用命令display arp anti-attack configuration { arp-rate-limit | arpmiss-rate-limit | arp-speed-limit | arpmiss-speed-limit | entry-check | gateway-duplicate | packet-check | all },查看ARP防攻击配置。
- 使用命令display arp anti-attack check user-bind interface interface-type interface-number,查看接口下ARP报文检查相关的配置。
- 使用命令display arp learning strict,查看全局与所有接口上的ARP表项严格学习情况。
- 使用命令display arp anti-attack gateway-duplicate item,查看ARP防网关冲突攻击表项。
维护ARP安全
维护ARP安全包括监控ARP运行情况、清除ARP报文统计信息、清除ARP报文丢弃计数以及配置对潜在的ARP攻击行为发送日志与告警。
监控ARP安全运行情况
操作步骤
- 执行命令display arp packet statistics,查看ARP处理的报文统计数据。
- 执行命令display arp flood statistics,查看所有Super VLAN的VLANIF接口下ARP请求报文的发送统计信息。
清除ARP安全统计信息
背景信息
须知:清除统计信息后,以前的统计信息将无法恢复,务必仔细确认。
在确认需要清除运行信息后,请在用户视图下执行以下命令。
操作步骤
- 执行命令reset arp packet statistics,清除ARP报文的统计信息。
- 执行命令reset arp flood statistics,清除所有Super VLAN的VLANIF接口下ARP请求报文的发送统计信息。
- 执行命令reset arp anti-attack statistics check user-bind interface interface-type interface-number,清除由于不匹配绑定表而丢弃的ARP报文计数。
- 执行命令reset arp anti-attack statistics rate-limit { global | interface interface-type interface-number },清除由于ARP报文超过速率限制阈值而被丢弃的计数。
配置对潜在的APR攻击行为发送告警
背景信息
为了使管理员能够实时的了解设备上ARP运行情况,对潜在的攻击行为做出判断与应对措施,设备支持对潜在的攻击行为发送告警,实时记录ARP运行的异常情况。通过配置发送告警的时间间隔,可以减少告警发送的数量,以避免ARP攻击时造成海量告警信息。
说明:该配置只对以下告警生效:
- SECE_1.3.6.1.4.1.2011.5.25.165.2.2.2.4 hwARPSDaiDropALarm
- SECE_1.3.6.1.4.1.2011.5.25.165.2.2.2.5 hwARPGlobleSpeedLimitALarm
- SECE_1.3.6.1.4.1.2011.5.25.165.2.2.2.8 hwARPMissGlobleSpeedLimitALarm
- SECE_1.3.6.1.4.1.2011.5.25.165.2.2.2.3 hwARPSPacketCheck
- SECE_1.3.6.1.4.1.2011.5.25.165.2.2.2.1 hwARPSGatewayConflict
- SECE_1.3.6.1.4.1.2011.5.25.165.2.2.2.2 hwARPSEntryCheck
操作步骤
- 执行命令system-view,进入系统视图。
- 执行命令arp anti-attack log-trap-timer time,配置对潜在的ARP攻击行为发送告警的时间间隔。
缺省情况下,发送ARP告警时间间隔为0,即设备不发送ARP告警信息。
ARP安全FAQ
使能ARP网关冲突后,使用某MAC发送网关冲突ARP报文,再使用该MAC发送转发流量为何不通
ARP网关冲突功能检测到冲突的ARP报文后,会将具有该源MAC的报文转发全部禁止,三分钟后放开限制。
用户发送相同源IP的ARP请求报文,为何有时只能收到5pps速率的回应报文
设备对相同源IP的ARP报文做了默认限速,防止产生ARP攻击,缺省限速值为5pps。
如何配置防内网攻击
内网攻击主要是一些二层协议报文的攻击,最主要攻击手段就是利用ARP对设备进行攻击,影响用户上网,因此一般的内网防攻击,主要就是ARP防攻击,主要防攻击手段有:
- 严格学习ARP表项,是指设备只学习自己发送的ARP请求报文的应答报文:使用命令arp learning strict,配置全局严格学习ARP表项。
- ARP网关冲突的配置,防止用户冒充网关,导致其他用户无法上网:使用命令arp anti-attack gateway-duplicate enable,配置全局使能ARP网关冲突攻击功能。
- 为防止用户的报文不能正常的转发到网关或者被恶意攻击者窃听,设备可以配置发送免费ARP报文,定时更新用户ARP表项的网关MAC地址:使用命令arp gratuitous-arp send enable,配置全局使能发送免费ARP报文的功能。默认90s发送一次。
说明:如果启用了过多类似的安全措施,可能会影响设备性能。