如何为Ping和Tracert开放安全策略
Ping和Tracert是基于ICMP协议的常用网络诊断工具。ICMP即互联网控制消息协议(Internet Control Message Protocol),用于在IP网络中传递控制消息,如报告错误、交换状态信息等。这些消息为管理员诊断网络故障提供帮助。
Ping
为了正常的网络诊断需要,你可能需要允许防火墙主动Ping上下游设备,也可能需要允许上下游设备的Ping穿越防火墙。最简单的安全策略如表7-4所示。
序号 |
名称 |
源安全区域 |
目的安全区域 |
源地址/地区 |
目的地址/地区 |
服务 |
动作 |
---|---|---|---|---|---|---|---|
101 |
Allow inbound traffic |
trust |
local |
10.1.1.10/24 |
10.1.1.1/24 |
icmp |
permit |
102 |
Allow outbound traffic |
local |
untrust |
10.1.2.1/24 |
10.1.2.10/24 |
icmp |
permit |
103 |
Allow transmit traffic |
trust |
untrust |
10.1.1.10/24 |
10.1.2.10/24 |
icmp |
permit |
104 |
Block all other icmp |
any |
any |
any |
any |
icmp |
deny |
但是,ICMP协议也经常被攻击者用来窥测网络或建立隐蔽通道。因此,如果你对安全性有更高的要求,可以自定义服务,仅开放特定类型的ICMP报文。
Ping需要使用两种类型的ICMP报文:Echo Request(Type 8)和Echo Reply(Type 0)。源端连续发送几个Echo Request报文,目的端收到之后,回送应答报文Echo Reply。如果在超时时间之内,应答报文到达源端,说明目的端可达。防火墙收到源端发出的Echo Request报文后,创建会话并转发报文,目的端返回的Echo Reply命中会话表转发。
一般来说,要允许内部特定主机Ping出站,以排除外部网络的故障。在某些情况下,也可能会允许受信任的合作伙伴Ping内部网络中的设备。
序号 |
名称 |
源安全区域 |
目的安全区域 |
源地址/地区 |
目的地址/地区 |
服务 |
动作 |
---|---|---|---|---|---|---|---|
101 |
Allow internal ping internet |
trust |
untrust |
10.1.1.10/24 |
10.1.2.10/24 |
icmp-type8 |
permit |
102 |
Allow internet ping internal |
untrust |
trust |
10.1.2.10/24 |
10.1.1.10/24 |
icmp-type8 |
permit |
105 |
Block all other icmp |
any |
any |
any |
any |
icmp |
deny |
以上示例中,icmp-type8不是防火墙预定义的服务,需要自定义。
Tracert
Tracert主要用来显示数据包到达目的主机所经过的路径。Tracert使用三种ICMP报文:Echo Reply(Type 0)、Echo Request(Type 8)和Time Exceeded(Type 11)。使用PC机发起Tracert的详细过程如图7-3所示。以PC探测路由器为例,PC在发起Tracert命令时,以本地IP地址为源,以路由器地址为目的地址,封装ICMP Echo Request报文。
首先发出的ICMP报文TTL=1,交换机收到以后,将TTL减1。此时,TTL=0,交换机丢弃报文,并回送一个Time Exceeded报文,源地址为交换机的地址。PC收到报文以后,就知道了自己的下一跳地址。
PC再次发出Echo Request报文,TTL=2。交换机收到以后,将TTL减1,并转发给防火墙。防火墙再减1,TTL=0。防火墙丢弃报文,并回送一个Time Exceeded报文,源地址为防火墙的地址,载荷为PC发出的Echo Request报文。PC收到报文以后,就知道了第二跳的地址。
PC重复这个过程,直到Echo Request报文到达真正的目的地址。此时,路由器回送Echo Reply报文给PC。
在Tracert过程中,源端发出Echo Request,目的端返回Echo Reply,会话建立和匹配的过程与Ping一样。对于探测路径中间设备返回的Time Exceeded报文,防火墙会提取载荷中的原始报文来匹配会话表。在状态检测机制下,你只需要为Tracert发起方向配置安全策略即可。也就是说,按照表7-5为Ping开放安全策略之后,Tracert业务也可以正常访问了。
需要说明的是,以上工作过程仅适用于Windows系统下的Tracert。UNIX-like操作系统中对应的工具是Traceroute。Traceroute默认使用UDP报文探测目的地址,并且故意选择33434~33534之间的目的端口(通常首次探测使用33434,第二次使用33435,以此类推)。因为这些端口并不存在,目标主机收到报文以后,会回送一个端口不可达的报文(Port Unreachable,ICMP type 3 code 3)。很多网络设备的处理方式与UNIX-like操作系统类似,例如华为防火墙、交换机产品,即以UDP报文发起探测。一些UNIX-like操作系统的Traceroute命令也提供了参数选项,可以使用ICMP Echo Request或者其他协议报文发起探测。
网络工程师在定位故障时,既可能使用基于ICMP探测的Tracert,也可能使用基于UDP探测的Traceroute。因此,你还需要放行探测发起方的UDP 33434-33534报文。完整的安全策略如表7-6所示。
序号 |
名称 |
源安全区域 |
目的安全区域 |
源地址/地区 |
目的地址/地区 |
服务 |
动作 |
---|---|---|---|---|---|---|---|
101 |
Allow internal ping router |
trust |
untrust |
192.168.1.0/24 |
10.10.10.10/32 |
icmp-type8 |
permit |
102 |
Allow router ping internal |
untrust |
trust |
10.10.10.10/32 |
192.168.1.0/24 |
icmp-type8 |
permit |
103 |
Allow internal tracert router |
trust |
untrust |
192.168.1.0/24 |
10.10.10.10/32 |
udp: 33434-33534 |
permit |
104 |
Allow router tracert internal |
untrust |
trust |
10.10.10.10/32 |
192.168.1.0/24 |
udp: 33434-33534 |
permit |
105 |
Block all other icmp |
any |
any |
any |
any |
icmp |
deny |
关于Tracert不得不说的几句话:
不同操作系统、不同厂家网络设备的Tracert功能实现存在细微的差异,以上安全策略仅考虑了最主流的产品实现。
出于安全性考虑,网络设备不一定会回应Tracert探测。以华为防火墙为例,其默认不发送ICMP Time Exceeded报文(Tracert结果显示为*),发送ICMP端口不可达报文的功能也可以使用命令关闭。