ICMP的全名是Internet Control and Message Protocal即因特網控制消息/錯誤報文協議
這個協議主要是用來進行錯誤信息和控制信息的傳遞
例如著名的Ping和Tracert工具都是利用ICMP協議中的ECHO request報文進行的(請求報文ICMP ECHO類型
代碼
應答報文ICMP ECHOREPLY類型
代碼
)
ICMP協議有一個特點
它是無連結的
也就是說只要發送端完成ICMP報文的封裝並傳遞給路由器
這個報文將會象郵包一樣自己去尋找目的地址
這個特點使得ICMP協議非常靈活快捷
但是同時也帶來一個致命的缺陷
易偽造(郵包上的寄信人地址是可以隨便寫的)
任何人都可以偽造一個ICMP報文並發送出去
偽造者可以利用SOCK_RAW編程直接改寫報文的ICMP首部和IP首部
這樣的報文攜帶的源地址是偽造的
在目的端根本無法追查
(攻擊者不怕被抓那還不有恃無恐?)根據這個原理
外面出現了不少基於ICMP的攻擊軟件
有通過網絡架構缺陷制造ICMP風暴的
有使用非常大的報文堵塞網絡的
有利用ICMP碎片攻擊消耗服務器CPU的
甚至如果將ICMP協議用來進行通訊
可以制作出不需要任何TCP/UDP端口的木馬(參見相關文章)
既然ICMP協議這麼危險
我們為什麼不關掉它呢?
我們都知道
Win
在網絡屬性中自帶了一個TCP/IP過濾器
我們來看看能不能通過這裡關掉ICMP協議
桌面上右擊網上鄰居
>屬性
>右擊你要配置的網卡
>屬性
>TCP/IP
>高級
>選項
>TCP/IP過濾
這裡有三個過濾器
分別為
TCP端口
UDP端口和IP協議
我們先允許TCP/IP過濾
然後一個一個來配置
先是TCP端口
點擊
只允許
然後在下面加上你需要開的端口
一般來說WEB服務器只需要開
(www)
FTP服務器需要開
(FTP Data)
(FTP Control)
郵件服務器可能需要打開
(SMTP)
(POP
)
以此類推
接著是UDP
UDP協議和ICMP協議一樣是基於無連結的
一樣容易偽造
所以如果不是必要(例如要從UDP提供DNS服務之類)應該選擇全部不允許
避免受到洪水(Flood)或碎片(Fragment)攻擊
最右邊的一個編輯框是定義IP協議過濾的
我們選擇只允許TCP協議通過
添加一個
(
是TCP在IP協議中的代碼
IPPROTO_TCP=
)
從道理上來說
只允許TCP協議通過時無論UDP還是ICMP都不應該能通過
可惜的是這裡的IP協議過濾指的是狹義的IP協議
從架構上來說雖然ICMP協議和IGMP協議都是IP協議的附屬協議
但是從網絡
層結構上ICMP/IGMP協議與IP協議同屬一層
所以微軟在這裡的IP協議過濾是不包括ICMP協議的
也就是說即使你設置了
只允許TCP協議通過
ICMP報文仍然可以正常通過
所以如果我們要過濾ICMP協議還需要另想辦法
剛剛在我們進行TCP/IP過濾時
還有另外一個選項
IP安全機制(IP Security)
我們過濾ICMP的想法就要著落在它身上
打開本地安全策略
選擇IP安全策略
在這裡我們可以定義自己的IP安全策略
一個IP安全過濾器由兩個部分組成
過濾策略和過濾操作
過濾策略決定哪些報文應當引起過濾器的關注
過濾操作決定過濾器是
允許
還是
拒絕
報文的通過
要新建IP安全過濾器
必須新建自己的過濾策略和過濾操作
右擊本機的IP安全策略
選擇管理IP過濾器
在IP過濾器管理列表中建立一個新的過濾規則
ICMP_ANY_IN
源地址選任意IP
目標地址選本機
協議類型是ICMP
切換到管理過濾器操作
增加一個名為Deny的操作
操作類型為
阻止
(Block)
這樣我們就有了一個關注所有進入ICMP報文的過濾策略和丟棄所有報文的過濾操作了
需要注意的是
在地址選項中有一個鏡像選擇
如果選中鏡像
那麼將會建立一個對稱的過濾策略
也就是說當你關注any IP
>my IP的時候
由於鏡像的作用
實際上你也同時關注了my IP
>any IP
你可以根據自己的需要選擇或者放棄鏡像
再次右擊本機的IP安全策略
選擇新建IP過濾策略
建立一個名稱為ICMP Filter的過濾器
通過增加過濾規則向導
我們把剛剛定義的ICMP_ANY_IN過濾策略指定給ICMP Filter
然後在操作選框中選擇我們剛剛定義的Deny操作
退出向導窗口
右擊ICMP Filter並啟用它
現在任何地址進入的ICMP報文都會被丟棄了
雖然用IP sec能夠對ICMP報文進行過濾
不過操作起來太麻煩
而且如果你只需要過濾特定的ICMP報文
還要保留一些常用報文(如主機不可達
網絡不可達等)
IP sec策略就力不從心了
我們可以利用Win
的另一個強大工具路由與遠程訪問控制(Routing & Remote Access)來完成這些復雜的過濾操作
路由與遠程訪問控制是Win
用來管理路由表
配置VPN
控制遠程訪問
進行IP報文過濾的工具
默認情況下並沒有安裝
所以首先你需要啟用它
打開
管理工具
>
路由與遠程訪問
右擊服務器(如果沒有則需要添加本機)選擇
配置並啟用路由及遠程訪問
這時配置向導會讓你選擇是什麼樣的服務器
一般來說
如果你不需要配置VPN服務器
那麼選擇
手動配置
就可以了
配置完成後
主機下將出現一個IP路由的選項
在
常規
中選擇你想配置的網卡(如果你有多塊網卡
你可以選擇關閉某一塊的ICMP)
在網卡屬性中點擊
輸入篩選器
添加一條過濾策略
from:ANY to:ANY 協議:ICMP 類型:
:編碼:
丟棄
就可以了(類型
編碼
就是Ping使用的ICMP_ECHO報文
如果要過濾所有的ICMP報文只需要將類型和編碼都設置為
)
From:http://tw.wingwit.com/Article/os/xtgl/201311/9178.html