小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

iptables全面詳解(圖文并茂含命令指南)

 lgoogle 2022-11-03 發(fā)布于日本

前言

本文詳細(xì)介紹了Linux傳統(tǒng)的iptables防火墻的原理、專業(yè)術(shù)語(yǔ)、功能、命令的使用方法、列舉實(shí)用案例。力求提供最全面的教程給本文讀者。如果你覺(jué)得本文很贊,請(qǐng)轉(zhuǎn)發(fā)并注明本文出處,有興趣學(xué)習(xí)Linux的話,也可以添加微信公眾號(hào)“智傳網(wǎng)優(yōu)”進(jìn)行在線自助學(xué)習(xí)。

iptables簡(jiǎn)介

netfilter/iptables(簡(jiǎn)稱為iptables)組成Linux平臺(tái)下的包過(guò)濾防火墻,與大多數(shù)的Linux軟件一樣,這個(gè)包過(guò)濾防火墻是免費(fèi)的,它可以代替昂貴的商業(yè)防火墻解決方案,完成封包過(guò)濾、封包重定向和網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT)等功能。

iptables基礎(chǔ)

規(guī)則(rules)其實(shí)就是網(wǎng)絡(luò)管理員預(yù)定義的條件,規(guī)則一般的定義為“如果數(shù)據(jù)包頭符合這樣的條件,就這樣處理這個(gè)數(shù)據(jù)包”。規(guī)則存儲(chǔ)在內(nèi)核空間的信息包過(guò)濾表中,這些規(guī)則分別指定了源地址、目的地址、傳輸協(xié)議(如TCP、UDP、ICMP)和服務(wù)類型(如HTTP、FTP和SMTP)等。當(dāng)數(shù)據(jù)包與規(guī)則匹配時(shí),iptables就根據(jù)規(guī)則所定義的方法來(lái)處理這些數(shù)據(jù)包,如放行(accept)、拒絕(reject)和丟棄(drop)等。配置防火墻的主要工作就是添加、修改和刪除這些規(guī)則。

iptables和netfilter的關(guān)系:
這是第一個(gè)要說(shuō)的地方,Iptables和netfilter的關(guān)系是一個(gè)很容易讓人搞不清的問(wèn)題。很多的知道iptables卻不知道netfilter。其實(shí)iptables只是Linux防火墻的管理工具而已,位于/sbin/iptables。真正實(shí)現(xiàn)防火墻功能的是netfilter,它是Linux內(nèi)核中實(shí)現(xiàn)包過(guò)濾的內(nèi)部結(jié)構(gòu)。

iptables傳輸數(shù)據(jù)包的過(guò)程

iptables原理圖
iptables流程圖
iptables模塊圖

iptables的規(guī)則表和鏈:
表(tables)提供特定的功能,iptables內(nèi)置了4個(gè)表,即filter表、nat表、mangle表和raw表,分別用于實(shí)現(xiàn)包過(guò)濾,網(wǎng)絡(luò)地址轉(zhuǎn)換、包重構(gòu)(修改)和數(shù)據(jù)跟蹤處理。
鏈(chains)是數(shù)據(jù)包傳播的路徑,每一條鏈其實(shí)就是眾多規(guī)則中的一個(gè)檢查清單,每一條鏈中可以有一條或數(shù)條規(guī)則。當(dāng)一個(gè)數(shù)據(jù)包到達(dá)一個(gè)鏈時(shí),iptables就會(huì)從鏈中第一條規(guī)則開(kāi)始檢查,看該數(shù)據(jù)包是否滿足規(guī)則所定義的條件。如果滿足,系統(tǒng)就會(huì)根據(jù)該條規(guī)則所定義的方法處理該數(shù)據(jù)包;否則iptables將繼續(xù)檢查下一條規(guī)則,如果該數(shù)據(jù)包不符合鏈中任一條規(guī)則,iptables就會(huì)根據(jù)該鏈預(yù)先定義的默認(rèn)策略來(lái)處理數(shù)據(jù)包。

規(guī)則表:
1. filter表——三個(gè)鏈:INPUT、FORWARD、OUTPUT
作用:過(guò)濾數(shù)據(jù)包 內(nèi)核模塊:iptables_filter.
2. Nat表——三個(gè)鏈:PREROUTING、POSTROUTING、OUTPUT
作用:用于網(wǎng)絡(luò)地址轉(zhuǎn)換(IP、端口) 內(nèi)核模塊:iptable_nat
3. Mangle表——五個(gè)鏈:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD
作用:修改數(shù)據(jù)包的服務(wù)類型、TTL、并且可以配置路由實(shí)現(xiàn)QOS內(nèi)核模塊:iptable_mangle(別看這個(gè)表這么麻煩,咱們?cè)O(shè)置策略時(shí)幾乎都不會(huì)用到它),
4. Raw表——兩個(gè)鏈:OUTPUT、PREROUTING
作用:決定數(shù)據(jù)包是否被狀態(tài)跟蹤機(jī)制處理 內(nèi)核模塊:iptable_raw

  • filter表
    主要用于對(duì)數(shù)據(jù)包進(jìn)行過(guò)濾,根據(jù)具體的規(guī)則決定是否放行該數(shù)據(jù)包(如DROP、ACCEPT、REJECT、LOG)。filter 表對(duì)應(yīng)的內(nèi)核模塊為iptable_filter,包含三個(gè)規(guī)則鏈:
    INPUT鏈:INPUT針對(duì)那些目的地是本地的包
    FORWARD鏈:FORWARD過(guò)濾所有不是本地產(chǎn)生的并且目的地不是本地(即本機(jī)只是負(fù)責(zé)轉(zhuǎn)發(fā))的包
    OUTPUT鏈:OUTPUT是用來(lái)過(guò)濾所有本地生成的包

  • nat表
    主要用于修改數(shù)據(jù)包的IP地址、端口號(hào)等信息(網(wǎng)絡(luò)地址轉(zhuǎn)換,如SNAT、DNAT、MASQUERADE、REDIRECT)。屬于一個(gè)流的包(因?yàn)榘?br>的大小限制導(dǎo)致數(shù)據(jù)可能會(huì)被分成多個(gè)數(shù)據(jù)包)只會(huì)經(jīng)過(guò)這個(gè)表一次。如果第一個(gè)包被允許做NAT或Masqueraded,那么余下的包都會(huì)自動(dòng)地被做相同的操作,也就是說(shuō),余下的包不會(huì)再通過(guò)這個(gè)表。表對(duì)應(yīng)的內(nèi)核模塊為 iptable_nat,包含三個(gè)鏈:
    PREROUTING鏈:作用是在包剛剛到達(dá)防火墻時(shí)改變它的目的地址
    OUTPUT鏈:改變本地產(chǎn)生的包的目的地址
    POSTROUTING鏈:在包就要離開(kāi)防火墻之前改變其源地址

  • mangle表
    主要用于修改數(shù)據(jù)包的TOS(Type Of Service,服務(wù)類型)、TTL(Time To Live,生存周期)指以及為數(shù)據(jù)包設(shè)置Mark標(biāo)記,以實(shí)現(xiàn)Qos(Quality Of Service,服務(wù)質(zhì)量)調(diào)整以及策略路由等應(yīng)用,由于需要相應(yīng)的路由設(shè)備支持,因此應(yīng)用并不廣泛。包含五個(gè)規(guī)則鏈——PREROUTING,POSTROUTING,INPUT,OUTPUT,F(xiàn)ORWARD。
    強(qiáng)烈建議你不要在這個(gè)表里做任何過(guò)濾,不管是DANT,SNAT或者M(jìn)asquerade。

  • raw表
    是自1.2.9以后版本的iptables新增的表,主要用于決定數(shù)據(jù)包是否被狀態(tài)跟蹤機(jī)制處理。在匹配數(shù)據(jù)包時(shí),raw表的規(guī)則要優(yōu)先于其他表。包含兩條規(guī)則鏈——OUTPUT、PREROUTING
    iptables中數(shù)據(jù)包和4種被跟蹤連接的4種不同狀態(tài):
    NEW:該包想要開(kāi)始一個(gè)連接(重新連接或?qū)⑦B接重定向)
    RELATED:該包是屬于某個(gè)已經(jīng)建立的連接所建立的新連接。例如:FTP的數(shù)據(jù)傳輸連接就是控制連接所 RELATED出來(lái)的連接。--icmp-type 0 ( ping 應(yīng)答) 就是--icmp-type 8 (ping 請(qǐng)求)所RELATED出來(lái)的。
    ESTABLISHED :只要發(fā)送并接到應(yīng)答,一個(gè)數(shù)據(jù)連接從NEW變?yōu)镋STABLISHED,而且該狀態(tài)會(huì)繼續(xù)匹配這個(gè)連接的后續(xù)數(shù)據(jù)包。
    INVALID:數(shù)據(jù)包不能被識(shí)別屬于哪個(gè)連接或沒(méi)有任何狀態(tài)比如內(nèi)存溢出,收到不知屬于哪個(gè)連接的ICMP錯(cuò)誤信息,一般應(yīng)該DROP這個(gè)狀態(tài)的任何數(shù)據(jù)。

