ICMP重定向原理

2021-07-11 07:33:32 字數 3643 閱讀 8672

icmp重定向原理

icmp重定向報文是icmp控制報文中的一種。在特定的情況下,當路由器檢測到一台機器使用非優化路由的時候,它會向該主機傳送乙個icmp重定向報文,請求主機改變路由。路由器也會把初始資料報向它的目的地**

icmp應用分析-icmp重定向

icmp雖然不是路由協議,但是有時它也可以指導資料報的流向(使資料流向正確的閘道器)。icmp協議通過icmp重定向資料報(型別5、**0:網路重定向)達到這個目的。

圖1  icmp重定向

當路由器r1收到此arp請求包後,它首先用arp應答包回答主機pc的arp請求(通知主機pc:路由器r1自己的e0介面的mac位址)。然後, 它(路由器r1)將此icmp請求**到路由器r2的e0介面:192.168.1.254(要求路由器r1正確配置了到網路 192.168.3.0/24的路由)。此外,路由器r1還要傳送乙個icmp重定向訊息給主機pc,通知主機pc對於主機pc請求的位址的閘道器是: 192.168.1.254。

路由器r2此時會傳送乙個arp請求訊息請求主機pc的mac位址,而主機pc會傳送arp應答訊息給路由器r2。最後路由器r2通過獲得的主機pc的mac位址資訊,將icmp應答訊息傳送給主機pc。

icmp重定向包的內容如圖2、圖3所示。注意圖2 icmp包頭中的type和code欄位的值和含義。

圖2  icmp重定向包

圖3  icmp重定向包(續)

如果還有後續的icmp請求包,則除了arp訊息,所有的事件序列和上面的敘述相同。如下圖所示。

何時重定向

a)  資料報的入介面和路由後的指定的出介面是同乙個介面。

c)  資料報非源路由的(這種情況應該比較少見了,源路由多見於token ring)。

d)  系統開啟重定向功能。

重定向報文的處理

主機和路由器對於重定向報文有不同的處理原則。

路由器一般忽略icmp重定向報文。而主機對於重定向報文的感知取決於作業系統。以windows為例,對於閘道器返回的icmp重定向報文,windows會在主機的路由表中新增一項主機路由。那麼以後對於這個目的位址資料報,主機會將其直接送往重定向所指示的路由器。支援重定向報文處理的還有許多的unix系統,如freebsd的諸多版本等。這類主機收到icmp重定向報文後所採取的行動基本都是增加主機路由。顯然,修改預設閘道器是不合理的。

同時,有的作業系統對於重定向報文是不做任何處理而直接丟棄(雖然也同樣經由網路層向上遞交),比如sun的某些系統。

某些主機可以啟動路由器功能,如freebsd的某些版本和win32系統。這時主機的行為要特殊一些,會施加一些特殊條件來判斷是否處理該重定向報文,這是依系統而異的。比如bsd,它檢查重定向報文的條件之一是「重定向報文不能讓主機本身作為閘道器」。

icmp重定向的利與弊

icmp重定向使得客戶端的管理工作大大減少,使得對於主機的路由功能要求大大降低。該功能把所有的負擔推向路由器學習。但是與此同時icmp重定向也有很多弊端。

就重定向本身的機制來說,icmp重定向增加了網路報文流量,因為主機的報文總是要在閘道器的直連網段上重複傳輸。那麼更進一步如果主機的作業系統支援重定向(比如windows)會如何?如圖1,而主機收到重定向報文,會在自己的路由表中產生指向b的主機路由,經由1.1.1.2。事實上,主機這樣可能會引起兩點顯著問題。

其一是引起效能問題,例如:有一台大型的伺服器,要處理數十個子網下的數千台主機的業務。如果要支援重定向,那麼伺服器將會維護乙個龐大的充滿主機路由的路由表。這是一筆很大的開銷。可能很大程度上降低服務效能,甚至導致網路服務癱瘓。

其二是可能埋下安全隱患。利用這點可以進行攻擊和網路竊聽。如果目某主機a支援icmp重定向,那麼主機b發乙個imcp重定向給它,以後它發出的所有到指定位址的報文都會**主機b,這樣b就可以達到竊聽目的了。當然,拿windows作業系統來說,它會對icmp報文進行檢查,如果這個重定向不是閘道器傳送的,會被直接丟棄。不過偽造乙個閘道器的資料報很容易。另外,如果刻意偽造許多虛假的icmp重定向報文,主機路由表就可能被改的亂七八糟。

