一、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鏈內容絕對是不相同的,請務必認清這一點。