規(guī)則表之間的優(yōu)先順序
Raw>>>>mangle>>>>nat>>>>filter

規(guī)則鏈之間的優(yōu)先順序(分三種情況):

第一種情況:入站數(shù)據(jù)流向
從外界到達(dá)防火墻的數(shù)據(jù)包,先被PREROUTING規(guī)則鏈處理(是否修改數(shù)據(jù)包地址等),之后會(huì)進(jìn)行路由選擇(判斷該數(shù)據(jù)包應(yīng)該發(fā)往何處),如果數(shù)據(jù)包的目標(biāo)主機(jī)是防火墻本機(jī)(比如說(shuō)Internet用戶訪問(wèn)防火墻主機(jī)中的web服務(wù)器的數(shù)據(jù)包),那么內(nèi)核將其傳給INPUT鏈進(jìn)行處理(決定是否允許通過(guò)等),通過(guò)以后再交給系統(tǒng)上層的應(yīng)用程序(比如Apache服務(wù)器)進(jìn)行響應(yīng)。

第二沖情況:轉(zhuǎn)發(fā)數(shù)據(jù)流向
來(lái)自外界的數(shù)據(jù)包到達(dá)防火墻后,首先被PREROUTING規(guī)則鏈處理,之后會(huì)進(jìn)行路由選擇,如果數(shù)據(jù)包的目標(biāo)地址是其它外部地址(比如局域網(wǎng)用戶通過(guò)網(wǎng)關(guān)訪問(wèn)QQ站點(diǎn)的數(shù)據(jù)包),則內(nèi)核將其傳遞給FORWARD鏈進(jìn)行處理(是否轉(zhuǎn)發(fā)或攔截),然后再交給POSTROUTING規(guī)則鏈(是否修改數(shù)據(jù)包的地址等)進(jìn)行處理。

第三種情況:出站數(shù)據(jù)流向
防火墻本機(jī)向外部地址發(fā)送的數(shù)據(jù)包(比如在防火墻主機(jī)中測(cè)試公網(wǎng)DNS服務(wù)器時(shí)),首先被OUTPUT規(guī)則鏈處理,之后進(jìn)行路由選擇,然后傳遞給POSTROUTING規(guī)則鏈(是否修改數(shù)據(jù)包的地址等)進(jìn)行處理。

規(guī)則鏈:
1.INPUT——進(jìn)來(lái)的數(shù)據(jù)包應(yīng)用此規(guī)則鏈中的策略
2.OUTPUT——外出的數(shù)據(jù)包應(yīng)用此規(guī)則鏈中的策略
3.FORWARD——轉(zhuǎn)發(fā)數(shù)據(jù)包時(shí)應(yīng)用此規(guī)則鏈中的策略
4.PREROUTING——對(duì)數(shù)據(jù)包作路由選擇前應(yīng)用此鏈中的規(guī)則
(記?。∷械臄?shù)據(jù)包進(jìn)來(lái)的時(shí)侯都先由這個(gè)鏈處理)
5.POSTROUTING——對(duì)數(shù)據(jù)包作路由選擇后應(yīng)用此鏈中的規(guī)則
(所有的數(shù)據(jù)包出來(lái)的時(shí)侯都先由這個(gè)鏈處理)

防火墻處理數(shù)據(jù)包的方式(規(guī)則):
ACCEPT:允許數(shù)據(jù)包通過(guò)
DROP:直接丟棄數(shù)據(jù)包,不給任何回應(yīng)信息
REJECT:拒絕數(shù)據(jù)包通過(guò),必要時(shí)會(huì)給數(shù)據(jù)發(fā)送端一個(gè)響應(yīng)的信息。
SNAT:源地址轉(zhuǎn)換。在進(jìn)入路由層面的route之后,出本地的網(wǎng)絡(luò)棧之前,改寫源地址,目標(biāo)地址不變,并在本機(jī)建立NAT表項(xiàng),當(dāng)數(shù)據(jù)返回時(shí),根據(jù)NAT表將目的地址數(shù)據(jù)改寫為數(shù)據(jù)發(fā)送出去時(shí)候的源地址,并發(fā)送給主機(jī)。解決內(nèi)網(wǎng)用戶用同一個(gè)公網(wǎng)地址上網(wǎng)的問(wèn)題。
MASQUERADE,是SNAT的一種特殊形式,適用于像adsl這種臨時(shí)會(huì)變的ip上
DNAT:目標(biāo)地址轉(zhuǎn)換。和SNAT相反,IP包經(jīng)過(guò)route之前,重新修改目標(biāo)地址,源地址不變,在本機(jī)建立NAT表項(xiàng),當(dāng)數(shù)據(jù)返回時(shí),根據(jù)NAT表將源地址修改為數(shù)據(jù)發(fā)送過(guò)來(lái)時(shí)的目標(biāo)地址,并發(fā)給遠(yuǎn)程主機(jī)。可以隱藏后端服務(wù)器的真實(shí)地址。
REDIRECT:是DNAT的一種特殊形式,將網(wǎng)絡(luò)包轉(zhuǎn)發(fā)到本地host上(不管IP頭部指定的目標(biāo)地址是啥),方便在本機(jī)做端口轉(zhuǎn)發(fā)。
LOG:在/var/log/messages文件中記錄日志信息,然后將數(shù)據(jù)包傳遞給下一條規(guī)則

除去最后一個(gè)LOG,前3條規(guī)則匹配數(shù)據(jù)包后,該數(shù)據(jù)包不會(huì)再往下繼續(xù)匹配了,所以編寫的規(guī)則順序極其關(guān)鍵。

Table 3-1. 以本地為目標(biāo)(就是我們自己的機(jī)子了)的數(shù)據(jù)包處理步驟

(步驟) (表) (鏈) (注釋)

StepTableChainComment
1

在線路上傳輸(比如,Internet)
2

進(jìn)入接口 (比如, eth0)
3manglePREROUTING這個(gè)鏈用來(lái)mangle數(shù)據(jù)包,比如改變TOS等
4natPREROUTING這個(gè)鏈主要用來(lái)做DNAT。不要在這個(gè)鏈做過(guò)慮操作,因?yàn)槟?些情況下包會(huì)溜過(guò)去。
5

路由判斷,比如,包是發(fā)往本地的,還是要轉(zhuǎn)發(fā)的。
6mangleINPUT在路由之后,被送往本地程序之前,mangle數(shù)據(jù)包。
7filterINPUT所有以本地為目的的包都要經(jīng)過(guò)這個(gè)鏈,不管它們從哪兒 來(lái),對(duì)這些包的過(guò)濾條件就設(shè)在這里。
8

到達(dá)本地程序了(比如,服務(wù)程序或客戶程序)

Table 3-2. 以本地為源的數(shù)據(jù)包處理步驟

(步驟) (表) (鏈) (注釋)

StepTableChainComment
1

本地程序(比如,服務(wù)程序或客戶程序)
2

路由判斷,要使用源地址,外出接口,還有其他一些信息。
3mangleOUTPUT在這兒可以mangle包。建議不要在這兒做過(guò)濾,可能有副作 用哦。
4natOUTPUT這個(gè)鏈對(duì)從防火墻本身發(fā)出的包進(jìn)行DNAT操作。
5filterOUTPUT對(duì)本地發(fā)出的包過(guò)濾。
6manglePOSTROUTING這條鏈主要在包DNAT之后(譯者注:作者把這一次DNAT稱作 實(shí)際的路由,雖然在前面有一次路由。對(duì)于本地的包,一旦它被生成,就必須經(jīng)過(guò)路由代碼的處理,但這個(gè) 包具體到哪兒去,要由NAT代碼處理之后才能確定。所以把這稱作實(shí)際的路由。),離開(kāi)本地之前,對(duì)包 mangle。有兩種包會(huì)經(jīng)過(guò)這里,防火墻所在機(jī)子本身產(chǎn)生的包,還有被轉(zhuǎn)發(fā)的包。
7natPOSTROUTING在這里做SNAT。但不要在這里做過(guò)濾,因?yàn)橛懈弊饔?,而?有些包是會(huì)溜過(guò)去的,即使你用了DROP策略。
8

