ICMP(Internet Control Message Protocol)Internet控制報文協議。它是TCP/IP協議簇的一個子協議,用於在IP主機、路由器之間傳遞控制消息。控制消息是指網絡通不通、主機是否可達、路由是否可用等網絡本身的消息。這些控制消息雖然並不傳輸用戶數據,但是對於用戶數據的傳遞起着重要的作用。
根據應用場景的不同,icmp報文被細分為如下的各種類型
從圖中可以看出 所有目標不可達的報文的type碼為3 而目標不可達又分為多種情況多種code
0網絡不可達 1 主機不可達 2 協議不可達......
所以type/code可以具體匹配對應的回應報文 3/1表示為主機不可達的icmp報文
type 0 code 0表示回應報文 屬於查詢類的ICMP報文 ,從大類早上分 ICMP的報文分為查詢類和錯誤類2個類別
目標不可達屬於錯誤類報文
我們發出的ping請求報文 對應的type為8 code為0
例1:想要禁止所有的icmp報文進入本機
iptables -t filter -I INPUT -p icmp -j REJECT
--icmp
例2:別人ping不到我們 我們可以ping別人(不考慮禁ping情況)
因為type為8的類型下只有1個code為0的類型 所以我們可以省略對應的code
ptables -t filter -I INPUT -p icmp -m icmp --icmp-type 8/0 -j REJECT iptables -t filter -I INPUT -p icmp --icmp-type 8 -j REJECT iptables -t filter -I OUTPUT -p icmp -m icmp --icmp-type 0/0 -j REJECT iptables -t filter -I OUTPUT -p icmp --icmp-type 0 -j REJECT
例3:在不知道type和code的情況下 我們可以用icmp報文的描述名稱去匹配對應類型的報文與例2的類型一樣
iptables -t filter -I INPUT -p icmp --icmp-type "echo-request" -j REJECT