對TCP/IP協議你一定非常熟悉,但是對ICMP協議你可能就一無所知了。ICMP協議是一個非常重要的協議,它對於網路安全具有極其重要的意義。下面我們就來談談ICMP協議。
什麼是ICMP協議

ICMP是“Internet Control Message Protocol”(Internet控制訊息協議)的縮寫。它是TCP/IP協議族的一個子協議,用於在IP主機、路由器之間傳遞控制訊息。控制訊息是指網路通不通、主機是否可達、路由是否可用等網路本身的訊息。這些控制訊息雖然並不傳輸使用者資料,但是對於使用者資料的傳遞起著重要的作用。
我們在網路中經常會使用到ICMP協議,只不過我們覺察不到而已。比如我們經常使用的用於檢查網路通不通的Ping命令,這個“Ping”的過程實際上就是ICMP協議工作的過程。還有其他的網路命令如跟蹤路由的Tracert命令也是基於ICMP協議的。骨頭語:上面有篇文章說PING利用的是UDP,現在又是ICMP?不過,看完全文,還是ICMP有理)
ICMP的重要性
ICMP協議對於網路安全具有極其重要的意義。ICMP協議本身的特點決定了它非常容易被用於攻擊網路上的路由器和主機。例如,在1999年8月海信集團“懸賞”50萬元人民幣測試防火牆的過程中,其防火牆遭受到的ICMP攻擊達334050次之多,佔整個攻擊總數的90%以上!可見,ICMP的重要性絕不可以忽視!
比如,可以利用作業系統規定的ICMP資料包最大尺寸不超過64KB這一規定,向主機發起“Ping of Death”(死亡之Ping)攻擊。“Ping of Death” 攻擊的原理是:如果ICMP資料包的尺寸超過64KB上限時,主機就會出現記憶體分配錯誤,導致TCP/IP堆疊崩潰,致使主機當機。
此外,向目標主機長時間、連續、大量地傳送ICMP資料包,也會最終使系統癱瘓。大量的ICMP資料包會形成“ICMP風暴”,使得目標主機耗費大量的CPU資源處理,疲於奔命。
應對ICMP攻擊
雖然ICMP協議給黑客以可乘之機,但是ICMP攻擊也並非無藥可醫。只要在日常網路管理中未雨綢繆,提前做好準備,就可以有效地避免ICMP攻擊造成的損失。


對於“Ping of Death”攻擊,可以採取兩種方法進行防範:第一種方法是在路由器上對ICMP資料包進行頻寬限制,將ICMP佔用的頻寬控制在一定的範圍內,這樣即使有ICMP攻擊,它所佔用的頻寬也是非常有限的,對整個網路的影響非常少;第二種方法就是在主機上設定ICMP資料包的處理規則,最好是設定拒絕所有的ICMP資料包。
設定ICMP資料包處理規則的方法也有兩種,一種是在作業系統上設定包過濾,另一種是在主機上安裝防火牆。具體設定如下:
1.在Windows 2000 Server中設定ICMP過濾
Windows 2000 Server提供了“路由與遠端訪問”服務,但是預設情況下是沒有啟動的,因此首先要啟動它:點選“管理工具”中的“路由與遠端訪問”,啟動設定嚮導。在其中選擇“手動配置伺服器”項,點選[下一步]按鈕。稍等片刻後,系統會提示“路由和遠端訪問服務現在已被安裝。要開始服務嗎?”,點選[是]按鈕啟動服務。
服務啟動後,在計算機名稱的分支下會出現一個“IP路由選擇”,點選它展開分支,再點選“常規”,會在右邊出現伺服器中的網路連線(即網路卡)。用滑鼠右鍵點選你要配置的網路連線,在彈出的選單中點選“屬性”,會彈出一個網路連線屬性的視窗,如圖1所示。

圖1
圖1中有兩個按鈕,一個是“輸入篩選器”(指對此伺服器接受的資料包進行篩選),另一個是“輸出篩選器”(指對此伺服器傳送的資料包進行篩選),這裡應該點選[輸入篩選器] 按鈕,會彈出一個“新增篩選器”視窗,再點選[新增]按鈕,表示要增加一個篩選條件。
在“協議”右邊的下拉選單中選擇“ICMP”,在隨後出現的“ICMP型別”和“ICMP編碼”中均輸入“255”,代表所有的ICMP型別及其編碼。ICMP有許多不同的型別(Ping就是一種型別),每種型別也有許多不同的狀態,用不同的“編碼”來表示。因為其型別和編碼很複雜,這裡不再敘述。
點選[確定]按鈕返回“輸入篩選器”視窗,此時會發現“篩選器”列表中多了一項內容(如圖2所示)。點選[確定]按鈕返回“本地連線”視窗,再點選[確定]按鈕,此時篩選器就生效了,從其他計算機上Ping這臺主機就不會成功了。