離開(kāi)接口(比如: eth0)
9

在線路上傳輸(比如,Internet)

Table 3-3. 被轉(zhuǎn)發(fā)的數(shù)據(jù)包處理步驟
(步驟) (表) (鏈) (注釋)

StepTableChainComment
1

在線路上傳輸(比如,Internet)
2

進(jìn)入接口(比如, eth0)
3manglePREROUTINGmangle數(shù)據(jù)包,,比如改變TOS等。
4natPREROUTING這個(gè)鏈主要用來(lái)做DNAT。不要在這個(gè)鏈做過(guò)慮操作,因?yàn)槟?些情況下包會(huì)溜過(guò)去。稍后會(huì)做SNAT。
5

路由判斷,比如,包是發(fā)往本地的,還是要轉(zhuǎn)發(fā)的。
6mangleFORWARD包繼續(xù)被發(fā)送至mangle表的FORWARD鏈,這是非常特殊的情 況才會(huì)用到的。在這里,包被mangle(還記得mangle的意思嗎)。這次mangle發(fā)生在最初的路由判斷之后, 在最后一次更改包的目的之前(譯者注:就是下面的FORWARD鏈所做的,因其過(guò)濾功能,可能會(huì)改變一些包 的目的地,如丟棄包)。
7filterFORWARD包繼續(xù)被發(fā)送至這條FORWARD鏈。只有需要轉(zhuǎn)發(fā)的包才會(huì)走 到這里,并且針對(duì)這些包的所有過(guò)濾也在這里進(jìn)行。注意,所有要轉(zhuǎn)發(fā)的包都要經(jīng)過(guò)這里,不管是外網(wǎng)到內(nèi) 網(wǎng)的還是內(nèi)網(wǎng)到外網(wǎng)的。在你自己書(shū)寫規(guī)則時(shí),要考慮到這一點(diǎn)。
8manglePOSTROUTING這個(gè)鏈也是針對(duì)一些特殊類型的包(譯者注:參考第6步, 我們可以發(fā)現(xiàn),在轉(zhuǎn)發(fā)包時(shí),mangle表的兩個(gè)鏈都用在特殊的應(yīng)用上)。這一步mangle是在所有更改包的目 的地址的操作完成之后做的,但這時(shí)包還在本地上。
9natPOSTROUTING這個(gè)鏈就是用來(lái)做SNAT的,當(dāng)然也包括Masquerade(偽 裝)。但不要在這兒做過(guò)濾,因?yàn)槟承┌词共粷M足條件也會(huì)通過(guò)。
10

離開(kāi)接口(比如: eth0)
11

又在線路上傳輸了(比如,LAN)

在Table 3-3的情況里,不要在INPUT鏈上做過(guò)濾。INPUT是專門用來(lái)操作那些以我們的機(jī)子為目的地址 的包的,它們不會(huì)被路由到其它地方的。

管理和設(shè)置iptables規(guī)則

[-t 表名]:該規(guī)則所操作的哪個(gè)表,可以使用filter、nat等,如果沒(méi)有指定則默認(rèn)為filter
-A:新增一條規(guī)則,到該規(guī)則鏈列表的最后一行
-I:插入一條規(guī)則,原本該位置上的規(guī)則會(huì)往后順序移動(dòng),沒(méi)有指定編號(hào)則為1
-D:從規(guī)則鏈中刪除一條規(guī)則,要么輸入完整的規(guī)則,或者指定規(guī)則編號(hào)加以刪除
-R:替換某條規(guī)則,規(guī)則替換不會(huì)改變順序,而且必須指定編號(hào)。
-P:設(shè)置某條規(guī)則鏈的默認(rèn)動(dòng)作
-nL:-L、-n,查看當(dāng)前運(yùn)行的防火墻規(guī)則列表
chain名:指定規(guī)則表的哪個(gè)鏈,如INPUT、OUPUT、FORWARD、PREROUTING等
[規(guī)則編號(hào)]:插入、刪除、替換規(guī)則時(shí)用,--line-numbers顯示號(hào)碼
[-i|o 網(wǎng)卡名稱]:i是指定數(shù)據(jù)包從哪塊網(wǎng)卡進(jìn)入,o是指定數(shù)據(jù)包從哪塊網(wǎng)卡輸出
[-p 協(xié)議類型]:可以指定規(guī)則應(yīng)用的協(xié)議,包含tcp、udp和icmp等
[-s 源IP地址]:源主機(jī)的IP地址或子網(wǎng)地址
[--sport 源端口號(hào)]:數(shù)據(jù)包的IP的源端口號(hào)
[-d目標(biāo)IP地址]:目標(biāo)主機(jī)的IP地址或子網(wǎng)地址
[--dport目標(biāo)端口號(hào)]:數(shù)據(jù)包的IP的目標(biāo)端口號(hào)
-m:extend matches,這個(gè)選項(xiàng)用于提供更多的匹配參數(shù),如:
-m state –state ESTABLISHED,RELATED
-m tcp –dport 22
-m multiport –dports 80,8080
-m icmp –icmp-type 8
<-j 動(dòng)作>:處理數(shù)據(jù)包的動(dòng)作,包括ACCEPT、DROP、REJECT等

iptables選項(xiàng)功能圖

iptabls基本操作示例

查看規(guī)則

查看規(guī)則集

[root@zcwyou ~]# iptables --list -n
Bash

加一個(gè)-n以數(shù)字形式顯示IP和端口,而不是默認(rèn)的服務(wù)名稱

修改規(guī)則

配置默認(rèn)規(guī)則,不允許數(shù)據(jù)進(jìn)入

[root@zcwyou ~]# iptables -P INPUT DROP
Bash

允許轉(zhuǎn)發(fā)

[root@zcwyou ~]# iptables -P FORWARD ACCEPT
Bash

不允許數(shù)據(jù)流出

[root@zcwyou ~]# iptables -P OUTPUT DROP
Bash

添加規(guī)則

允許源IP地址為192.168.0.0/24網(wǎng)段的包流進(jìn)(包括所有的協(xié)議,這里也可以指定單個(gè)IP)

[root@zcwyou ~]# iptables -A INPUT -s 192.168.0.0/24 -j ACCEPT
Bash

允許所有的IP到192.168.0.22的訪問(wèn)

[root@zcwyou ~]# iptables -A INPUT -d 192.168.0.22 -j ACCEPT
Bash

開(kāi)放本機(jī)80端口

