FWSM 允許ICMP 所有類型包通過及原理

 

客戶反應使用聯通3G觀看浙江手機臺的視頻直播和點播速度都很慢,首先想做一下簡單的路由跟蹤一下聯通線路。但是第一步就卡住了,發現輸入tracert –d 124.160.31.113 時出現瞭如下圖:

clip_image001

本文檔不討論後續的解決過程,主要解決跟蹤時出現*的問題,以及深層次的討論出現問題的原因。

一、首先說明一下網絡環境

Host4--------->FWSM------>MSFC----->F5--------->Internet

二、解決過程

1、在host4上抓包,抓取traert 的過程

clip_image003

發現只有最後一條有回包,那中間節點的包是哪裏丟了呢?

2、檢查FWSM上的ACL是否阻止了ICMP數據包通通過。排除了ACL這個原因,這時大意了,沒有查看防火牆的日誌,就直接排除了問題出在FWSM上。

3、MSFC上只轉發,沒有做任何限制,直接排除問題。

4、這時以爲問題出現在F5上,其實不是,看tracert時抓的包

clip_image005

發現各節點有針對echo request 回time exceed 包。那問題也不出在F5。

5、這下糾結了,吃過中飯時,想到已對F5,FWSM的日誌監控。回來後馬上看日誌,如下圖

clip_image007

問題找到 no matching session ,發現是FWSM丟棄了各個節點響應的包。但是我明明已請允許ICMP所有類型數據包通過,怎麼還會丟棄呢?

Cisco官方是這樣解釋的:

 

ACL allows only these return messages through the firewall when an inside user pings to an outside host. The

other types of ICMP status messages might be hostile and the firewall blocks all other ICMP messages.

解決方法是:

Another option is to configure ICMP inspection. This allows a trusted IP address to traverse the firewall and

allows replies back to the trusted address only. This way, hosts on all inside interfaces can ping hosts on the

outside and the firewall allows the replies to return. This also gives you the advantage of monitoring the

ICMP traffic that traverses the firewall. In this example, icmp inspection is added to the default global

inspection policy.

For example:

policy?map global_policy

class inspection_default

inspect icmp

6、解決方法很簡單

只需要輸入一條命令:

clip_image008

接着再測試就OK了。

在排查過程中在系統中使用tracertoute 進行跟蹤除最後一跳顯示*,前幾跳全有顯示,如下圖:

clip_image010

正好與tracert相反,這是爲什麼呢?

看看抓到的包吧

clip_image012

顯示節點是因爲traceroute 默認是使用UDP協議發送包,這樣就在FWSM存在session,所以防火牆通話通過。最後一跳不通是對端開了防火牆不允許UDP協議數據包通過~

當然traceroute 也可以使用ICMP和TCP協議的包來追蹤的。參數如下:

clip_image014

 

Traceroute原理:

traceroute是利用ICMP包的TTL域來探測的。首先,traceroute首先發送一個TTL爲1的ipdatagram(實際上是3個ip包),當包到達第一個路由器時,路由器將TTL減1,當TTL小於1時,路由器會把這個ip datagram丟掉,然後回送一個icmp time exceed的消息,traceroute受到這個消息後就知道這個路由器在存在於路徑上,接着tracerout再發送一個ttl爲2的ip datagram,發現第二個路由器……………….一直到ip datagram到達目的地址。traceroute怎麼知道所發的datagram到達目的地址了?很簡單,traceroute所發送的包是一個udp包,並且使用的端口是一個一般應用程序都不會用到的端口(一般在30000以上),所以當發送的datagram到達目的地址時,目的地址會回送一個icmp port unreachable的消息,traceroute受到這個消息後就知道datagram已經發送到目的地址。

參考:

Traceroute程序的設計是利用ICMP及IP header的TTL(Time To Live)欄位(fiel d)。首先,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 以上),所以當此UDP datagram 到達目的地後該 主機會送回一個「ICMP port unreachable」的消息,而當traceroute 收到這個消息時 ,便知道目的地已經到達了。所以traceroute 在Server端也是沒有所謂的Daemon 程式 。

Traceroute提取發 ICMP TTL到期消息設備的IP地址並作域名解析。每次 ,Traceroute都打印出一系列數據,包括所經過的路由設備的域名及 IP地址,三個包每次來回所花時間。  Traceroute 有一個固定的時間等待響應(ICMP TTL到期消息)。如果這個時間過了,它將打印出一系列的*號表明:在這個路徑上,這個設備不能在給定的時間內發出ICMP TTL到期消息的響應。然後,Traceroute給TTL記數器加1,繼續進行。

 

ICMP主要類型

Echo Request和Reply(類型8和0):

允許Echo Request消息出站以便於內部用戶能夠PING一個遠程主機。阻止入站Echo Request和出站Echo Reply可以防止外部網絡的主機對內部網絡進行掃描。如果您使用了位於外部網絡的監視器來監視內部網絡,就應該只允許來自於特定外部IP的Echo Request進入您的網絡。限制ICMP Echo包的大小可以防止“Ping Floods”***,並且可以阻止那些利用Echo Request和Reply來“偷運”數據通過防火牆的***程序。

Destination unreachable (類型3):

允許其入站以便於內部網用戶可以使用traceroute。需要注意的是,有些***者可以使用它來進行鍼對會話的DoS***,如果您曾經歷過類似的***,也可以阻止它。阻止出站的ICMP Destination unreachable消息,因爲它可能會泄漏內部網絡的結構。不過有一個例外,對於那些允許外部網絡通過TCP訪問的內部主機(如位於DMZ區的Web 服務器)發出的Destination unreachable,則應該允許它通過。爲了能夠支持“Path MTU Discovery”,您應該允許出站的“Packet Too Big”消息(類型3,代碼4)到達那些主機。

Source quench(類型4):

阻止其入站,因爲它可以作爲一種DoS***,能夠降低發送者的發送速度。允許其出站以便於內部主機能夠控制發送端發送數據的速度。有些防火牆會忽略所有直接發送到防火牆端口的Source Quench消息,以防止針對於防火牆的DoS***。

Redirect(類型5,9,10):

Redirect、Router announcement、 Router selection(類型5,9,10):這些消息都存在潛在危險,因爲它們可以用來把數據重定向到***者的機器。這些消息都應該被阻止。

TTL exceeded(類型11):

允許其進站以便於內部用戶可以使用traceroute。“firewalking”使用很低的TTL值來對網絡進行掃描,甚至可以通過防火牆對內網進行掃描,所以應該禁止其出站。一些防火牆可以阻止TTL值小於設定值的數據包進入防火牆。

Parameter problem(類型12):

禁止其入站和出站。通過使用一個能夠進行數據包一致性檢查的防火牆,錯誤和惡意的數據包都會被阻塞。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章