有幾個match可能可以拿來實現URL filter: destination, string, webstr, weburl
destination
iptables -D FORWARD -d www.google.com.tw -j DROP在某個版本以後的iptables會幫忙做DNS反查,若該Domain Name對應到多個IP時, iptables會幫你加上所有的rule
$iptables -L FORWARD -v -n Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 DROP all -- * * 0.0.0.0/0 72.14.203.106 0 0 DROP all -- * * 0.0.0.0/0 72.14.203.147 0 0 DROP all -- * * 0.0.0.0/0 72.14.203.99 0 0 DROP all -- * * 0.0.0.0/0 72.14.203.103 0 0 DROP all -- * * 0.0.0.0/0 72.14.203.104 0 0 DROP all -- * * 0.0.0.0/0 72.14.203.105但是如果你再試一次的話
$iptables -F FORWARD $iptables -A FORWARD -d www.google.com.tw -j DROP $iptables -L FORWARD -v -n Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 DROP all -- * * 0.0.0.0/0 64.233.183.104 0 0 DROP all -- * * 0.0.0.0/0 64.233.183.105 0 0 DROP all -- * * 0.0.0.0/0 64.233.183.106 0 0 DROP all -- * * 0.0.0.0/0 64.233.183.147 0 0 DROP all -- * * 0.0.0.0/0 64.233.183.99 0 0 DROP all -- * * 0.0.0.0/0 64.233.183.103IP變了...囧...但用來鎖一般的網站應該還OK...
string
iptables -A FORWARD -m string --string "www.google.com" –algo bm -j DROP這樣做應該可以成功阻擋連到google的封包, 但是你也會發現, 若是有些網頁的內容含有字串"www.google.com", 那麼那個網頁應該也不能開了, 一個可能的解法, 就是利用string match裡面的--from/--to去限制字串比對的範圍
webstr
iptables -A FORWARD -m webstr --url "www.google.com" -j DROP由xt_webstr.c, 可以大概知道, 他是去抓HTTP Get/Post/Head封包裡帶的URL來作比對
webstr解決string match比對範圍的問題, 多了些HTTP相關條件, 減少誤判的可能性
weburl
URL Filter有時候可能會用regex或某個關鍵字而非完整的URL; 如輸入"yahoo", 是要擋"www.yahoo.com"與"tw.yahoo.com", 這時候就可利用weburl
iptables -A FORWARD -m weburl --contains "yahoo" -j DROP原始碼可參考Gargoyle
參考資料:
[1] OpenWrt
[2] iptables webstr not blocking https
沒有留言:
張貼留言