Linux入職基礎-6.1_iptables基礎入門

一、iptables結構簡介:

iptables防火牆可以用於創建過濾(filter)與NAT規則。所有Linux發行版都能使用iptables,因此理解如何配置iptables將會幫助你更有效地管理Linux防火牆。

iptables的結構:包含4個內建表, Rules->Chains -> Tables。簡單地講,tables由chains組成,而chains又由rules組成。如下圖:

規則(rules):

它是網絡管理員預定義的條件,規則一般定義爲「如果數據包頭符合這樣的條件,就這樣處理這個數據包」。規則存儲在內核空間的信息包過濾表中,這些規則分別定義了源地址、目的地址、傳輸協議(如TCP,UDP,ICMP)和服務類型(HTTP,FTP,SMTP)等,當數據包與規則匹配時,iptables就根據規則所定義的方法來處理這些數據包,如放行(accept),拒絕(reject),和丟棄(drop)等。

配置防火牆主要工作就是添加,修改和刪除這些規則。

鏈(chains):

它是數據包傳播的途徑,每一條鏈其實就是衆多規則中的一個檢查清單,每一條鏈可以有一條或數條規則。當一個數據包到達一條鏈時,iptables就從鏈中第一條規則開始檢查,看該數據包是否滿足規則定義的條件。如果滿足,系統就會根據這條規則所定義的方法處理該數據包;否則iptables將繼續檢查下一條規則,如果該數據包不符合鏈中任一條規則,iptables將會按照默認策略來處理數據包。

表(tables):

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

1)這4個表的優先級別:raw> mangle > nat > filter

2)每個表有相關的鏈

   raw表有2個鏈:prerouting、output

   mangle表有5個鏈:prerouting、postrouting、input、output、forward

   nat表有3個鏈:prerouting、postrouting、output

   filter表中有3個鏈:input、output、forward

①Filter表

Filter表主要是用於過濾數據包,是iptables的默認表,因此如果你沒有自定義表,那麼iptables程序就默認使用filter表。它具有以下三種內建鏈:

n  INPUT鏈– 處理來自外部的數據。

n  OUTPUT鏈– 處理向外發送的數據。

n  FORWARD鏈– 將數據轉發到本機的其他網卡設備上。

②nat表

Nat表主要用於網絡地址轉換,可以實現一對一,一對多,多對多等NAT工作。它具有以下三種內建鏈:

n  PREROUTING鏈– 處理剛到達本機並在路由轉發前的數據包。

它會轉換數據包中的目標IP地址(destination ip address),通常用於DNAT(destination NAT)。

n  POSTROUTING鏈– 處理即將離開本機的數據包。

它會轉換數據包中的源IP地址(source ip address),通常用於SNAT(source NAT)。

n  OUTPUT鏈– 處理本機產生的數據包。

③mangle

Mangle表用於指定如何處理數據包。它能改變TCP頭中的QoS位。它具有以下五種內建鏈:

n  PREROUTING  --常用於標記策略和端口路由

n  OUTPUT  ---數據輸出

n  FORWARD  --用於修改 TTL、TCP-MSS 和流量控制規則

n  INPUT    --進入路由器的數據

n  POSTROUTING  ---路由後

二、iptables數據傳輸過程

IPTABLES傳輸數據包的過程,如下圖:

第一步:  當一個數據包進入網卡時,首先進入PREROUTING鏈,內核根據數據包目的IP判斷是否需要轉發出去。

第二步:如果數據包是進入本機的,就會向下到INPUT鏈。數據包到達INPUT鏈後,任何進程都會接受。本機上運行的程序也可以發出數據包,這些數據包會經過OUTPUT鏈,然後到達POSTROUTING鏈輸出。

第三步:如果數據包是要轉發出去的,且內核允許,數據包就會經過FORWARD鏈,然後到POSTROUTING鏈輸出。

注意,filter機制的INPUT鏈內容與Mangle機制的INPUT鏈內容絕對是不相同的,請務必認清這一點。