iptables
是 Linux 平台下的封包過濾防火牆,主要用於控制進出 Linux 系統的網路數據包。主要功能包括:
封包過濾:根據定義好的規則來决定是否允許封包通過,能夠設定為以下值允許(ACCEPT)、拒絕(REJECT)和丟棄(DROP)等。
網路位址轉換(NAT):修改封包的 IP 位址、連接埠號碼等訊息,如來源位址網路位址轉換(SNAT)、目標位址網路位址轉換(DNAT)等。
封包狀態檢測:例如,確定資料包是否被狀態追蹤機制處理。
iptables
的結構由上而下,由表(Tables)、鏈(Chains)、規則(Rules)組成。它有 Filter, NAT, Mangle, Raw 四種內建表,每個表有特定的功能和內建鏈。例如,Filter 表主要用於過濾資料包,包含 INPUT、FORWARD、OUTPUT 三種內建鏈。 NAT 表主要用於網路位址轉換,包含 PREROUTING、POSTROUTING、OUTPUT 三種內建鏈。
在 iptables 中,鏈(Chains)是指數據包傳播的路徑,每一條鏈其實就是眾多規則中的一個檢查清單,並且在每一條鏈中可以有一條或數條規則(Rules)。當一個數據包到達一個鏈時,iptables 就會從鏈中第一條規則開始檢查,看該數據包是否滿足規則所定義的條件。如果滿足,系統就會根據該條規則所定義的方法處理該數據包;否則 iptables 將繼續檢查下一條規則。如果該數據包不符合鏈中任一條規則,iptables 就會根據該鏈預先定義的默認策略來處理數據包。
以下是一些具體的內建鏈的功能: