防火牆iptables基礎知識

一、防火牆簡介

        防火牆,其實說白了講,就是用於實現Linux下訪問控制的功能的,它分爲硬件的或者軟件的防火牆兩種。無論是在哪個網絡中,防火牆工作的地方一定是在網絡的邊緣。而我們的任務就是需要去定義到底防火牆如何工作,這就是防火牆的策略,規則,以達到讓它對出入網絡的IP、數據進行檢測。
       目前市面上比較常見的有3、4層的防火牆,叫網絡層的防火牆,還有7層的防火牆,其實是代理層的網關。
        對於TCP/IP的七層模型來講,我們知道第三層是網絡層,三層的防火牆會在這層對源地址和目標地址進行檢測。但是對於七層的防火牆,不管你源端口或者目標端口,源地址或者目標地址是什麼,都將對你所有的東西進行檢查。所以,對於設計原理來講,七層防火牆更加安全,但是這卻帶來了效率更低。所以市面上通常的防火牆方案,都是兩者結合的。而又由於我們都需要從防火牆所控制的這個口來訪問,所以防火牆的工作效率就成了用戶能夠訪問數據多少的一個最重要的控制,配置的不好甚至有可能成爲流量的瓶頸。

1、iptables簡介

netfilter/iptables(簡稱爲iptables)組成Linux平臺下的包過濾防火牆,與大多數的Linux軟件一樣,這個包過濾防火牆是免費的,它可以代替昂貴的商業防火牆解決方案,完成封包過濾、封包重定向和網絡地址轉換(NAT)等功能。

2、netfilter/iptables的區別

這是第一個要說的地方,Iptablesnetfilter的關係是一個很容易讓人搞不清的問題。很多人都知道iptables,卻不知道 netfilter。其實iptables只是Linux防火牆的管理工具而已,位於/sbin/iptables。真正實現防火牆功能的是 netfilter,它是Linux內核中實現包過濾的內部結構。

    Netfilter是由Rusty Russell提出的Linux 2.4內核防火牆框架,該框架既簡潔又靈活,可實現安全策略應用中的許多功能,如數據包過濾、數據包處理、地址僞裝、透明代理、動態網絡地址轉換(Network Address Translation,NAT),以及基於用戶及媒體訪問控制(Media Access Control,MAC)地址的過濾和基於狀態的過濾、包速率限制等。Iptables/Netfilter的這些規則可以通過靈活組合,形成非常多的功能、涵蓋各個方面,這一切都得益於它的優秀設計思想。

Netfilter是Linux操作系統核心層內部的一個數據包處理模塊,它具有如下功能:

  • 網絡地址轉換(Network AddressTranslate)

  • 數據包內容修改

  • 以及數據包過濾的防火牆功能

Netfilter 平臺中制定了數據包的五個掛載點(HookPoint,我們可以理解爲回調函數點,數據包到達這些位置的時候會主動調用我們的函數,使我們有機會能在數據包路由的時候改變它們的方向、內容),這5個掛載點分別是PRE_ROUTING、INPUT、OUTPUT、FORWARD、POST_ROUTING。

Netfilter 所設置的規則是存放在內核內存中的,而iptables 是一個應用層的應用程序,它通過 Netfilter 放出的接口來對存放在內核內存中的 XXtables(Netfilter的配置表)進行修改。這個XXtables由表tables、鏈chains、規則rules組成,iptables在應用層負責修改這個規則文件。類似的應用程序還有 firewalld 。

iptables-netfilter

3、iptables的規則

表(tables)提供特定的功能,iptables內置了4個表,即filter表、nat表、mangle表和raw表,分別用於實現包過濾,網絡地址轉換、包重構(修改)和數據跟蹤處理。

鏈(chains)是數據包傳播的路徑,每一條鏈其實就是衆多規則中的一個檢查清單,每一條鏈中可以有一條或數條規則。當一個數據包到達一個鏈時,iptables就會從鏈中第一條規則開始檢查,看該數據包是否滿足規則所定義的條件。如果滿足,系統就會根據 該條規則所定義的方法處理該數據包;否則iptables將繼續檢查下一條規則,如果該數據包不符合鏈中任一條規則,iptables就會根據該鏈預先定 義的默認策略來處理數據包。
       Iptables採用“表”和“鏈”的分層結構。在REHL4中是三張表五個鏈。現在REHL5成了四張表五個鏈了,不過多出來的那個表用的也不太多,所以基本還是和以前一樣。下面羅列一下這四張表和五個鏈。注意一定要明白這些表和鏈的關係及作用。