[root@zcwyou ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
Bash

開(kāi)放本機(jī)的ICMP協(xié)議

[root@zcwyou ~]# iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
Bash

刪除規(guī)則

刪除允許源地址進(jìn)入的規(guī)則

[root@zcwyou ~]# iptables -D INPUT -s 192.168.0.21 -j ACCEPT
Bash

iptables服務(wù)命令
啟動(dòng)服務(wù)

[root@zcwyou ~]# /etc/init.d/iptables start
Bash

或者

[root@zcwyou ~]# service iptables start
Bash

停止服務(wù)

[root@zcwyou ~]# /etc/init.d/iptables stop
Bash

或者

[root@zcwyou ~]# service iptables stop
Bash

重啟服務(wù)

[root@zcwyou ~]# /etc/init.d/iptables restart
Bash

或者

[root@zcwyou ~]# service iptables restart
Bash

空當(dāng)前的所有規(guī)則和計(jì)數(shù)

清空所有的防火墻規(guī)則

[root@zcwyou ~]# iptables -F
Bash

刪除用戶自定義的空鏈

[root@zcwyou ~]# iptables -X
Bash

清空計(jì)數(shù)

[root@zcwyou ~]# iptables -Z
Bash

清空指定鏈 INPUT 上面的所有規(guī)則

[root@zcwyou ~]# iptables -F INPUT
Bash

刪除指定的鏈,這個(gè)鏈必須沒(méi)有被其它任何規(guī)則引用,而且這條上必須沒(méi)有任何規(guī)則。

[root@zcwyou ~]# iptables -X INPUT
Bash

如果沒(méi)有指定鏈名,則會(huì)刪除該表中所有非內(nèi)置的鏈。

把指定鏈,或者表中的所有鏈上的所有計(jì)數(shù)器清零。

[root@zcwyou ~]# iptables -Z INPUT
Bash

保存規(guī)則

保存設(shè)置,將規(guī)則保存在/etc/sysconfig/iptables文件里

方法1:

[root@zcwyou ~]# /etc/init.d/iptables save
Bash

或者

[root@zcwyou ~]# service iptables save
Bash

iptables防火墻的配置文件存放于:/etc/sysconfig/iptables

方法2:

修改/etc/sysconfig/iptables-config 將里面的IPTABLES_SAVE_ON_STOP=”no”, 這一句的”no”改為”yes”這樣每次服務(wù)在停止之前會(huì)自動(dòng)將現(xiàn)有的規(guī)則保存在 /etc/sysconfig/iptables 這個(gè)文件中去。

iptables命令及參數(shù)介紹

iptables常用命令:
iptables -A 將一個(gè)規(guī)則添加到鏈末尾
iptables -D 將指定的鏈中刪除規(guī)則
iptables -F 將指定的鏈中刪除所有規(guī)則
iptables -I 將在指定鏈的指定編號(hào)位置插入一個(gè)規(guī)則
iptables -L 列出指定鏈中所有規(guī)則
iptables -t nat -L 列出所有NAT鏈中所有規(guī)則
iptables -N 建立用戶定義鏈
iptables -X 刪除用戶定義鏈
iptables -P 修改鏈的默認(rèn)設(shè)置,如將iptables -P INPUT DROP (將INPUT鏈設(shè)置為DROP)
常見(jiàn)設(shè)置參數(shù)介紹:
--dport 指定目標(biāo)TCP/IP端口 如 –dport 80
--sport 指定源TCP/IP端口 如 –sport 80
-p tcp 指定協(xié)議為tcp
-p icmp 指定協(xié)議為ICMP
-p udp 指定協(xié)議為UDP
-j DROP 拒絕
-j ACCEPT 允許
-j REJECT 拒絕并向發(fā)出消息的計(jì)算機(jī)發(fā)一個(gè)消息
-j LOG 在/var/log/messages中登記分組匹配的記錄
-m mac –mac 綁定MAC地址
-m limit –limit 1/s 1/m 設(shè)置時(shí)間策列
-s 10.10.0.0或10.10.0.0/16 指定源地址或地址段
-d 10.10.0.0或10.10.0.0/16 指定目標(biāo)地址或地址段
-s ! 10.10.0.0 指定源地址以外的

假設(shè)INPUT和OUTPUT鏈的默認(rèn)規(guī)則都是DROP,所以我們就寫需要ACCETP(通過(guò))的鏈。
開(kāi)啟SSH服務(wù)端口

[root@zcwyou ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT[root@zcwyou ~]# iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
Bash

注:如果在預(yù)設(shè)設(shè)置把OUTPUT設(shè)置成DROP策略的話,就需要設(shè)置OUTPUT規(guī)則,否則無(wú)法進(jìn)行SSH連接。

iptables實(shí)用案例

iptables常見(jiàn)操作案例

開(kāi)啟Web服務(wù)端口

[root@zcwyou ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT[root@zcwyou ~]# iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT
Bash

開(kāi)啟郵件服務(wù)的25、110端口

[root@zcwyou ~]# iptables -A INPUT -p tcp --dport 110 -j ACCEPT[root@zcwyou ~]# iptables -A INPUT -p tcp --dport 25 -j ACCEPT
Bash

開(kāi)啟FTP服務(wù)的21端口

[root@zcwyou ~]# iptables -A INPUT -p tcp --dport 21 -j ACCEPT[root@zcwyou ~]# iptables -A INPUT -p tcp --dport 20 -j ACCEPT
Bash

開(kāi)啟DNS服務(wù)的53端口,假設(shè)本機(jī)開(kāi)啟了DNS服務(wù)

[root@zcwyou ~]# iptables -A INPUT -p tcp --dport 53 -j ACCEPT
Bash

允許icmp服務(wù)進(jìn)出

[root@zcwyou ~]# iptables -A INPUT -p icmp -j ACCEPT[root@zcwyou ~]# iptables -A OUTPUT -p icmp -j ACCEP
Bash

假設(shè)OUTPUT默認(rèn)為DROP的話)

允許loopback,不然會(huì)導(dǎo)致DNS無(wú)法正常關(guān)閉等問(wèn)題,假設(shè)默認(rèn)INPUT DROP,需要開(kāi)放

[root@zcwyou ~]# IPTABLES -A INPUT -i lo -p all -j ACCEPT
Bash

假設(shè)默認(rèn)OUTPUT DROP,需要開(kāi)放

[root@zcwyou ~]# IPTABLES -A OUTPUT -o lo -p all -j ACCEPT
Bash

減少不安全的端口連接

[root@zcwyou ~]# iptables -A OUTPUT -p tcp --sport 31337 -j DROP[root@zcwyou ~]# iptables -A OUTPUT -p tcp --dport 31337 -j DROP
Bash

說(shuō)明:有些特洛伊木馬會(huì)掃描端口31337到31340(即黑客語(yǔ)言中的 elite 端口)上的服務(wù)。既然合法服務(wù)都不使用這些非標(biāo)準(zhǔn)端口來(lái)通信,阻塞這些端口能夠有效地減少你的網(wǎng)絡(luò)上可能被感染的機(jī)器和它們的遠(yuǎn)程主服務(wù)器進(jìn)行獨(dú)立通信的機(jī)會(huì)。此外,其他端口也一樣,像:31335、27444、27665、20034 NetBus、9704、137-139(smb),2049(NFS)端口也應(yīng)被禁止。

只允許192.168.0.3的機(jī)器進(jìn)行SSH連接

[root@zcwyou ~]# iptables -A INPUT -s 192.168.0.3 -p tcp --dport 22 -j ACCEPT
Bash

如果允許或限制一段IP地址可用192.168.0.0/24表示192.168.0.1-255端的所有IP, 24表示子網(wǎng)掩碼數(shù)。

[root@zcwyou ~]# iptables -A INPUT -s 192.168.0.0/24 -p tcp --dport 22 -j ACCEPT
Bash

注意:指定某個(gè)主機(jī)或者某個(gè)網(wǎng)段進(jìn)行SSH連接,需要把iptables配置文件中的-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT刪除,因?yàn)樗硎舅械刂范伎梢缘顷?

如果只允許除了192.168.0.3的主機(jī)外都能進(jìn)行SSH連接

[root@zcwyou ~]# iptables -A INPUT -s ! 192.168.0.3 -p tcp --dport 22 -j ACCEPT
Bash

開(kāi)啟轉(zhuǎn)發(fā)功能,在做NAT網(wǎng)絡(luò)配置時(shí),FORWARD默認(rèn)規(guī)則是DROP時(shí),必須開(kāi)啟數(shù)據(jù)包轉(zhuǎn)發(fā)功能

[root@zcwyou ~]# iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT[root@zcwyou ~]# iptables -A FORWARD -i eth1 -o eh0 -j ACCEPT
Bash

丟棄壞的TCP包

[root@zcwyou ~]# iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j DROP
Bash

處理IP碎片數(shù)量,防止DDOS攻擊,允許每秒100個(gè)

[root@zcwyou ~]# iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT
Bash

設(shè)置ICMP包過(guò)濾, 允許每秒1個(gè)包, 限制觸發(fā)條件是10個(gè)包

[root@zcwyou ~]# iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
Bash

DROP非法連接

[root@zcwyou ~]# iptables -A INPUT   -m state --state INVALID -j DROP[root@zcwyou ~]# iptables -A OUTPUT  -m state --state INVALID -j DROP[root@zcwyou ~]# iptables -A FORWARD -m state --state INVALID -j DROP
Bash

允許所有已經(jīng)建立的和相關(guān)的連接

[root@zcwyou ~]# iptables-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT[root@zcwyou ~]# iptables-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT[root@zcwyou ~]# /etc/rc.d/init.d/iptables save
Bash

假設(shè)默認(rèn)為ACCEPT,防止外網(wǎng)用內(nèi)網(wǎng)IP欺騙

[root@zcwyou ~]# iptables -t nat -A PREROUTING -i eth0 -s 10.0.0.0/8 -j DROP[root@zcwyou ~]# iptables -t nat -A PREROUTING -i eth0 -s 172.16.0.0/12 -j DROP[root@zcwyou ~]# iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/16 -j DROP
Bash

禁止與211.101.46.253的所有連接

[root@zcwyou ~]# iptables -t nat -A PREROUTING -d 211.101.46.253 -j DROP
Bash

禁用FTP(21)端口

[root@zcwyou ~]# iptables -t nat -A PREROUTING -p tcp --dport 21 -j DROP
Bash

只禁用211.101.46.253地址的FTP連接,其他連接可以進(jìn)行。

[root@zcwyou ~]# iptables -t nat -A PREROUTING -p tcp --dport 21 -d 211.101.46.253 -j DROP
Bash

查看iptable和行號(hào)

[root@zcwyou ~]# iptables -nL --line-number
Bash

保存當(dāng)前防火墻配置

[root@zcwyou ~]# service iptables save
Bash

手動(dòng)編輯防火墻策略

[root@zcwyou ~]# vi /etc/sysconfig/iptables
Bash

開(kāi)放本地和Ping

[root@zcwyou ~]# iptables -A INPUT -i lo -j ACCEPT [root@zcwyou ~]# iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT [root@zcwyou ~]# iptables -A INPUT -p icmp -j ACCEPT
Bash

配置內(nèi)網(wǎng)白名單

[root@zcwyou ~]# iptables -A INPUT -s 10.0.0.0/8 -j ACCEPT[root@zcwyou ~]# iptables -A INPUT -s 172.16.0.0/12 -j ACCEPT[root@zcwyou ~]# iptables -A INPUT -s 192.168.0.0/16 -j ACCEPT
Bash

配置外網(wǎng)白名單

[root@zcwyou ~]# iptables -A INPUT -s 180.168.36.198 -j ACCEPT [root@zcwyou ~]# iptables -A INPUT -s 180.168.34.218 -j ACCEPT [root@zcwyou ~]# iptables -A INPUT -s 222.73.202.251 -j ACCEPT
Bash

控制端口

[root@zcwyou ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT [root@zcwyou ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
Bash

拒絕其它

[root@zcwyou ~]# iptables -A INPUT -j DROP[root@zcwyou ~]# iptables -A FORWARD -j DROP
Bash

開(kāi)放出口

[root@zcwyou ~]# iptables -A OUTPUT -j ACCEPT
Bash

允許本地回環(huán)接口(即運(yùn)行本機(jī)訪問(wèn)本機(jī))

[root@zcwyou ~]# iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
Bash

允許已建立的或相關(guān)連的通行

[root@zcwyou ~]# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Bash

允許所有本機(jī)向外的訪問(wèn)

[root@zcwyou ~]# iptables -A OUTPUT -j ACCEPT
Bash

允許訪問(wèn)22端口

[root@zcwyou ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
Bash

允許訪問(wèn)80端口

[root@zcwyou ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
Bash

允許ftp服務(wù)的21端口

[root@zcwyou ~]# iptables -A INPUT -p tcp --dport 21 -j ACCEPT    #允許FTP服務(wù)的21端口[root@zcwyou ~]# iptables -A INPUT -p tcp --dport 20 -j ACCEPT    #允許FTP服務(wù)的20端口[root@zcwyou ~]# iptables -A INPUT -j reject       #禁止其他未允許的規(guī)則訪問(wèn)[root@zcwyou ~]# iptables -A FORWARD -j REJECT     #禁止其他未允許的規(guī)則訪問(wèn)
Bash

屏蔽IP

屏蔽單個(gè)IP的命令

[root@zcwyou ~]# iptables -I INPUT -s 123.45.6.7 -j DROP
Bash

封整個(gè)段即從123.0.0.1到123.255.255.254的命令

[root@zcwyou ~]# iptables -I INPUT -s 123.0.0.0/8 -j DROP
Bash

封IP段即從123.45.0.1到123.45.255.254的命令

[root@zcwyou ~]# iptables -I INPUT -s 124.45.0.0/16 -j DROP
Bash

封IP段即從123.45.6.1到123.45.6.254的命令是

[root@zcwyou ~]# iptables -I INPUT -s 123.45.6.0/24 -j DROP
Bash

查看已添加的iptables規(guī)則

[root@zcwyou ~]# iptables -L -n -v
Bash

刪除已添加的iptables規(guī)則

#將所有iptables以序號(hào)標(biāo)記顯示,執(zhí)行:

[root@zcwyou ~]# iptables -L -n --line-numbers
Bash

比如要?jiǎng)h除INPUT里序號(hào)為8的規(guī)則,執(zhí)行:

[root@zcwyou ~]# iptables -D INPUT 8
Bash

配置允許ssh端口連接

[root@zcwyou ~]# iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT
Bash

22為你的ssh端口, -s 192.168.1.0/24表示允許這個(gè)網(wǎng)段的機(jī)器來(lái)連接,其它網(wǎng)段的ip地址是登陸不了你的機(jī)器的。 -j ACCEPT表示接受這樣的請(qǐng)求

允許本地回環(huán)地址可以正常使用

[root@zcwyou ~]# iptables -A INPUT -i lo -j ACCEPT
Bash

本地回環(huán)地址就是那個(gè)127.0.0.1,是本機(jī)上使用的,它進(jìn)與出都設(shè)置為允許

[root@zcwyou ~]# iptables -A OUTPUT -o lo -j ACCEPT
Bash

設(shè)置默認(rèn)的規(guī)則

配置默認(rèn)的不讓進(jìn)

[root@zcwyou ~]# iptables -P INPUT DROP
Bash

默認(rèn)的不允許轉(zhuǎn)發(fā)

[root@zcwyou ~]# iptables -P FORWARD DROP
Bash

默認(rèn)的可以出去

[root@zcwyou ~]# iptables -P OUTPUT ACCEPT
Bash

配置白名單

允許機(jī)房?jī)?nèi)網(wǎng)機(jī)器可以訪問(wèn)

[root@zcwyou ~]# iptables -A INPUT -p all -s 192.168.1.0/24 -j ACCEPT
Bash

允許機(jī)房?jī)?nèi)網(wǎng)機(jī)器可以訪問(wèn)

