首先对ICMP报文内容进行简单的介绍:
ICMP(Internet Control Message Protocol)报文的内容主要由报头和可选的数据负载组成,其结构相对简单,旨在携带网络层的控制信息和差错报告。下面是ICMP报文的一般格式:
-
报头(Header):
- 类型(Type): 1字节,定义了ICMP报文的类型,取值范围从0到255,每个值对应一种特定的ICMP消息类型,如Echo Request (8)、Echo Reply (0)、Destination Unreachable (3)等。
- 代码(Code): 1字节,为类型提供附加信息,进一步区分相同类型内不同情况的子类型,如在Destination Unreachable (类型3) 中,代码可以指明不可达的具体原因。
- 校验和(Checksum): 2字节,覆盖整个ICMP报文,用于检测报文在传输过程中的完整性。计算方法是对ICMP报文的头部和数据执行二进制反码求和。
-
数据负载(Data):
- 这部分是可变长度的,其内容和格式取决于ICMP报文的类型和代码。例如:
- 对于Echo Request/Reply(类型8/0),数据负载通常包含发送方放置的信息,如发送时间戳或者自定义数据,以帮助进行回声测试或测量往返时间。
- 对于Destination Unreachable (类型3),可能包含原始无法送达的数据报文的IP头部以及前8字节的数据,以便源主机知道哪个数据包未送达及原因。
- 对于Time Exceeded (类型11),也可能携带导致TTL过期的数据包的部分内容,以供诊断。
- 这部分是可变长度的,其内容和格式取决于ICMP报文的类型和代码。例如:
ICMP报文由于其轻量级和功能多样性,在网络故障排除、路径探测、以及网络性能监测等方面发挥着重要作用。
ICMP报文内容 | ||
Type | Code | 描述 |
0 | 0 | Echo Reply(回显应答),用于响应Echo Request,常用于ping命令以检测目标的可达性。 |
3 | 0 | Destination Unreachable - Net Unreachable(目标不可达 - 网络不可达),表示无法到达目标网络。 |
3 | 1 | Destination Unreachable - Host Unreachable(目标不可达 - 主机不可达),表示目标主机不存在或不可达。 |
3 | 2 | Destination Unreachable - Protocol Unreachable(目标不可达 - 协议不可达),目标主机不支持请求数据报中的协议。 |
3 | 3 | Destination Unreachable - Port Unreachable(目标不可达 - 端口不可达),目标主机上的端口没有进程监听。 |
5 | 0 | Redirect - For Network(重定向 - 对网络),路由器通知主机应该使用另一个网关。 |
8 | 0 | Echo Request(回显请求),用于测试目的地址的可达性和响应时间,是ping命令的核心部分。 |
11 | 0 | Time Exceeded(超时),当IP数据包生存时间(TTL)减少到0时产生。 |
12 | 0 | Parameter Problem(参数问题),指出IP头或数据报中有错误的参数。 |
4 | 0 | Source Quench(源抑制),已废弃,在旧版TCP/IP中用于拥塞控制,现已被更现代的机制替代。 |
13 | 0 | Timestamp Request(时间戳请求),请求接收方填充当前时间并回送。 |
14 | 0 | Timestamp Reply(时间戳应答),回应Timestamp Request,携带接收和发送时间戳。 |
15 | 0 | Information Request(信息请求),主要用于早期ARPANET,现在很少使用。 |
16 | 0 | Information Reply(信息应答),响应Information Request,同样很少使用。 |
ICMP回显(Internet Control Message Protocol Echo)是ICMP协议中的一部分,主要用于网络诊断和探测。它包含两种类型的报文:ICMP回显请求(Echo Request)和ICMP回显应答(Echo Reply)。
ICMP回显请求(Echo Request)
- 类型(Type): 8
- 代码(Code): 0
- 用途:由源主机发送给目标主机,用于测试目标主机是否可达以及网络连接状况。
- 数据内容:请求报文的数据部分可以包含任何数据,通常用于填充或调整数据包的大小,以便进行网络测试或测量延迟等。数据部分还包含一个16位的标识符(Identifier ID)和一个16位的序列号(Sequence Number Seq),标识符用于匹配请求和响应,序列号用于区分多个请求。
ICMP回显应答(Echo Reply)
- 类型(Type): 0
- 代码(Code): 0
- 用途:作为对ICMP回显请求的响应,由目标主机发回给源主机,确认收到了请求并提供响应。
- 数据内容:应答报文的数据部分会复制请求报文中的数据内容,包括标识符和序列号,使得源主机可以确认收到的响应与之前发送的请求相对应。
ICMP回显最常见的应用实例是ping命令。当在命令行输入ping 目标IP地址
时,系统就会发送一个ICMP回显请求到指定的IP地址,如果目标可达,它会回复一个ICMP回显应答。通过测量请求与应答之间的时间差,可以评估网络延迟,而是否收到应答则可以用来判断目标主机是否在线或可达。
TTL(Time to Live)超时响应是ICMP(Internet Control Message Protocol)中的一种错误消息类型,具体为类型为11、代码为0的ICMP报文,称为“Time Exceeded”。这种报文在网络中被用来通知数据包的发送方,数据包在到达目的地之前因为生存时间耗尽而被丢弃了。
当一个IP数据包在网络中传输时,它会携带一个TTL值,这个值是一个8位的无符号整数,初始值由发送方设置,通常操作系统会有默认值,比如Linux默认是64,Windows默认是128。每经过一个路由器,这个TTL值会被减1。如果TTL减到0,路由器就不会再转发这个数据包,而是丢弃它,并且生成一个ICMP Time Exceeded消息发回给数据包的源头,表明数据包没有达到目的地就“死亡”了。
TTL超时响应在以下场景中常见:
- 网络诊断:使用traceroute/tracert命令时,就是故意设置IP数据包的TTL值从1开始递增,通过接收ICMP Time Exceeded消息来确定数据包到达每一跳路由器所需的时间以及路径。
- 检测环路:TTL有助于防止数据包在网络中无限循环。如果一个数据包因为路由错误而在网络中不断循环,每次经过路由器TTL都会减1,最终会因为TTL减到0而被丢弃,并触发TTL超时响应,这可以视为一种网络健康检查机制。
- 安全策略:一些安全设备或策略会利用TTL超时作为一种防御机制,比如通过降低传出数据包的TTL值,可以限制数据包在网络中的传播范围,从而增加攻击者探测或利用网络结构的难度。
因此,TTL超时响应是网络通信中一个重要且实用的机制,既有助于维护网络的稳定运行,也方便网络诊断和安全防护。
-
不响应ICMP回显(Echo)请求: ICMP回显请求通常指的是“ping”操作,用来测试目标主机是否可达。当配置系统或网络设备“不响应ICMP回显请求”,意味着当收到ping这样的ICMP Echo Request时,系统不会返回ICMP Echo Reply。这样做可以提高安全性,因为外部用户无法轻易验证系统是否存在或在线,从而增加了攻击者收集网络信息的难度。
-
限制ICMP TTL超时(Time Exceeded)响应: 当一个数据包在网络中传输时,其头部包含一个TTL(Time to Live)字段,用于限制数据包在网络中的生存时间,避免循环路由等问题。每当数据包经过一个路由器,TTL值就会减1,当TTL减至0时,路由器会丢弃该数据包并通常会向数据包的发送方发送一个ICMP Time Exceeded消息。如果你配置系统“限制ICMP TTL超时响应”,则意味着即使数据包因TTL耗尽被丢弃,也不一定发送这种错误通知,这同样可以作为一种安全措施,因为这减少了对外部潜在攻击者的信息暴露。
使用ACL(Access Control List ,访问控制列表)限制ICMP TTL超时响应以及ICMP Echo Reply响应:
1.创建ACL规则:首先,创建一个ACL规则来匹配并拒绝发送ICMP Time Exceeded和ICMP Echo Reply消息。
system-view
acl number 3000
rule 1 deny icmp icmp-type information-reply (rule 1 deny icmp icmp-type 16 0
)
rule 2 deny icmp icmp-type ttl-exceeded(rule 2 deny icmp icmp-type 11 0
)
-
INTEGER<2000-2999>:这是华为设备中基本访问控制列表(Basic ACL)的编号范围。基本ACL主要依据数据包的源IP地址来过滤流量,常用于简单的网络安全控制,比如限制特定IP地址段的网络访问。
-
INTEGER<3000-3999>:这个范围对应的是高级访问控制列表(Advanced ACL)。与基本ACL相比,高级ACL提供了更丰富的匹配条件,除了源IP地址外,还可以根据目的IP地址、端口号等信息来过滤流量,适用于更复杂、细致的访问控制策略。
-
INTEGER<4000-4999>:这个范围用于指定第二层ACL(L2 ACL)。L2 ACL主要基于MAC地址、VLAN ID或者二层协议类型等第二层信息来过滤数据包,适用于需要在链路层实施访问控制的场景,比如在交换机上基于MAC地址阻止某些设备间的通信。
2.应用ACL到接口:将配置好的ACL应用到出方向的接口上,以阻止这些特定的ICMP响应离开设备
interface GigabitEthernet 0/0/1
traffic-filter outbound acl 3000
这样配置后,从该接口出去的ICMP TTL超时响应和ICMP Echo Reply响应将会被拒绝,从而达到限制这类ICMP报文的目的。请注意,这样的配置也可能会影响网络故障排查和某些依赖ICMP响应的应用,因此在实施前应充分考虑网络管理和维护的需求。
还可以使用专门命令限制ICMP TTL超时响应
华为设备还提供了更直接的命令来处理ICMP TTL超时的响应,例如直接丢弃TTL=1的ICMP报文:
system-view
icmp ttl-exceeded drop
注意:具体命令可能根据设备型号和操作系统的不同而有所变化,具体可查阅官方产品文档或在评论区留言讨论