wKioL1mY_dPSV3BzAAE0FBSHcUw234.png


3.1 規則

  • filter表

主要用於對數據包進行過濾,根據具體的規則決定是否放行該數據包(如DROP、ACCEPT、REJECT、LOG)。filter 表對應的內核模塊爲iptable_filter,包含三個規則鏈:
INPUT鏈:INPUT針對那些目的地是本地的包
FORWARD鏈:FORWARD過濾所有不是本地產生的並且目的地不是本地(即本機只是負責轉發)的包
OUTPUT鏈:OUTPUT是用來過濾所有本地生成的包

  • nat表

主要用於修改數據包的IP地址、端口號等信息(網絡地址轉換,如SNAT、DNAT、MASQUERADE、REDIRECT)。屬於一個流的包(因爲包
的大小限制導致數據可能會被分成多個數據包)只會經過這個表一次。如果第一個包被允許做NAT或Masqueraded,那麼餘下的包都會自動地被做相同的操作,也就是說,餘下的包不會再通過這個表。表對應的內核模塊爲 iptable_nat,包含三個鏈:
PREROUTING鏈:作用是在包剛剛到達防火牆時改變它的目的地址
OUTPUT鏈:改變本地產生的包的目的地址
POSTROUTING鏈:在包就要離開防火牆之前改變其源地址

  • mangle表

主要用於修改數據包的TOS(Type Of Service,服務類型)、TTL(Time To Live,生存週期)指以及爲數據包設置Mark標記,以實現Qos(Quality Of Service,服務質量)調整以及策略路由等應用,由於需要相應的路由設備支持,因此應用並不廣泛。對應的內核模塊爲iptable_mangle。包含五個規則鏈——PREROUTING,POSTROUTING,INPUT,OUTPUT,FORWARD。

  • raw表

是自1.2.9以後版本的iptables新增的表,主要用於決定數據包是否被狀態跟蹤機制處理。在匹配數據包時,raw表的規則要優先於其他表。對應的內核模塊爲iptable_raw。包含兩條規則鏈——OUTPUT、PREROUTING
iptables中數據包和4種被跟蹤連接的4種不同狀態:
NEW:該包想要開始一個連接(重新連接或將連接重定向)
RELATED:該包是屬於某個已經建立的連接所建立的新連接。例如:FTP的數據傳輸連接就是控制連接所 RELATED出來的連接。--icmp-type 0 ( ping 應答) 就是--icmp-type 8 (ping 請求)所RELATED出來的。
ESTABLISHED:只要發送並接到應答,一個數據連接從NEW變爲ESTABLISHED,而且該狀態會繼續匹配這個連接的後續數據包。
INVALID:數據包不能被識別屬於哪個連接或沒有任何狀態比如內存溢出,收到不知屬於哪個連接的ICMP錯誤信息,一般應該DROP這個狀態的任何數據。


3.2 INPUT、FORWARD等規則鏈和規則

在處理各種數據包時,根據防火牆規則的不同介入時機,iptables供涉及5種默認規則鏈,從應用時間點的角度理解這些鏈:

  • PREROUTING鏈:在對數據包作路由選擇之前,應用此鏈中的規則,如DNAT。

  • INPUT鏈:當接收到防火牆本機地址的數據包(入站)時,應用此鏈中的規則。

  • FORWARD鏈:當接收到需要通過防火牆發送給其他地址的數據包(轉發)時,應用此鏈中的規則。

  • OUTPUT鏈:當防火牆本機向外發送數據包(出站)時,應用此鏈中的規則。

  • POSTROUTING鏈:在對數據包作路由選擇之後,應用此鏈中的規則,如SNAT。

NetFilter規定的五個規則鏈,任何一個數據包,只要經過本機,必將經過這五個鏈中的其中一個鏈。

wKioL1mY_oKCO4rZAAHhVE8Oj7g730.png