[root@zcwyou ~]# iptables -A INPUT -p all -s 192.168.140.0/24 -j ACCEPT
Bash

允許183.121.3.7訪問(wèn)本機(jī)的3380端口

[root@zcwyou ~]# iptables -A INPUT -p tcp -s 183.121.3.7 --dport 3380 -j ACCEPT
Bash

開(kāi)啟相應(yīng)的服務(wù)端口

開(kāi)啟80端口,因?yàn)閣eb對(duì)外都是這個(gè)端口

[root@zcwyou ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
Bash

允許被ping

[root@zcwyou ~]# iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
Bash

已經(jīng)建立的連接得讓它進(jìn)來(lái)

[root@zcwyou ~]# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Bash

保存規(guī)則到配置文件中,任何改動(dòng)之前先備份,請(qǐng)保持這一優(yōu)秀的習(xí)慣

[root@zcwyou ~]# cp /etc/sysconfig/iptables /etc/sysconfig/iptables.bak
Bash

iptables-save > /etc/sysconfig/iptables

檢查結(jié)果:

[root@zcwyou ~]# cat /etc/sysconfig/iptables
Bash

四個(gè)表名raw,nat,filter,mangle
五個(gè)規(guī)則鏈名 INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING
filter表包含INPUT、OUTPUT、FORWARD三個(gè)規(guī)則鏈

規(guī)則帶編號(hào)

[root@zcwyou ~]# iptables -L INPUT
Bash

查看,這個(gè)列表看起來(lái)更詳細(xì)

[root@zcwyou ~]# iptables -L -nv
Bash

添加一條規(guī)則

[root@zcwyou ~]# iptables -A INPUT -s 192.168.1.5 -j DROP
Bash

將所有iptables以序號(hào)標(biāo)記顯示,執(zhí)行:

[root@zcwyou ~]# iptables -L -n --line-numbers
Bash

比如要?jiǎng)h除INPUT里序號(hào)為8的規(guī)則,執(zhí)行:

[root@zcwyou ~]# iptables -D INPUT 8
Bash

開(kāi)放指定的端口

允許本地回環(huán)接口(即運(yùn)行本機(jī)訪問(wèn)本機(jī))

[root@zcwyou ~]# iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
Bash

允許已建立的或相關(guān)連的通行

[root@zcwyou ~]# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Bash

允許所有本機(jī)向外的訪問(wèn)

[root@zcwyou ~]# iptables -A OUTPUT -j ACCEPT
Bash

允許訪問(wèn)22端口