icmp重定向的避免與消除

針對上述icmp重定向引發的問題,我們可以採用一些手段來避免或補救。我們討論的前提條件是不改變網路拓撲。

關掉ip redirects

在路由器上取消ip redirect。這樣路由器不向主機傳送icmp重定向報文。或者當起動hsrp或vrrp的時候,icmp重定向會被關掉。這是相當於一台路由器作備份。有效的避免出現icmp重定向。該方案是看似根本上解決了問題,但是只是icmp重定向報文不會發回主機,解決了安全和主機負荷的問題,網路上的流量卻沒有減少。

不同掩碼長度子網劃分

使用子介面來改變icmp重定向條件。還是如圖1,我們如下配置ip。

hosta: ip addr = 1.1.1.12/24  default gateway = 1.1.1.2/24

rt1  e0/1 ip addr = 1.1.1.254/25

rt2  e0/1 ip addr = 1.1.1.2/24   e0/1.1(sub inte***ce) = 1.1.1.250/25

這種方法的基本思想是:破壞icmp重定向的條件,哄騙路由器認為使用者資料報的入介面和出介面不同。從hosta來看,rt1和rt2都在和自己直連的網段。如此配置從rt2來看,使用者資料的入介面和出介面不在同一網段上,資料從1.1.1.2進入,從1.1.1.250路由出去,使用者資料純粹的被路由出去,這樣就破壞了icmp重定向的條件。而且rt2會認為自己的子介面e0/1.1和rt1的e0/1介面是在同一子網的。這種方式要求配置的技巧性比較強,但也並沒有減少網路資料流量,只是在安全性和主機負荷上有所改進。

使用訪問控制列表(acl)

在高階的acl中可以根據報文型別進行過濾,在我司裝置上如下配置:

[quidway]acl number 100 match-order auto

[quidway-acl-adv-100]rule deny icmp fragment icmp-type net-redirect

[quidway-ethernet6/0]firewall packet-filter 100 outbound

在出界面上繫結acl,過濾掉報文。這樣做實事上減少了網路流量,保證了主機的安全性,減輕主機負荷。但是會消耗路由器的處理資源。

**arp

**arp的方法比較直接,乾脆在rt1上啟動**arp,讓自己的。主機廣播arp請求後,閘道器rt1返回rt2的介面mac位址。這種方法相當於修改了主機的預設閘道器。其後所有的流量都被導向rt2。這樣可能會影響原來的業務需求。所以這種方法是不可取的。

我們走到**了

icmp重定向的原理在很多文件裡都有講解,但是對於重定向而引發的問題(如本文列舉網路流量問題、主機安全問題以及主機負荷問題)談論比較少。在現實

組網中,許多問題都雖然看似細微,事實上卻足以導致致命的錯誤。比如在某專案中,由於某伺服器對於icmp重定向不提供支援,而導致路由裝置把所有的報文都送上cpu,進行**,最終致使該網路裝置宕機。

icmp重定向實驗ensp icmp重定向實驗

一 實驗拓撲圖 二 實驗要求 三 實驗步驟配置 1 配置r0 r1 r2 r3的ip位址 r0 int f0 0 ip add 10.1.1.1 255.0.0.0 no sh r1 int f0 0 ip add 10.2.2.2 255.0.0.0 no sh r2 int f0 0 ip ad...

ICMP 重定向攻擊和ICMP不可達報文攻擊

最近一直在研究各種畸形報文和一些特殊的報文,並且需要根據這些攻擊特點進行相應的資料報偵測與攔截。一切其他的攻擊以後有時間再來寫吧。當我研究到了icmp重定向和不可達報文攻擊的時候,覺得很有趣,icmp協議在我們網路中經常存在於ping 中,用於測試兩台主機之間的網路連通性,以前也聽說過這兩種形態的攻...

mysql協議包偽造 偽造重定向ICMP資料報

當路由收到 ip 資料報,發現資料報的目的位址在路由表上卻不存在時,它傳送 icmp 重定向報文給源傳送方,提醒它接收的位址不存在,需要重新傳送給其他位址進行查詢。在重定向 icmp 報文中,型別值為 5,值為 0。偽造重定向 icmp 資料報需要使用 netwox 工具中編號為 86 的模組。例項...