在日常的网络探测和故障诊断中,常用到的两个工具是Ping和Tracert。随着网络结构的日益复杂和中间设备(包括但不仅限于路由器和防火墙)的广泛部署,以及为了实现安全要求而在路由器和防火墙上实施了严格的访问控制策略后,网络管理和维护人员想要正常使用Ping/Tracert对网络进行主动有效的探测和故障诊断往往受阻,甚至无法进行。Windows环境下的Ping/Tracert工具都是基于ICMP协议实现的,而在Linux或Cisco等网络设备中,Traceroute还使用了UDP协议,在此不做深入讨论。
确实,在网络中部署了路由器和防火墙后,如果不经过慎重规划和部署,就以“保障网络安全”为由,在实施访问控制策略时,过滤掉ICMP协议流,将给日后正常的网络探测和故障诊断带来极大的困难。ICMP协议数据包的类型多样,有些类型的数据包确实会给网络带来安全威胁,但只要正确部署和配置路由器及防火墙的安全策略,在允许必要的ICMP类型数据包的同时过滤特定的ICMP类型数据包,则既能够使得Ping/Tracert工具正常工作,给网络维护和故障诊断带来便利,又能有效保证网络和设备的安全运行。
在网络中部署了路由器和防火墙后,要使得Ping/Tracert正常应用,需要从两个方面进行考虑:第一,过境设备的Ping/Tracert数据流,需要路由器和防火墙放行;第二,到设备自身或接口的Ping/Tracert数据流,需要路由器和防火墙响应。笔者以Cisco设备为例,来说明如何配置路由器和防火墙的策略,允许必要的包括回显(echo)、回显应答(echo reply)、超时(time exceeded)和目标不可到达(unreachables)等四种类型的ICMP数据包,以保障Ping/Tracert命令的正常使用。
在Cisco路由器中,利用NAT结合ACL实现访问控制时,一般允许从内部接口的到外部接口的所有流量,包括ICMP。所以,需要在路由器的外部应用ACL,为允许必要的ICMP数据包进入网络,ACL中必须包含以下的允许规则:
Access-list 101 permit icmp any any echo
Access-list 101 permit icmp any any unreachable
Access-list 101 permit icmp any any time-exceeded
Access-list 101 permit icmp any any echo-reply
如果在路由器中实现了基于区域的IOS防火墙功能,此时可以把路由器当状态防火墙对待,建议对ICMP流量实施应用审查,则配置更为简单明了。另外,对于从外部或内部到自身接口的需要允许的ICMP流量,也通过防火墙策略(而不是ACL)配置实现即可,在此不列出具体命令了。还有一点要注意的是,作为一种防御DoS攻击的保护措施,默认情况下,路由器将ICMP 不可到达类型的流量限制到每500毫秒一个数据包。在12.1及更新的IOS镜像中,这个速率限制可通过命令”ip icmp rate-limit unreachable”进行配置。
 对于一般的状态化防火墙, 只要策略允许从内到外的所有流量,或对ICMP协议实施了应用审查,Ping/Tracert就能够正常运转,无需额外的策略配置。但是从外到内的Ping/Tracert则需要配置策略以放行流量。在PIX/ASA防火墙中,默认情况下,从外向内的ICMP流量被禁止,从内向外的ICMP流量允许通过,但返回包却被禁止。要改变这一默认行为,需要配置例外的允许策略以放行必要的ICMP类型数据包。此外,可通过命令”icmp unreachable rate-limit n burst-size n ”对ICMP不可到达类型的流量进行必要限制,还可以在防火墙上启用针对ICMP的防DoS功能。要允许穿越防火墙的特定的ICMP流量,配置命令如下:
Object-group icmp-type Permit-ICMPType
Icmp-object echo
Icmp-object unreachable
Imcp-object time-exceeded
Icmp-object echo-reply
Access-list inbound permit icmp any any object-group Permit-ICMPType
access-group inbound in interface outside
允许到防火墙自身接口特定的ICMP类型流量,在则命名接口上的配置命令为:
icmp permit 0.0.0.0 0.0.0.0 echo
icmp permit 0.0.0.0 0.0.0.0 echo-reply
icmp permit 0.0.0.0 0.0.0.0 unreachable
icmp permit 0.0.0.0 0.0.0.0 time-exceeded
icmp deny 0.0.0.0 0.0.0.0 
在实际的网络环境中,如果路由器或防火墙丢弃了ICMP超时数据包,那么Tracert会对该跃点显示一系列“*”字符。如果在近侧接口(靠近发起Tracert流的计算机端)上实施了ICMP过滤,那么该路由器或防火墙及其后续的设备上都会显示“*”字符直到完成30个(默认)跃点数尝试。如果Ping/Tracert工具工作正常,那么相应地另一工具即pathping也能正常工作。此外,Ping/Tracert目的为启用了Windows防火墙的主机,需关闭Windows防火墙或进行设置以使得其允许传入的特定类型的ICMP流量。

文章如转载,请注明转载自:http://www.5iadmin.com/post/913.html