iptables是與最新的 2.6.x 版本 Linux 核心內建的 IP 資訊包過濾系統。如果 Linux 系統連接配接到網際網路或 LAN、伺服器或連接配接 LAN 和網際網路的代理伺服器, 則該系統有利于在 Linux 系統上更好地控制 IP 資訊包過濾和防火牆配置。
netfilter/iptablesIP 資訊包過濾系統是一種功能強大的工具, 可用于添加、編輯和除去規則,這些規則是在做資訊包過濾決定時,防火牆所遵循群組成的規則。這些規則存儲在專用的資訊包過濾表中, 而這些表內建在 Linux 核心中。 在資訊包過濾表中,規則被分組放在我們所謂的 鍊(chain)中。我馬上會詳細讨論這些規則以及如何建立這些規則并将它們分組在鍊中。
雖然 netfilter/iptables IP 資訊包過濾系統被稱為單個實體,但它實際上由兩個元件 netfilter和 iptables 組成。
netfilter 元件也稱為 核心空間(kernelspace),是核心的一部分,由一些資訊包過濾表組成, 這些表包含核心用來控制資訊包過濾處理的規則集。
iptables元件是一種工具,也稱為 使用者空間(userspace),它使插入、修改和除去資訊包過濾表中的規則變得容易。 除非您正在使用 Red Hat Linux 7.1 或更高版本,否則需要從 netfilter.org 下載下傳該工具并安裝使用它。
通過使用使用者空間,可以建構自己的定制規則,這些規則存儲在核心空間的資訊包過濾表中。 這些規則具有 目标,它們告訴核心對來自某些源、前往某些目的地或具有某些協定類型的資訊包做些什麼。 如果某個資訊包與規則比對,那麼使用目标 ACCEPT 允許該資訊包通過。還可以使用目标 DROP 或 REJECT 來阻塞并殺死資訊包。對于可對資訊包執行的其它操作,還有許多其它目标。
根據規則所處理的資訊包的類型,可以将規則分組在鍊中。處理入站資訊包的規則被添加到 INPUT 鍊中。處理出站資訊包的規則被添加到 OUTPUT 鍊中。處理正在轉發的資訊包的規則被添加到 FORWARD 鍊中。這三個鍊是基本資訊包過濾表中内置的預設主鍊。 另外,還有其它許多可用的鍊的類型(如 PREROUTING 和 POSTROUTING ), 以及提供使用者定義的鍊。每個鍊都可以有一個 政策, 它定義“預設目标”,也就是要執行的預設操作,當資訊包與鍊中的任何規則都不比對時,執行此操作。
建立規則并将鍊放在适當的位置之後,就可以開始進行真正的資訊包過濾工作了。 這時核心空間從使用者空間接管工作。當資訊包到達防火牆時,核心先檢查資訊包的頭資訊,尤其是資訊包的目的地。 我們将這個過程稱為 路由。
如果資訊包源自外界并前往系統,而且防火牆是打開的,那麼核心将它傳遞到核心空間資訊包過濾表的 INPUT 鍊。如果資訊包源自系統内部或系統所連接配接的内部網上的其它源,并且此資訊包要前往另一個外部系統, 那麼資訊包被傳遞到 OUTPUT 鍊。類似的,源自外部系統并前往外部系統的資訊包被傳遞到 FORWARD 鍊。
接下來,将資訊包的頭資訊與它所傳遞到的鍊中的每條規則進行比較,看它是否與某條規則完全比對。 如果資訊包與某條規則比對,那麼核心就對該資訊包執行由該規則的目标指定的操作。 但是,如果資訊包與這條規則不比對,那麼它将與鍊中的下一條規則進行比較。 最後,如果資訊包與鍊中的任何規則都不比對,那麼核心将參考該鍊的政策來決定如何處理該資訊包。 理想的政策應該告訴核心 DROP 該資訊包。下圖用圖形說明了這個資訊包過濾過程。

由于Iptables已經有了完善的防火牆規則,我們隻需要設計一個基于Iptables的Android前台,通過運作腳本,調用iptables設定防火牆規則即可。
相關示例代碼:
<a target="_blank" href="http://code.google.com/p/droidwall/">http://code.google.com/p/droidwall/</a>