[root@zcwyou ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
Bash

允許訪問(wèn)80端口

[root@zcwyou ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
Bash

允許ftp服務(wù)的21端口

[root@zcwyou ~]# iptables -A INPUT -p tcp --dport 21 -j ACCEPT
Bash

允許FTP服務(wù)的20端口

[root@zcwyou ~]# iptables -A INPUT -p tcp --dport 20 -j ACCEPT
Bash

禁止其他未允許的規(guī)則訪問(wèn)

[root@zcwyou ~]# iptables -A INPUT -j reject
Bash

不允許轉(zhuǎn)發(fā)

[root@zcwyou ~]# iptables -A FORWARD -j REJECT
Bash

屏蔽惡意主機(jī)(比如,192.168.0.8)

[root@zcwyou ~]# iptables -A INPUT -p tcp -m tcp -s 192.168.0.8 -j DROP
Bash

屏蔽單個(gè)IP的命令

[root@zcwyou ~]# iptables -I INPUT -s 123.45.6.7 -j DROP
Bash

封整個(gè)段即從123.0.0.1到123.255.255.254的命令

[root@zcwyou ~]# iptables -I INPUT -s 123.0.0.0/8 -j DROP
Bash

封IP段即從123.45.0.1到123.45.255.254的命令

[root@zcwyou ~]# iptables -I INPUT -s 124.45.0.0/16 -j DROP
Bash

查看已添加的規(guī)則

[root@zcwyou ~]# iptables -L -n -v
Bash

NAT網(wǎng)絡(luò)轉(zhuǎn)發(fā)規(guī)則

內(nèi)網(wǎng)所有IP:172.16.93.0/24轉(zhuǎn)為10.0.0.1

[root@zcwyou ~]# iptables -t nat -A POSTROUTING -s 172.16.93.0/24 -j SNAT --to-source 10.0.0.1
Bash

內(nèi)網(wǎng)IP192.168.1.100轉(zhuǎn)為10.0.0.1

[root@zcwyou ~]# iptables -t nat -A POSTROUTING -s 192.168.1.100  -j SNAT --to-source 10.0.0.1
Bash

假設(shè)eth0的IP經(jīng)常變化,做NAT的方法

[root@zcwyou ~]# iptables -t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j MASQUERADE
Bash

ADSL拔號(hào),IP經(jīng)常變化,做NAT的方法

[root@zcwyou ~]# iptables -t nat -A POSTROUTING -j MASQUERADE -o pppXXX
Bash

公網(wǎng)210.14.67.7讓內(nèi)網(wǎng)192.168.188.0/24上網(wǎng)

[root@zcwyou ~]# iptables -t nat -A POSTROUTING -s 192.168.188.0/24 -j SNAT --to-source 210.14.67.127
Bash

端口映射,本機(jī)的 2222 端口映射到內(nèi)網(wǎng) 虛擬機(jī)的22 端口

[root@zcwyou ~]# iptables -t nat -A PREROUTING -d 210.14.67.127 -p tcp --dport 2222  -j DNAT --to-dest 192.168.188.115:22
Bash

配置NAT表防火墻,查看本機(jī)關(guān)于NAT的設(shè)置情況

[root@zcwyou ~]# iptables -t nat -L
Bash

-t 參數(shù)指定,必須是 raw, nat,filter,mangle 中的一個(gè)

帶行號(hào)查看NAT表

[root@zcwyou ~]# iptables -L -t nat  --line-numbers
Bash

刪除NAT表POSTROUTING鏈第一條規(guī)則

[root@zcwyou ~]# iptables -t nat -D POSTROUTING 1
Bash

iptables可用選項(xiàng)說(shuō)明

(1) -t 表
表選項(xiàng)用于指定命令應(yīng)用于哪個(gè)iptables內(nèi)置表。

(2)命令
命令選項(xiàng)用于指定iptables的執(zhí)行方式,包括插入規(guī)則,刪除規(guī)則和添加規(guī)則,如下表所示
命令 說(shuō)明
-P --policy <鏈名> 定義默認(rèn)策略
-L --list <鏈名> 查看iptables規(guī)則列表
-A --append <鏈名> 在規(guī)則列表的最后增加1條規(guī)則
-I --insert <鏈名> 在指定的位置插入1條規(guī)則
-D --delete <鏈名> 從規(guī)則列表中刪除1條規(guī)則
-R --replace <鏈名> 替換規(guī)則列表中的某條規(guī)則
-F --flush <鏈名> 刪除表中所有規(guī)則
-Z --zero <鏈名> 將表中數(shù)據(jù)包計(jì)數(shù)器和流量計(jì)數(shù)器歸零
-X --delete-chain <鏈名> 刪除自定義鏈
-v --verbose <鏈名> 與-L他命令一起使用顯示更多更詳細(xì)的信息

(3) 匹配規(guī)則
匹配選項(xiàng)指定數(shù)據(jù)包與規(guī)則匹配所具有的特征,包括源地址,目的地址,傳輸協(xié)議和端口號(hào),如下表所示
匹配 說(shuō)明
-i --in-interface 網(wǎng)絡(luò)接口名 指定數(shù)據(jù)包從哪個(gè)網(wǎng)絡(luò)接口進(jìn)入,
-o --out-interface 網(wǎng)絡(luò)接口名 指定數(shù)據(jù)包從哪個(gè)網(wǎng)絡(luò)接口輸出
-p ---proto 協(xié)議類型 指定數(shù)據(jù)包匹配的協(xié)議,如TCP、UDP和ICMP等
-s --source 源地址或子網(wǎng) 指定數(shù)據(jù)包匹配的源地址
--sport 源端口號(hào) 指定數(shù)據(jù)包匹配的源端口號(hào)
--dport 目的端口號(hào) 指定數(shù)據(jù)包匹配的目的端口號(hào)
-m --match 匹配的模塊 指定數(shù)據(jù)包規(guī)則所使用的過(guò)濾模塊

iptables執(zhí)行規(guī)則時(shí),是從規(guī)則表中從上至下順序執(zhí)行的,如果沒(méi)遇到匹配的規(guī)則,就一條一條往下執(zhí)行,如果遇到匹配的規(guī)則后,那么就執(zhí)行本規(guī)則,執(zhí)行后根據(jù)本規(guī)則的動(dòng)作(accept,reject,log,drop等),決定下一步執(zhí)行的情況,后續(xù)執(zhí)行一般有三種情況。
一種是繼續(xù)執(zhí)行當(dāng)前規(guī)則隊(duì)列內(nèi)的下一條規(guī)則。比如執(zhí)行過(guò)Filter隊(duì)列內(nèi)的LOG后,還會(huì)執(zhí)行Filter隊(duì)列內(nèi)的下一條規(guī)則。
一種是中止當(dāng)前規(guī)則隊(duì)列的執(zhí)行,轉(zhuǎn)到下一條規(guī)則隊(duì)列。比如從執(zhí)行過(guò)accept后就中斷Filter隊(duì)列內(nèi)其它規(guī)則,跳到nat隊(duì)列規(guī)則去執(zhí)行
一種是中止所有規(guī)則隊(duì)列的執(zhí)行。

(一)、常用命令示例:
1、命令 -A, --append
范例:iptables -A INPUT -p tcp --dport 80 -j ACCEPT
說(shuō)明 :新增規(guī)則到INPUT規(guī)則鏈中,規(guī)則時(shí)接到所有目的端口為80的數(shù)據(jù)包的流入連接,該規(guī)則將會(huì)成為規(guī)則鏈中的最后一條規(guī)則。

2、命令 -D, --delete
范例:iptables -D INPUT -p tcp --dport 80 -j ACCEPT
或 : iptables -D INPUT 1
說(shuō)明: 從INPUT規(guī)則鏈中刪除上面建立的規(guī)則,可輸入完整規(guī)則,或直接指定規(guī)則編號(hào)加以刪除。

3、命令 -R, --replace
范例: iptables -R INPUT 1 -s 192.168.0.1 -j DROP
說(shuō)明 取代現(xiàn)行第一條規(guī)則,規(guī)則被取代后并不會(huì)改變順序。

4、命令 -I, --insert
范例:iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT
說(shuō)明: 在第一條規(guī)則前插入一條規(guī)則,原本該位置上的規(guī)則將會(huì)往后移動(dòng)一個(gè)順位。

5、命令 -L, --list
范例: iptables -L INPUT
說(shuō)明:列出INPUT規(guī)則鏈中的所有規(guī)則。

6、命令 -F, --flush
范例: iptables -F INPUT
說(shuō)明: 刪除INPUT規(guī)則鏈中的所有規(guī)則。

7、命令 -Z, --zero
范例:iptables -Z INPUT
說(shuō)明 將INPUT鏈中的數(shù)據(jù)包計(jì)數(shù)器歸零。它是計(jì)算同一數(shù)據(jù)包出現(xiàn)次數(shù),過(guò)濾阻斷式攻擊不可少的工具。

8、命令 -N, --new-chain
范例: iptables -N denied
說(shuō)明: 定義新的規(guī)則鏈。

9、命令 -X, --delete-chain
范例: iptables -X denied
說(shuō)明: 刪除某個(gè)規(guī)則鏈。

10、命令 -P, --policy
范例 :iptables -P INPUT DROP
說(shuō)明 :定義默認(rèn)的過(guò)濾策略。 數(shù)據(jù)包沒(méi)有找到符合的策略,則根據(jù)此預(yù)設(shè)方式處理。

11、命令 -E, --rename-chain
范例: iptables -E denied disallowed
說(shuō)明: 修改某自訂規(guī)則鏈的名稱。

(二)常用封包比對(duì)參數(shù)
1、參數(shù) -p, --protocol
范例:iptables -A INPUT -p tcpLINUX教程 centos教程
說(shuō)明:比對(duì)通訊協(xié)議類型是否相符,可以使用 ! 運(yùn)算子進(jìn)行反向比對(duì),例如:-p ! tcp ,意思是指除 tcp 以外的其它類型,包含udp、icmp …等。如果要比對(duì)所有類型,則可以使用 all 關(guān)鍵詞,例如:-p all。

2、參數(shù) -s, --src, --source
范例: iptables -A INPUT -s 192.168.1.100
說(shuō)明:用來(lái)比對(duì)數(shù)據(jù)包的來(lái)源IP,可以比對(duì)單機(jī)或網(wǎng)絡(luò),比對(duì)網(wǎng)絡(luò)時(shí)請(qǐng)用數(shù)字來(lái)表示屏蔽,例如:-s 192.168.0.0/24,比對(duì) IP 時(shí)可以使用!運(yùn)算子進(jìn)行反向比對(duì),例如:-s ! 192.168.0.0/24。

3、參數(shù) -d, --dst, --destination
范例: iptables -A INPUT -d 192.168.1.100
說(shuō)明:用來(lái)比對(duì)封包的目的地 IP,設(shè)定方式同上。

4、參數(shù) -i, --in-interface
范例 iptables -A INPUT -i lo
說(shuō)明:用來(lái)比對(duì)數(shù)據(jù)包是從哪個(gè)網(wǎng)卡進(jìn)入,可以使用通配字符 來(lái)做大范圍比對(duì),如:-i eth 表示所有的 ethernet 網(wǎng)卡,也可以使用 ! 運(yùn)算子進(jìn)行反向比對(duì),如:-i ! eth0。這里lo指本地?fù)Q回接口。

5、參數(shù) -o, --out-interface
范例:iptables -A FORWARD -o eth0
說(shuō)明:用來(lái)比對(duì)數(shù)據(jù)包要從哪個(gè)網(wǎng)卡流出,設(shè)定方式同上。

6、參數(shù) --sport, --source-port
范例:iptables -A INPUT -p tcp --sport 22
說(shuō)明:用來(lái)比對(duì)數(shù)據(jù)的包的來(lái)源端口號(hào),可以比對(duì)單一端口,或是一個(gè)范圍,例如:–sport 22:80,表示從 22 到 80 端口之間都算是符合件,如果要比對(duì)不連續(xù)的多個(gè)端口,則必須使用 –multiport 參數(shù),詳見(jiàn)后文。比對(duì)端口號(hào)時(shí),可以使用 ! 運(yùn)算子進(jìn)行反向比對(duì)。

7、參數(shù) --dport, --destination-port
范例iptables -A INPUT -p tcp --dport 22
說(shuō)明 用來(lái)比對(duì)封包的目的地端口號(hào),設(shè)定方式同上。

8、參數(shù) --tcp-flags
范例:iptables -p tcp --tcp-flags SYN,FIN,ACK SYN
說(shuō)明:比對(duì) TCP 封包的狀態(tài)標(biāo)志號(hào),參數(shù)分為兩個(gè)部分,第一個(gè)部分列舉出想比對(duì)的標(biāo)志號(hào),第二部分則列舉前述標(biāo)志號(hào)中哪些有被設(shè),未被列舉的標(biāo)志號(hào)必須是空的。TCP 狀態(tài)標(biāo)志號(hào)包括:SYN(同步)、ACK(應(yīng)答)、FIN(結(jié)束)、RST(重設(shè))、URG(緊急)PSH(強(qiáng)迫推送) 等均可使用于參數(shù)中,除此之外還可以使用關(guān)鍵詞 ALL 和 NONE 進(jìn)行比對(duì)。比對(duì)標(biāo)志號(hào)時(shí),可以使用 ! 運(yùn)算子行反向比對(duì)。

9、參數(shù) --syn
范例:iptables -p tcp --syn
說(shuō)明:用來(lái)比對(duì)是否為要求聯(lián)機(jī)之TCP 封包,與iptables -p tcp --tcp-flags SYN,FIN,ACK SYN 的作用完全相同,如果使用 !運(yùn)算子,可用來(lái)比對(duì)非要求聯(lián)機(jī)封包。

10、參數(shù) -m multiport --source-port
范例: iptables -A INPUT -p tcp -m multiport --source-port 22,53,80,110 -j ACCEPT
說(shuō)明 用來(lái)比對(duì)不連續(xù)的多個(gè)來(lái)源端口號(hào),一次最多可以比對(duì) 15 個(gè)端口,可以使用 ! 運(yùn)算子進(jìn)行反向比對(duì)。

11、參數(shù) -m multiport --destination-port
范例 :iptables -A INPUT -p tcp -m multiport --destination-port 22,53,80,110 -j ACCEPT
說(shuō)明:用來(lái)比對(duì)不連續(xù)的多個(gè)目的地端口號(hào),設(shè)定方式同上。

12、參數(shù)-m multiport --port
范例:iptables -A INPUT -p tcp -m multiport --port 22,53,80,110 -j ACCEPT
說(shuō)明:這個(gè)參數(shù)比較特殊,用來(lái)比對(duì)來(lái)源端口號(hào)和目的端口號(hào)相同的數(shù)據(jù)包,設(shè)定方式同上。注意:在本范例中,如果來(lái)源端口號(hào)為 80,目的地端口號(hào)為 110,這種數(shù)據(jù)包并不算符合條件。

13、參數(shù) --icmp-type
范例:iptables -A INPUT -p icmp --icmp-type 8 -j DROP
說(shuō)明:用來(lái)比對(duì) ICMP 的類型編號(hào),可以使用代碼或數(shù)字編號(hào)來(lái)進(jìn)行比對(duì)。請(qǐng)打 iptables -p icmp --help 來(lái)查看有哪些代碼可用。這里是指禁止ping如,但是可以從該主機(jī)ping出。

14、參數(shù) -m limit --limit
范例:iptables -A INPUT -m limit --limit 3/hour
說(shuō)明:用來(lái)比對(duì)某段時(shí)間內(nèi)數(shù)據(jù)包的平均流量,上面的例子是用來(lái)比對(duì):每小時(shí)平均流量是否超過(guò)一次3個(gè)數(shù)據(jù)包。 除了每小時(shí)平均次外,也可以每秒鐘、每分鐘或每天平均一次,默認(rèn)值為每小時(shí)平均一次,參數(shù)如后: /second、 /minute、/day。 除了進(jìn)行數(shù)據(jù)包數(shù)量的比對(duì)外,設(shè)定這個(gè)參數(shù)也會(huì)在條件達(dá)成時(shí),暫停數(shù)據(jù)包的比對(duì)動(dòng)作,以避免因洪水攻擊法,導(dǎo)致服務(wù)被阻斷。

15、參數(shù) --limit-burst
范例:iptables -A INPUT -m limit --limit-burst 5
說(shuō)明:用來(lái)比對(duì)瞬間大量封包的數(shù)量,上面的例子是用來(lái)比對(duì)一次同時(shí)涌入的封包是否超過(guò) 5 個(gè)(這是默認(rèn)值),超過(guò)此上限的封將被直接丟棄。使用效果同上。

16、參數(shù) -m mac --mac-source
范例:iptables -A INPUT -m mac --mac-source 00:00:00:00:00:01 -j ACCEPT
說(shuō)明:用來(lái)比對(duì)數(shù)據(jù)包來(lái)源網(wǎng)絡(luò)接口的硬件地址,這個(gè)參數(shù)不能用在 OUTPUT 和 Postrouting 規(guī)則鏈上,這是因?yàn)榉獍统龅骄W(wǎng)后,才能由網(wǎng)卡驅(qū)動(dòng)程序透過(guò) ARP 通訊協(xié)議查出目的地的 MAC 地址,所以 iptables 在進(jìn)行封包比對(duì)時(shí),并不知道封包會(huì)送到個(gè)網(wǎng)絡(luò)接口去。linux基礎(chǔ)

