關於iptables的常用命令,請参考我朋友的博客。 android上使用iptables一般做代理和app防火牆功能。 有幾個開源項目,推薦大家去googlecode上去找找: droidwall:app網络防火牆; proxydroid:代理app,支持多種網络協議; gaeproxy:代理app,自己有python的服務端,貌似可以翻牆哦親。 以上軟件都需要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 Api.java):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都支持的。 今天先說app防火牆,改天再講代理(提前說明,代理操作nat表)。 |
2013年5月28日 星期二
android iptables小結
http://rritw.com/a/JAVAbiancheng/JAVAzonghe/20120831/215417.html
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言