1. 程式人生 > >Android中網路流量控制(防火牆)——Iptables

Android中網路流量控制(防火牆)——Iptables

Iptables簡介

iptables是與最新的 2.6.x 版本 Linux 核心整合的 IP 資訊包過濾系統。如果 Linux 系統連線到因特網或 LAN、伺服器或連線 LAN 和因特網的代理伺服器, 則該系統有利於在 Linux 系統上更好地控制 IP 資訊包過濾和防火牆配置。

Iptables工作原理

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已經有了完善的防火牆規則,我們只需要設計一個基於Iptables的Android前臺,通過執行指令碼,呼叫iptables設定防火牆規則即可。