-->PREROUTING-->[ROUTE]-->FORWARD-->POSTROUTING-->
     mangle        |       mangle        ^ mangle
      nat          |       filter        |  nat
                   |                     |
                   |                     |
                   v                     |
                 INPUT                 OUTPUT
                   | mangle              ^ mangle
                   | filter              |  nat
                   v ------>local------->| filter

其中中INPUT、OUTPUT鏈更多的應用在“主機防火牆”中,即主要針對服務器本機進出數據的安全控制;而FORWARD、PREROUTING、POSTROUTING鏈更多的應用在“網絡防火牆”中,特別是防火牆服務器作爲網關使用時的情況。


4、規則表之間的優先順序

Raw——>mangle——>nat——>filter

規則鏈之間的優先順序(分三種情況):

第一種情況:入站數據流向

       從外界到達防火牆的數據包,先被PREROUTING規則鏈處理(是否修改數據包地址等),之後會進行路由選擇(判斷該數據包應該發往何處),如果數據包 的目標主機是防火牆本機(比如說Internet用戶訪問防火牆主機中的web服務器的數據包),那麼內核將其傳給INPUT鏈進行處理(決定是否允許通 過等),通過以後再交給系統上層的應用程序(比如Apache服務器、Nginx服務器)進行響應。

第二衝情況:轉發數據流向

       來自外界的數據包到達防火牆後,首先被PREROUTING規則鏈處理,之後會進行路由選擇,如果數據包的目標地址是其它外部地址(比如局域網用戶通過網 關訪問QQ站點的數據包),則內核將其傳遞給FORWARD鏈進行處理(是否轉發或攔截),然後再交給POSTROUTING規則鏈(是否修改數據包的地址等)進行處理。

第三種情況:出站數據流向

       防火牆本機向外部地址發送的數據包(比如在防火牆主機中測試公網DNS服務器時),首先被OUTPUT規則鏈處理,之後進行路由選擇,然後傳遞給POSTROUTING規則鏈(是否修改數據包的地址等)進行處理。

5、經過iptables的數據包的流程介紹

一個數據包到達時,是怎麼依次穿過各個鏈和表的(圖)。 

wKiom1mY_MqjS7QQAAH3vecDChg925.png

基本步驟如下:

1. 數據包到達網絡接口,比如 eth0。 
2. 進入 raw 表的 PREROUTING 鏈,這個鏈的作用是趕在連接跟蹤之前處理數據包。 
3. 如果進行了連接跟蹤,在此處理。 
4. 進入 mangle 表的 PREROUTING 鏈,在此可以修改數據包,比如 TOS 等。 
5. 進入 nat 表的 PREROUTING 鏈,可以在此做DNAT,但不要做過濾。 
6. 決定路由,看是交給本地主機還是轉發給其它主機。 
到了這裏我們就得分兩種不同的情況進行討論了,一種情況就是數據包要轉發給其它主機,這時候它會依次經過: 
7. 進入 mangle 表的 FORWARD 鏈,這裏也比較特殊,這是在第一次路由決定之後,在進行最後的路由決定之前,我們仍然可以對數據包進行某些修改。 
8. 進入 filter 表的 FORWARD 鏈,在這裏我們可以對所有轉發的數據包進行過濾。需要注意的是:經過這裏的數據包是轉發的,方向是雙向的。 
9. 進入 mangle 表的 POSTROUTING 鏈,到這裏已經做完了所有的路由決定,但數據包仍然在本地主機,我們還可以進行某些修改。 
10. 進入 nat 表的 POSTROUTING 鏈,在這裏一般都是用來做 SNAT ,不要在這裏進行過濾。 
11. 進入出去的網絡接口。完畢。 
另一種情況是,數據包就是發給本地主機的,那麼它會依次穿過: 
7. 進入 mangle 表的 INPUT 鏈,這裏是在路由之後,交由本地主機之前,我們也可以進行一些相應的修改。 
8. 進入 filter 表的 INPUT 鏈,在這裏我們可以對流入的所有數據包進行過濾,無論它來自哪個網絡接口。 
9. 交給本地主機的應用程序進行處理。 
10. 處理完畢後進行路由決定,看該往那裏發出。 
11. 進入 raw 表的 OUTPUT 鏈,這裏是在連接跟蹤處理本地的數據包之前。 
12. 連接跟蹤對本地的數據包進行處理。 
13. 進入 mangle 表的 OUTPUT 鏈,在這裏我們可以修改數據包,但不要做過濾。 
14. 進入 nat 表的 OUTPUT 鏈,可以對防火牆自己發出的數據做 NAT 。 
15. 再次進行路由決定。 
16. 進入 filter 表的 OUTPUT 鏈,可以對本地出去的數據包進行過濾。 
17. 進入 mangle 表的 POSTROUTING 鏈,同上一種情況的第9步。注意,這裏不光對經過防火牆的數據包進行處理,還對防火牆自己產生的數據包進行處理。 
18. 進入 nat 表的 POSTROUTING 鏈,同上一種情況的第10步。 
19. 進入出去的網絡接口。完畢。

