- 論壇徽章:
- 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
> 得到這樣的結(jié)果:
> 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字節(jié)的包,包括源地址,目的地址和包發(fā)出的時間標簽)到目的地,當路徑上的第一個路由器(router)收到這個datagram時,它將TTL減1。此時,TTL變?yōu)?了,所以該路由器會將此datagram丟掉,并送回一個「ICMP time exceeded」消息(包括發(fā)IP包的源地址,IP包的所有內(nèi)容及路由器的IP地址),traceroute 收到這個消息后,便知道這個路由器存在于這個路徑上,接著traceroute 再送出另一個TTL是2 的datagram,發(fā)現(xiàn)第2 個路由器...... traceroute 每次將送出的datagram的TTL 加1來發(fā)現(xiàn)另一個路由器,這個重復的動作一直持續(xù)到某個datagram 抵達目的地。當datagram到達目的地后,該主機并不會送回ICMP time exceeded消息,因為它已是目的地了,那么traceroute如何得知目的地到達了呢?
Traceroute在送出UDP datagrams到目的地時,它所選擇送達的port number 是一個一般應用程序都不會用的號碼(30000 以上),[color="#ff0000"]所以當此UDP datagram 到達目的地后該主機會送回一個「ICMP port unreachable」的消息,而當traceroute 收到這個消息時,便知道目的地已經(jīng)到達了。所以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
)
這個算法比原先老的算法更加的快。而且占用的網(wǎng)絡帶寬要小。但是,前提是需要router的支持。
Cisco的traceroute是用的老的算法。(從debug信息中可以看出來。)
Windows就不知道是什么用什么了。(沒有裝sniffer :()
本文來自ChinaUnix博客,如果查看原文請點:http://blog.chinaunix.net/u/1397/showart_16228.html |
|