Iptables
| 原作者 | 羅斯迪·魯塞爾(Rusty Russell) |
|---|---|
| 開發者 | Netfilter Core Team |
| 初始版本 | 1998年 |
| 穩定版本 | 1.4.17/ 2012年12月25日 |
| 程式語言 | C |
| 作業系統 | Linux |
| 類型 | Packet filtering |
| 許可協議 | GNU General Public License |
| 網站 | www.netfilter.org |
| 本条目翻譯品質不佳。 |
iptables或netfilter(網路過濾器) 是一個用戶態的防火墙應用軟體,允許系統管理員可以調整設定X表(Xtables)提供相關的系統表格(目前主要是在 iptables/netfilter 底下)以及相關的「链」與「規則」來管理網路封包的流動與轉送的動作。因為相關動作上的需要,所以 iptables 的操作需要用到系統管理員的權限,不然就無法運作下去。在大部份的 Linux 系統上面, iptables 是使用/usr/sbin/iptables 來操作,文件則放置在手冊頁(Man page)(參考: [1])底下,也可以透過 man iptables 的方式來取得這份文件。通常 iptables 都需要核心層級(kernel)的模組來配合運作,Xtables 是主要在核心層級裡面 iptables API 運作功能的模組。
目前 iptables 係在 2.4 及 2.6 的核心底下運作,舊版的 Linux 核心 (2.2) 使用 ipchains 及 ipwadm (linux 2.0) 來達成類似的功能。
目录 |
操作摘要 [编辑]
iptables 和 ip6_tables 、 arp_tables 一同都是建構在 Xtables 的架構下,這個方案讓系統管理員定義「表(tables)」、「链(chain)」、「規則(rules)」三個資料來處理封包的運送。每一個「表」都和不同的封包處理有關、決定封包是否可以穿越的是「链」、而一條「規則」在鍵裡面則可以決定是否送往下一條链(或其它的動作),這個處理可以在巢狀的結構裡面重複使用。每一個網路封包從抵達到離開該電腦至少會經過一個链(亦即轉送或本機路由)。
一開始,是由封包的來源決定它應該穿過哪一個链。iptables 的架構預先在過濾器(filter)裡頭定義了三個鍵: INPUT(輸入)、 OUTPUT(輸出)、跟 FORWARD(轉發)。預先定義的链也同樣會具有一個預設的 "policy"(政策)像是 DROP ,讓封包在歷經規則到最後仍沒有符合的項目時,可以使用這個 "policy" 來進行操作。系統管理員可以視需要新增其它的链。這些链沒有預設的政策可以處理。如果一個封包到了這些链的最後仍然沒有符合的項目,就會回到前一個呼叫它的链。另外,一個链裡頭也可以是空白的。
每條在链的規則都包含了符合的封包相關資料。它也會包含 "target" 的資料。當一個封包穿過一個链,每個規則會依序檢查它。如果沒有規則與封包不相符,則這個封包會被傳到下一個規則計算,如果與規則相處的話,就會開始運行規則裡頭由 target 制定的動作,這個動作會決定這個封包要不要在這個链裡頭繼續運作。
封包穿過链的同時會因為:
- 有規則與封包參數相處,因而決定這個封包的處理方式,像是 "ACCEPT"(接受)或是 "DROP"(丟棄)。
- 有規則呼叫 RETURN target ,則會回歸到上一層呼叫的链裡頭。
- 沒有規則與之相處,則會到達這個链的最底層。(視有無預設政策來決定是否採用預設政策或回歸上一層呼叫的链)
範例 [编辑]
下面的例子是一個已經都設定好了防火牆的工作站。 根目錄(root)使用者可以用 " iptables -L" 這個指令來顯示防火牆上的配置。(完整的配置可以使用 iptables-save -c 顯示出來,如果有問題的話也可以使用這個指令來追查。)
# iptables -L Chain INPUT (policy DROP) target prot opt source destination ACCEPT all -- localhost.localdomain localhost.localdomain ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED REJECT all -- anywhere anywhere Chain FORWARD (policy DROP) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
RELATED(關連), ESTABLISHED(建立)的規則使用線上狀態以致大多數客服端程式(比如:網頁瀏覽器,ssh...)能夠運作。
$ w3m http://en.wikipedia.org/wiki/Main_Page
(打開維基英文主頁)
電腦不需要回應ping且沒有服務被提供。連接要求呈拒絕(REJECT)或則過時(配合DROP使用)之狀態、在於埠都被掃描到時。
$ ping -c 1 10.0.0.1 PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data. --- 62.78.243.6 ping statistics --- 1 packets transmitted, 0 received, 100% packet loss, time 0ms
$ telnet 10.0.0.1 80 Trying 10.0.0.1... telnet: connect to address 10.0.0.1: Connection refused
轉向範例 [编辑]
底下簡單示範如果把預設 HTTP 埠的封包由 80 轉向 8080 埠。如此一來,則 HTTP 的 daemon 可以允許由一般使用啟動,而不需要煩惱一般使用者無法將埠號綁在 1024 埠以下的限制。
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
注意:如果你在你的電腦上面運行了這個指令,它只會對連到你的機器上的外部的 IP 位置發生效果。從本地端上來的連線將無法在 nat 表格上的 PREROUTING 鏈上面發生效果。如果你想要讓本地端也可以發生效果,你可以另外鍵入下面的規則:
iptables -t nat -A OUTPUT -o lo -p tcp --dport 80 -j REDIRECT --to-port 8080
這條規則會將 lo 介面上的封包輸出由 80 埠轉向到 8080 埠上面。
前端控制介面及命令 [编辑]
iptables 的應用上面有許多第三方的軟體可以協助設定規則。前端介面像是Ncurses或圖型介面可以讓使用者用點選的方式產生許多簡單的規則。命令稿通常是參照Unix shell 產生出來的(不過當然也有可能會使用其它種類型的命令稿),它們有的會用一些預先定義好的規則或簡單的範本來呼叫 iptables 或 iptables-restore 使用。Linux 發行版公司有的會在它們的發行版裡面收納這些方式進來,當然像這樣的方式能產生的變化就相當的有限,不過也因為產生規則的方式很簡單,所以甚至可以利用 php 網頁撰寫的方式來產生這些規則。
諸如此種前端裝置,產生器及(generator)及原字集(script)經常被它們內建的模版系統所限制,而且模板能夠為使用者定義規則(user-defined rules)提供替代的地點。同樣的,所產生的規則為了使用者所期待的防火墻效應一般不會是最佳化的狀態,如此的運作將可能會使發展人員增加維護費用。使用者如要很合理的了解iptables、且要他們的規則集(ruleset)最佳化,那就可能需要建構他們自已的規則集.
前端的設定 [编辑]
- Firewall Builder — 圖形前端配合規則/字集產生器、及自動規則集(automated ruleset)載入。
- Shorewall,以本文為基礎的規則產生器。
其它的工具 [编辑]
- Fwsnort - iptables侵入測試以字串比對法及是諾特規則(Snort Rule)來進行FWSnort,Translates a Snort IDS ruleset into an IPTables ruleset.
Iptables/Netfilter圖表 [编辑]
為了較好來了解一個封包穿越核心層的X表(Xtables)之表/鏈(table/chain),你可以發現到下列圖表的使用:
- Netfilter封包流;勾/表(hook/table)秩列[2]