- 论坛徽章:
- 0
|
怎么允许traceroute和ping通过而拒绝其他的ICMP包?
我这样做ACL:
> access-list 101 permit icmp any any echo
> access-list 101 permit icmp any any echo-reply
> access-list 101 permit icmp any any traceroute
> access-list 101 deny icmp any any
> 得到这样的结果:
> C:Documents and SettingsAdministrator>tracert 202.103.0.117
>
> Tracing route to ns1.hbwhptt.net.cn [202.103.0.117]
> over a maximum of 30 hops:
>
> 1
> 2 * * * Request timed out.
> 3 * * * Request timed out.
> 4 * * * Request timed out.
> 5 10 ms 10 ms 10 ms ns1.hbwhptt.net.cn [202.103.0.117]
>
> Trace complete.
>
> C:Documents and SettingsAdministrator>
对这个问题的分析如下:
我用cisco的router做了一下。
*Mar 2 18:24:38.779: IP: s=1.1.12.1 (Serial2/0.12), d=1.1.23.3 (Serial2/0.23), len 56, access denied
*Mar 2 18:24:38.779: ICMP type=3, code=3
*Mar 2 18:24:41.819: IP: s=1.1.12.1 (Serial2/0.12), d=1.1.23.3 (Serial2/0.23), len 56, access denied
*Mar 2 18:24:41.819: ICMP type=3, code=3
Traceroute的时候要用到 type=3 ,code=3的icmp packet。
=====================================================
ICMP Fields:
Type
3
Code
0 = net unreachable;
1 = host unreachable;
2 = protocol unreachable;
3 = port unreachable;
4 = fragmentation needed and DF set;
5 = source route failed.
(From RFC792)
======================================================
Traceroute程序的设计是利用ICMP及IP header的TTL(Time To Live)栏位(field)。首先,traceroute送出一个TTL是1的IP datagram(其实,每次送出的为3个40字节的包,包括源地址,目的地址和包发出的时间标签)到目的地,当路径上的第一个路由器(router)收到这个datagram时,它将TTL减1。此时,TTL变为0了,所以该路由器会将此datagram丢掉,并送回一个「ICMP time exceeded」消息(包括发IP包的源地址,IP包的所有内容及路由器的IP地址),traceroute 收到这个消息后,便知道这个路由器存在于这个路径上,接着traceroute 再送出另一个TTL是2 的datagram,发现第2 个路由器...... traceroute 每次将送出的datagram的TTL 加1来发现另一个路由器,这个重复的动作一直持续到某个datagram 抵达目的地。当datagram到达目的地后,该主机并不会送回ICMP time exceeded消息,因为它已是目的地了,那么traceroute如何得知目的地到达了呢?
Traceroute在送出UDP datagrams到目的地时,它所选择送达的port number 是一个一般应用程序都不会用的号码(30000 以上),[color="#ff0000"]所以当此UDP datagram 到达目的地后该主机会送回一个「ICMP port unreachable」的消息,而当traceroute 收到这个消息时,便知道目的地已经到达了。所以traceroute 在Server端也是没有所谓的Daemon。(From Juniper Document)
因此,traceroute要知道这个IP是可达的需要
[color="#ff0000"]permit icmp any any unreachable
另外:
access-list 101 permit icmp any any traceroute 可以不需要。
这里使用的icmp traceroute是一种新的 traceroute的算法。(
http://www.rfc-editor.org/rfc/rfc1393.txt
)
这个算法比原先老的算法更加的快。而且占用的网络带宽要小。但是,前提是需要router的支持。
Cisco的traceroute是用的老的算法。(从debug信息中可以看出来。)
Windows就不知道是什么用什么了。(没有装sniffer :()
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/1397/showart_16228.html |
|