|
在本博客中,從理論到實踐,系統(tǒng)的介紹了iptables,如果你想要從頭開始了解iptables,可以查看iptables文章列表,直達(dá)鏈接如下 前文中總結(jié)了iptables的tcp擴展模塊,此處,我們來總結(jié)一下另外兩個跟協(xié)議有關(guān)的常用的擴展模塊,udp擴展與icmp擴展。 udp擴展我們先來說說udp擴展模塊,這個擴展模塊中能用的匹配條件比較少,只有兩個,就是--sport與--dport,即匹配報文的源端口與目標(biāo)端口。 沒錯,tcp模塊中也有這兩個選項,名稱都一模一樣。 只不過udp擴展模塊的--sport與--dport是用于匹配UDP協(xié)議報文的源端口與目標(biāo)端口,比如,放行samba服務(wù)的137與138這兩個UDP端口,示例如下
前文說明過,當(dāng)使用擴展匹配條件時,如果未指定擴展模塊,iptables會默認(rèn)調(diào)用與"-p"對應(yīng)的協(xié)議名稱相同的模塊,所以,當(dāng)使用"-p udp"時,可以省略"-m udp",示例如下。
udp擴展中的--sport與--dport同樣支持指定一個連續(xù)的端口范圍,示例如下
上圖中的配置表示137到157之間的所有udp端口全部對外開放,其實與tcp擴展中的使用方法相同。 但是udp中的--sport與--dport也只能指定連續(xù)的端口范圍,并不能一次性指定多個離散的端口,沒錯,聰明如你一定想到,使用之前總結(jié)過的multiport擴展模塊,即可指定多個離散的UDP端口,如果你忘了multiport模塊怎樣使用,請回顧前文。 總之有了前文的基礎(chǔ),再理解上述示例就容易多了,此處不再對udp模塊的--sport與--dport進(jìn)行贅述。 icmp擴展最常用的tcp擴展、udp擴展已經(jīng)總結(jié)完畢,現(xiàn)在聊聊icmp擴展,沒錯,看到icmp,你肯定就想到了ping命令,因為ping命令使用的就是icmp協(xié)議。 ICMP協(xié)議的全稱為Internet Control Message Protocol,翻譯為互聯(lián)網(wǎng)控制報文協(xié)議,它主要用于探測網(wǎng)絡(luò)上的主機是否可用,目標(biāo)是否可達(dá),網(wǎng)絡(luò)是否通暢,路由是否可用等。 我們平常使用ping命令ping某主機時,如果主機可達(dá),對應(yīng)主機會對我們的ping請求做出回應(yīng)(此處不考慮禁ping等情況),也就是說,我們發(fā)出ping請求,對方回應(yīng)ping請求,雖然ping請求報文與ping回應(yīng)報文都屬于ICMP類型的報文,但是如果在概念上細(xì)分的話,它們所屬的類型還是不同的,我們發(fā)出的ping請求屬于類型8的icmp報文,而對方主機的ping回應(yīng)報文則屬于類型0的icmp報文,根據(jù)應(yīng)用場景的不同,icmp報文被細(xì)分為如下各種類型。
從上圖可以看出,所有表示"目標(biāo)不可達(dá)"的icmp報文的type碼為3,而"目標(biāo)不可達(dá)"又可以細(xì)分為多種情況,是網(wǎng)絡(luò)不可達(dá)呢?還是主機不可達(dá)呢?再或者是端口不可達(dá)呢?所以,為了更加細(xì)化的區(qū)分它們,icmp對每種type又細(xì)分了對應(yīng)的code,用不同的code對應(yīng)具體的場景, 所以,我們可以使用type/code去匹配具體類型的ICMP報文,比如可以使用"3/1"表示主機不可達(dá)的icmp報文。 上圖中的第一行就表示ping回應(yīng)報文,它的type為0,code也為0,從上圖可以看出,ping回應(yīng)報文屬于查詢類(query)的ICMP報文,從大類上分,ICMP報文還能分為查詢類與錯誤類兩大類,目標(biāo)不可達(dá)類的icmp報文則屬于錯誤類報文。 而我們發(fā)出的ping請求報文對應(yīng)的type為8,code為0。 了解完上述概念,就好辦了,我們來看一些應(yīng)用場景。 假設(shè),我們現(xiàn)在想要禁止所有icmp類型的報文進(jìn)入本機,那么我們可以進(jìn)行如下設(shè)置。
上例中,我們并沒有使用任何擴展匹配條件,我們只是使用"-p icmp"匹配了所有icmp協(xié)議類型的報文。 如果進(jìn)行了上述設(shè)置,別的主機向我們發(fā)送的ping請求報文無法進(jìn)入防火墻,我們向別人發(fā)送的ping請求對應(yīng)的回應(yīng)報文也無法進(jìn)入防火墻。所以,我們既無法ping通別人,別人也無法ping通我們。 假設(shè),此刻需求有變,我們只想要ping通別人,但是不想讓別人ping通我們,剛才的配置就不能滿足我們了,我們則可以進(jìn)行如下設(shè)置(此處不考慮禁ping的情況)
上圖中,使用"-m icmp"表示使用icmp擴展,因為上例中使用了"-p icmp",所以"-m icmp"可以省略,使用"--icmp-type"選項表示根據(jù)具體的type與code去匹配對應(yīng)的icmp報文,而上圖中的"--icmp-type 8/0"表示icmp報文的type為8,code為0才會被匹配到,也就是只有ping請求類型的報文才能被匹配到,所以,別人對我們發(fā)起的ping請求將會被拒絕通過防火墻,而我們之所以能夠ping通別人,是因為別人回應(yīng)我們的報文的icmp type為0,code也為0,所以無法被上述規(guī)則匹配到,所以我們可以看到別人回應(yīng)我們的信息。 因為type為8的類型下只有一個code為0的類型,所以我們可以省略對應(yīng)的code,示例如下
除了能夠使用對應(yīng)type/code匹配到具體類型的icmp報文以外,我們還能用icmp報文的描述名稱去匹配對應(yīng)類型的報文,示例如下
沒錯,上例中使用的 --icmp-type "echo-request"與 --icmp-type 8/0的效果完全相同,參考本文最上方的表格即可獲取對應(yīng)的icmp類型的描述名稱。
注意:名稱中的"空格"需要替換為"-"。 小結(jié)udp擴展常用的擴展匹配條件 --sport:匹配udp報文的源地址 --dport:匹配udp報文的目標(biāo)地址 Shell icmp擴展常用的擴展匹配條件 --icmp-type:匹配icmp報文的具體類型 Shell |
|
|