android iptables小結

Android上使用iptables一般做代理和app防火墻功能。
有幾個開源項目,推薦大家去googlecode上去找找:
droidwall:app網絡防火墻;
proxydroid:代理app,支持多種網絡協議;
以上軟件都需要root權限。

app網絡防火墻實現思路:
通過iptables命令設置filter表,針對OUTPUT鏈,來源是wifi或是2g/3g的做REJECT或是DROP操作。

REJECT 攔阻該封包,并傳送封包通知對方。
DROP 丟棄封包不予處理,進行完此處理動作后,將不再比對其它規則,直接中斷過濾程序。
REJECT和DROP其效果都可以使app無法聯網,所以兩個任你選擇使用。

如何區分是wifi或是2G/3G?
我們需要使用-o參數來區分是封包來源是wifi還是gprs,
參數 -o, --out-interface
范例 :

iptables -A FORWARD -o eth0

說明 用來比對封包要從哪片網卡送出,設定方式同上。
其中wifi有三種(參考droidwall):tiwlan+, wlan+, eth+
gprs有六種:rmnet+,pdp+,ppp+,uwbr+,wimax+,vsnet+"

下面還剩下一個問題,如何區分封包來自哪個app?
由于iptables處于7層協議下三層,應該是無法區分應用的。

這里要使用擴展模式-m 操作owner表
范例:

iptables -A OUTPUT -m owner --uid-owner 500

說明:用來比對來自本機的封包,是否為某特定使用者所產生的,這樣可以避免服務器使用 root 或其它身分將敏感數據傳送出去,可以降低系統被駭的損失。可惜這個功能無法比對出來自其它主機的封包。

下面給出一個完整的實例:

iptables -t filter -A OUTPUT -o wlan+  -m owner --uid-owner 10042 -j DROP

說明:操作filter(-t filter可以省略,默認操作filter表)的OUTPUT鏈,封包來源是wlan+,并且來源是uid為10042的,丟棄數據包。

執行過程如果出現:No chain/target/match by that name, 可能就是你的rom不支持該操作了。
iptables需1.4+版本
內核支持iptables操作,所以并不是所有root的rom都支持的。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容