17、參數(shù) --mark
范例:iptables -t mangle -A INPUT -m mark --mark 1
說(shuō)明:用來(lái)比對(duì)封包是否被表示某個(gè)號(hào)碼,當(dāng)封包被比對(duì)成功時(shí),我們可以透過(guò) MARK 處理動(dòng)作,將該封包標(biāo)示一個(gè)號(hào)碼,號(hào)碼最不可以超過(guò) 4294967296。linux基礎(chǔ)

18、參數(shù) -m owner --uid-owner
范例:iptables -A OUTPUT -m owner --uid-owner 500
說(shuō)明:用來(lái)比對(duì)來(lái)自本機(jī)的封包,是否為某特定使用者所產(chǎn)生的,這樣可以避免服務(wù)器使用 root 或其它身分將敏感數(shù)據(jù)傳送出,可以降低系統(tǒng)被駭?shù)膿p失。可惜這個(gè)功能無(wú)法比對(duì)出來(lái)自其它主機(jī)的封包。

19、參數(shù)-m owner --gid-owner
范例:iptables -A OUTPUT -m owner --gid-owner 0
說(shuō)明:用來(lái)比對(duì)來(lái)自本機(jī)的數(shù)據(jù)包,是否為某特定使用者群組所產(chǎn)生的,使用時(shí)機(jī)同上。