6、 防火牆的策略

防火牆策略一般分爲兩種,一種叫“通”策略,一種叫“堵”策略,通策略,默認門是關着的,必須要定義誰能進。堵策略則是,大門是洞開的,但是你必須有身份認證,否則不能進。所以我們要定義,讓進來的進來,讓出去的出去,所以通,是要全通,而堵,則是要選擇。當我們定義的策略的時候,要分別定義多條功能,其中:定義數據包中允許或者不允許的策略,filter過濾的功能,而定義地址轉換的功能的則是nat選項。爲了讓這些功能交替工作,我們制定出了“表”這個定義,來定義、區分各種不同的工作功能和處理方式。

現在用的比較多個功能有3個:

  1. filter 定義允許或者不允許的

  2. nat 定義地址轉換的

  3.   mangle功能:修改報文原數據

我們修改報文原數據就是來修改TTL的。能夠實現將數據包的元數據拆開,在裏面做標記/修改內容的。而防火牆標記,其實就是靠mangle來實現的。

iptables/netfilter(這款軟件)是工作在用戶空間的,它可以讓規則進行生效的,本身不是一種服務,而且規則是立即生效的。而我們iptables現在被做成了一個服務,可以進行啓動,停止的。啓動,則將規則直接生效,停止,則將規則撤銷。

iptables還支持自己定義鏈。但是自己定義的鏈,必須是跟某種特定的鏈關聯起來的。在一個關卡設定,指定當有數據的時候專門去找某個特定的鏈來處理,當那個鏈處理完之後,再返回。接着在特定的鏈中繼續檢查。

注意:規則的次序非常關鍵,誰的規則越嚴格,應該放的越靠前,而檢查規則的時候,是按照從上往下的方式進行檢查的。

二、iptables管理和設置iptables規則

1、iptables命令格式

iptables的命令格式較爲複雜,一般的格式如下:

iptables [-t table] 命令 [chain] [rules] [-j target]

table:指定表明

命令:對鏈的操作命令

chain:鏈名

rules:規則

target:動作如何進行

1.1 表選項

表選項用於指定命令應用於哪個iptables內置表,iptables內置包括filter表、nat表、mangle表和raw表。

1.2 命令選項iptables命令格式

命令

說明

-P或–policy <鏈名>

定義默認策略

-L或–list <鏈名>

查看iptables規則列表

-A或—append <鏈名>

在規則列表的最後增加1條規則

-I或–insert <鏈名>

在指定的位置插入1條規則

-D或–delete <鏈名>

從規則列表中刪除1條規則

-R或–replace <鏈名>

替換規則列表中的某條規則

-F或–flush <鏈名>

刪除表中所有規則

-Z或–zero <鏈名>

將表中數據包計數器和流量計數器歸零

1.3 匹配選項

匹配

說明

-i或–in-interface <網絡接口名>

指定數據包從哪個網絡接口進入,如ppp0eth0eth1

-o或–out-interface <網絡接口名>

指定數據包從哪塊網絡接口輸出,如ppp0eth0eth1

-p或—proto協議類型 < 協議類型>

指定數據包匹配的協議,如TCPUDPICMP

-s或–source <源地址或子網>

指定數據包匹配的源地址

sport <源端口號>

指定數據包匹配的源端口號,可以使用“起始端口號:結束端口號”的格式指定一個範圍的端口

-d或–destination <目標地址或子網>

指定數據包匹配的目標地址

dport <目標端口號>