20、參數(shù)-m owner --pid-owner
范例:iptables -A OUTPUT -m owner --pid-owner 78
說(shuō)明:用來(lái)比對(duì)來(lái)自本機(jī)的數(shù)據(jù)包,是否為某特定行程所產(chǎn)生的,使用時(shí)機(jī)同上。

21、參數(shù) -m owner --sid-owner
范例: iptables -A OUTPUT -m owner --sid-owner 100
說(shuō)明: 用來(lái)比對(duì)來(lái)自本機(jī)的數(shù)據(jù)包,是否為某特定聯(lián)機(jī)(Session ID)的響應(yīng)封包,使用時(shí)機(jī)同上。

22、參數(shù) -m state --state
范例: iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
說(shuō)明 用來(lái)比對(duì)聯(lián)機(jī)狀態(tài),聯(lián)機(jī)狀態(tài)共有四種:INVALID、ESTABLISHED、NEW 和 RELATED。

23、iptables -L -n -v 可以查看計(jì)數(shù)器
INVALID 表示該數(shù)據(jù)包的聯(lián)機(jī)編號(hào)(Session ID)無(wú)法辨識(shí)或編號(hào)不正確。ESTABLISHED 表示該數(shù)據(jù)包屬于某個(gè)已經(jīng)建立的聯(lián)機(jī)。NEW 表示該數(shù)據(jù)包想要起始一個(gè)聯(lián)機(jī)(重設(shè)聯(lián)機(jī)或?qū)⒙?lián)機(jī)重導(dǎo)向)。RELATED 表示該數(shù)據(jù)包是屬于某個(gè)已經(jīng)建立的聯(lián)機(jī),所建立的新聯(lián)機(jī)。例如:FTP-DATA 聯(lián)機(jī)必定是源自某個(gè) FTP 聯(lián)機(jī)。

(三)、常用的處理動(dòng)作:
-j 參數(shù)用來(lái)指定要進(jìn)行的處理動(dòng)作,常用的處理動(dòng)作包括:ACCEPT、REJECT、DROP、REDIRECT、MASQUERADE、LOG、DNAT、SNAT、MIRROR、QUEUE、RETURN、MARK。

分別說(shuō)明如下:

ACCEPT將數(shù)據(jù)包放行,進(jìn)行完此處理動(dòng)作后,將不再比對(duì)其它規(guī)則,直接跳往下一個(gè)規(guī)則鏈(natostrouting)。

REJECT攔阻該數(shù)據(jù)包,并傳送數(shù)據(jù)包通知對(duì)方,可以傳送的數(shù)據(jù)包有幾個(gè)選擇:ICMP port-unreachable、ICMP echo-reply 或是tcp-reset(這個(gè)數(shù)據(jù)包會(huì)要求對(duì)方關(guān)閉聯(lián)機(jī)),進(jìn)行完此處理動(dòng)作后,將不再比對(duì)其它規(guī)則,直接中斷過(guò)濾程序。
范例如下:
iptables -A FORWARD -p TCP --dport 22 -j REJECT --reject-with tcp-reset

DROP丟棄包不予處理,進(jìn)行完此處理動(dòng)作后,將不再比對(duì)其它規(guī)則,直接中斷過(guò)濾程序。

REDIRECT將包重新導(dǎo)向到另一個(gè)端口(PNAT),進(jìn)行完此處理動(dòng)作后,將會(huì)繼續(xù)比對(duì)其它規(guī)則。 這個(gè)功能可以用來(lái)實(shí)作通透式porxy 或用來(lái)保護(hù) web 服務(wù)器。
例如:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

MASQUERADE改寫數(shù)據(jù)包來(lái)源 IP為防火墻 NIC IP,可以指定 port 對(duì)應(yīng)的范圍,進(jìn)行完此處理動(dòng)作后,直接跳往下一個(gè)規(guī)則(mangleostrouting)。這個(gè)功能與 SNAT 略有不同,當(dāng)進(jìn)行 IP 偽裝時(shí),不需指定要偽裝成哪個(gè) IP,IP 會(huì)從網(wǎng)卡直接讀取,當(dāng)使用撥號(hào)連接時(shí),IP 通常是由 ISP 公司的 DHCP 服務(wù)器指派的,這個(gè)時(shí)候 MASQUERADE 特別有用。
范例如下:
iptables -t nat -A POSTROUTING -p TCP -j MASQUERADE --to-ports 1024-31000

LOG將封包相關(guān)訊息紀(jì)錄在 /var/log 中,詳細(xì)位置請(qǐng)查閱 /etc/syslog.conf 配置文件,進(jìn)行完此處理動(dòng)作后,將會(huì)繼續(xù)比對(duì)其規(guī)則。
例如:
iptables -A INPUT -p tcp -j LOG --log-prefix 'INPUT packets'

SNAT改寫封包來(lái)源 IP 為某特定 IP 或 IP 范圍,可以指定 port 對(duì)應(yīng)的范圍,進(jìn)行完此處理動(dòng)作后,將直接跳往下一個(gè)規(guī)則(mangleostrouting)。范例如下:
iptables -t nat -A POSTROUTING -p tcp-o eth0 -j SNAT --to-source 194.236.50.155-194.236.50.160:1024-32000

DNAT改寫封包目的地 IP 為某特定 IP 或 IP 范圍,可以指定 port 對(duì)應(yīng)的范圍,進(jìn)行完此處理動(dòng)作后,將會(huì)直接跳往下一個(gè)規(guī)煉(filter:input 或 filter:forward)。范例如下:
iptables -t nat -A PREROUTING -p tcp -d 15.45.23.67 --dport 80 -j DNAT --to-destination
192.168.1.1-192.168.1.10:80-100

MIRROR鏡像數(shù)據(jù)包,也就是將來(lái)源 IP 與目的地 IP 對(duì)調(diào)后,將數(shù)據(jù)包送回,進(jìn)行完此處理動(dòng)作后,將會(huì)中斷過(guò)濾程序。

QUEUE中斷過(guò)濾程序,將數(shù)據(jù)包放入隊(duì)列,交給其它程序處理。透過(guò)自行開(kāi)發(fā)的處理程序,可以進(jìn)行其它應(yīng)用,例如:計(jì)算聯(lián)機(jī)費(fèi)…….等。

RETURN結(jié)束在目前規(guī)則鏈中的過(guò)濾程序,返回主規(guī)則鏈繼續(xù)過(guò)濾,如果把自訂規(guī)則鏈看成是一個(gè)子程序,那么這個(gè)動(dòng)作,就相當(dāng)提早結(jié)束子程序并返回到主程序中。

MARK將數(shù)據(jù)包標(biāo)上某個(gè)代號(hào),以便提供作為后續(xù)過(guò)濾的條件判斷依據(jù),進(jìn)行完此處理動(dòng)作后,將會(huì)繼續(xù)比對(duì)其它規(guī)則。
范例如下:
iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 2

總結(jié)

iptables集成在非常多的Linux發(fā)行版中, 雖然現(xiàn)在已經(jīng)有新的防火墻firewalld,但iptables使用仍然非常廣泛,對(duì)運(yùn)維人員來(lái)說(shuō),是必須掌握并且隨時(shí)需要使用的技能。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多