指定數據包匹配的目標端口號,可以使用“起始端口號:結束端口號”的格式指定一個範圍的端口

--tcp-fiags  <TCP的標誌位>

指定TCP的標誌位(SYN,ACKFIN,PSHRST,URG

1.4 動作選項

動作

說明

ACCEPT

接受數據包

DROP

丟棄數據包

REDIRECT

DROP基本一樣,區別在於它除了阻塞包之外, 還向發送者返回錯誤信息。

SNAT

源地址轉換,即改變數據包的源地址

DNAT

目標地址轉換,即改變數據包的目的地址

MASQUERADE

IP僞裝,即是常說的NAT技術,MASQUERADE只能用於ADSL等撥號上網的IP僞裝,也就是主機的IP是由ISP分配動態的;如果主機的IP地址是靜態固定的,就要使用SNAT

LOG

日誌功能,將符合規則的數據包的相關信息記錄在日誌中,以便管理員的分析和排錯

MARK

打防火牆標記的

RETURN

返回在自定義鏈執行完畢後使用返回,來返回原規則鏈

2、定義默認策略

當數據包不符合鏈中任一條規則時,iptables將根據該鏈預先定義的默認策略來處理數據包,默認策略的定義格式如下。

iptables [-t表名] <-P> <鏈名> <動作>

參數說明如下:

[-t表名]:指默認策略將應用於哪個表,可以使用filter、nat和mangle,如果沒有指定使用哪個表,iptables就默認使用filter表。
<-P>:定義默認策略。
<鏈名>:指默認策略將應用於哪個鏈,可以使用INPUT、OUTPUT、FORWARD、PREROUTING、OUTPUT和POSTROUTING。
<動作>:處理數據包的動作,可以使用ACCEPT(接受數據包)和DROP(丟棄數據包)

3、查看iptables規則

命令格式爲:

iptables [-t表名] <-L> [鏈名]

參數說明如下:

[-t表名]:指查看哪個表的規則列表,表名用可以使用filter、nat和mangle,如果沒有指定使用哪個表,iptables就默認查看filter表的規則列表。
<-L>:查看指定表和指定鏈的規則列表。
[鏈名]:指查看指定表中哪個鏈的規則列表,可以使用INPUT、OUTPUT、FORWARD、PREROUTING、OUTPUT和POSTROUTING,如果不指明哪個鏈,則將查看某個表中所有鏈的規則列表。
-n:以數字的方式顯示ip,它會將ip直接顯示出來,如果不加-n,則會將ip反向解析成主機名。
-v:顯示詳細信息
-vvv :越多越詳細
-x:在計數器上顯示精確值,不做單位換算
--line-numbers : 顯示規則的行號

 4、增加、插入、刪除和替換規則

相關規則定義的格式爲:

iptables [-t表名] <-A | I | D | R> 鏈名 [規則編號] [-i | o 網卡名稱] [-p 協議類型] [-s IP地址 | 源子網] [--sport 源端口號] [-d目標IP地址 | 目標子網] [--dport目標端口號] <-j動作>

參數說明如下:

[-t表名]:定義默認策略將應用於哪個表,可以使用filter、nat和mangle,如果沒有指定使用哪個表,iptables就默認使用filter表。
-A:新增加一條規則,該規則將會增加到規則列表的最後一行,該參數不能使用規則編號。
-I:插入一條規則,原本該位置上的規則將會往後順序移動,如果沒有指定規則編號,則在第一條規則前插入。
-D:從規則列表中刪除一條規則,可以輸入完整規則,或直接指定規則編號加以刪除。
-R:替換某條規則,規則被替換並不會改變順序,必須要指定替換的規則編號。
<鏈名>:指定查看指定表中哪個鏈的規則列表,可以使用INPUT、OUTPUT、FORWARD、PREROUTING、OUTPUT和POSTROUTING。
[規則編號]:規則編號用於插入、刪除和替換規則時用,編號是按照規則列表的順序排列,規則列表中第一條規則的編號爲1。
[-i | o 網卡名稱]:i是指定數據包從哪塊網卡進入,o是指定數據包從哪塊網卡輸出。網卡名稱可以使用ppp0、eth0和eth1等。
[-p 協議類型]:可以指定規則應用的協議,包含TCP、UDP和ICMP等。
[-s 源IP地址 | 源子網]:源主機的IP地址或子網地址。
[--sport 源端口號]:數據包的IP的源端口號。
[-d目標IP地址 | 目標子網]:目標主機的IP地址或子網地址。
[--dport目標端口號]:數據包的IP的目標端口號。
<-j動作>:處理數據包的動作,各個動作的詳細說明可以參考前面的說明。

5、清除規則和計數器

在新建規則時,往往需要清除原有的、舊的規則,以免它們影 ?響新設定的規則。如果規則比較多,一條條刪除就會十分麻煩, ?這時可以使用iptables提供的清除規則參數達到快速刪除所有的規 ?則的目的。

定義參數的格式爲:

iptables [-t表名] <-F | Z>

參數說明如下:

[-t表名]:指定默認策略將應用於哪個表,可以使用filter、nat和mangle,如果沒有指定使用哪個表,iptables就默認使用filter表。
-F:刪除指定表中所有規則。
-Z:將指定表中的數據包計數器和流量計數器歸零。

6、iptables防火牆規則的保存於恢復
iptables-save把把規則保存到文件中,在由目錄rc.d下的腳本(/etc/rc.d/init.d/iptalbes)自動裝載
使用命令iptables-save來保存規則。

一般用iptables-save >/etc/sysconfig/iptables
生成保存規則的文件/etc/sysconfig/iptables
也可以用/etc/init.d/iptables save
它能把規則自動保存在/etc/sysconfig/iptables中
當計算機啓動是,rc.d下的腳本將用命令iptables-restore調用這個文件,從而就自動恢復規則

三、iptables防火牆常用的策略
1、拒絕進入防火牆的所用ICMP協議數據包

iptables -I INPUT -p icmp -j REJECT

2、允許防火牆轉發出ICMP協議以外的所有數據包

iptables -A FORWARD -p ! icmp -j ACCEPT

說明:使用“!”可以將條件取反
3、拒絕轉發來自192.168.1.10主機的數據,允許轉發來自192.168.0.0/24網段的數據

iptables -A FORWARD -s 192.168.1.11 -j REJECT
iptables -A FORWARD -s 192.168.0.0/24 -j ACCERT

4、丟棄從外網接口(eth1)進入防火牆的源源地址爲私網地址的數據包

iptables -A INPUT -i eth1 -s 192.168.0.0/16 -j DROP
iptables -A INPUT -i eth1 -s 172.16.0.0/12 -j DROP
iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP

5、封堵網段(192.168.1.0/24),兩小時後解封

iptables -I INPUT -s 10.20.30.0/24 -j DROP
iptables -I FORWAD -s 10.20.30.0/24 -j DROP
at now 2 hours at >iptables -D INPUT 1 at >iptables -D FORWARD 1

說明:這個策略咱們藉助crond計劃任務來完成,就在好不過了
6、只允許管理員從202.13.0.0/16網段使用SSH遠程登錄防火牆主機

iptables -A INPUT -p tcp --dport 22 -s 22.13.0.0/16 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP

說明:這個用法比較適合對設備進行遠程管理時使用,不如位於分公司中的SQL服務器需要被總公司的管理員管理時
7、允許開放從TCP端口20-1024提供的應用服務

iptables -A INPUT -p tcp --dport 22:1024 -j ACCERT
iptables -A OUTPUT -p tcp --dport 22:1024 -j ACCERT

8、允許轉發來自192.168.0.0/24局域網段的DNS解析請求數據包

iptables -A FORWARD -s 192.168.0.0/24 -p udp --dport 53 -j ACCEPT
iptables -A FORWARD -s 192.168.0.0/24 -p udp --sport 53 -j ACCEPT

9、禁止其他主機ping防火牆主機,但是允許從防火牆上ping其他主句

iptables -I INPUT -p icmp --icmp-type Echo-Request -j DROP
iptables -I INPUT -p icmp --icmp-type Echo-Reply -j ACCPT
iptables -I INPUT -p icmp --icmp-type destination-Unreachable -j ACCPT

10、禁止轉發來自MAC地址爲00:0C:29:27:55:3F的和主機的數據包

iptables -A FORWARD -m mac --mac-source 00:0c:29:27:55:3F -j DROP

說明:iptables中使用“-m 模塊關鍵字”的形式調用顯示匹配。咱們這裏用“-m mac --mac-source”來表示數據包中的源MAC地址
11、允許防火牆本機對外開放TCP端口20、21、25、110以及被動模式FTP端口1250-1280

iptables -A INPUT -p tcp -m multiport --dport 20,21,25,110,1250:1280 -j ACCEPT

說明:這裏用“-m multiport –dport”來指定目的端口及範圍
12.禁止轉發源IP地址爲192.168.1.20-192.168.1.99的TCP數據包。

iptables -A FORWARD -p tcp -m iprange --src-range 192.168.1.20-192.168.1.99 -j DROP

說明:此處用“-m –iprange –src-range”指定IP範圍。
13.禁止轉發與正常TCP連接無關的非—syn請求數據包。

iptables -A FORWARD -m state --state NEW -p tcp ! --syn -j DROP

說明:“-m state”表示數據包的連接狀態,“NEW”表示與任何連接無關的
14、拒絕訪問防火牆的新數據包,但允許響應連接或與已有連接相關的數據包

iptables -A INPUT -p tcp -m state --state NEW -j DROP
iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT

說明:“ESTABLISHED”表示已經響應請求或者已經建立連接的數據包,“RELARED”表示與已建立的連接有相關性的,比如FTP數據連接等
15、只開放本機的web服務器(80)、FTP(20、21、20450-2048),放行外部主機發往服務器其他端口的應答數據包,將其他入站數據包均予以丟棄處理

iptables -I INPUT -p tcp -m multiport -dport 20,21,80 -j ACCEPT
iptables -I INPUT -p tcp --dport 20450:20480 -j ACCEPT
iptables -I INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
iptables -P INPUT DROP

四、總結

    Iptables是一個非常重要的工具,它是每一個防火牆上幾乎必備的設置,也是我們在做大型網絡的時候,爲了很多原因而必須要設置的。學好Iptables,可以讓我們對整個網絡的結構有一個比較深刻的瞭解,同時,我們還能夠將內核空間中數據的走向以及linux的安全給掌握的非常透徹。我們在學習的時候,儘量能結合着各種各樣的項目,實驗來完成,這樣對你加深iptables的配置,以及各種技巧有非常大的幫助。

1、IPtables工作流程

  1. 防火牆是一層層過濾的,實際是按照配置規則的順序從上到下,從前到後進行過濾的

  2. 如果匹配上規則,即表明是阻止還是通過,此時數據包就不在向下匹配新規則了。

  3. 如果所有規則中沒有表明是阻止還是通過這個數據包,也就是沒有匹配上規則,向下進行匹配,直到匹配默認規則得到明確的阻止還是通過

  4. 防火牆的默認規則是對應鏈的所有的規則執行完纔會執行的

2、企業級別主機防火牆

2.1 清除默認的相關信息

[root@web01 ~]# iptables -F
[root@web01 ~]# iptables -Z
[root@web01 ~]# iptables -X

2.2 允許內部管理

[root@web01 ~]# iptables -A INPUT -p tcp -s 10.0.0.0/24 -j ACCEPT
[root@web01 ~]# iptables -A INPUT -p tcp -s 203.81.18.0/24 -j ACCEPT
[root@web01 ~]# iptables -A INPUT -p tcp -s 200.81.33.0/24 -j ACCEPT
[root@web01 ~]# iptables -A INPUT -p tcp -s 192.168.1.0/24 -j ACCEPT

2.3 允許迴環地址

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

2.4 配置鏈的默認規則

[root@web01 ~]# iptables -P OUTPUT ACCEPT
[root@web01 ~]# iptables -P FORWARD ACCEPT
[root@web01 ~]# iptables -P INPUT DROP

2.5 允許用戶訪問(web服務器爲例)

[root@web01 ~]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT
[root@web01 ~]# iptables -I INPUT -p tcp --dport 443 -j ACCEPT

2.6 允許關聯包通過(主要適用於FTP)

[root@web01 ~]# iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT

工作中使用腳本批量操作,並保存到/etc/sysconfig/iptables
生產維護:在配置文件中修改,測試配置可以使用定時任務定時清空

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章