這兩天發現 ubuntu-20.04.3-live-server-amd64.iso
這個 BitTorrent 的 ISO image 有大量來自 CN 的連線在狂抓,導致整個上傳頻寬都被吃滿:
沒想到第一次用 iptables 的 xt_geoip 居然是這個用途... 主要是參考「GeoIP Blocking Ubuntu 20.04LTS」這邊的方法,不過因為我的 rtorrent 是跑在 Docker 裡面的,有另外要注意的地方。
首先是安裝軟體,這邊要裝 xtables-addons-common 與 libtext-csv-xs-perl:
sudo apt install -y libtext-csv-xs-perl xtables-addons-common
再來是建立目錄,並且下載一包 GeoIP 的資料 (從 DBIP 下載) 並且轉成 xt_geoip 可以用的格式:
sudo mkdir /usr/share/xt_geoip
cd /usr/share/xt_geoip
sudo /usr/lib/xtables-addons/xt_geoip_dl
sudo /usr/bin/perl /usr/lib/xtables-addons/xt_geoip_build
然後就是加到 iptables 的條件裡面了,我加到兩個地方,一個是 INPUT
chain,另外一個是 DOCKER-USER
chain (參考「Docker and iptables」這邊的說明),假設你是用 port 6991 的話就這樣加:
sudo iptables -I INPUT -p tcp -m geoip --source-country CN -m tcp --dport 6991 -j DROP
sudo iptables -I DOCKER-USER -p tcp -m geoip --source-country CN -m tcp --dport 6991 -j DROP
然後可以考慮每個禮拜更新一次資料庫。
另外在找資料的時候發現「Free updated GeoIP legacy databases」這邊有人放出 MaxMind 的版本,不過免費版的應該都差不多,這邊就用 xtables-addons-common 內預設的。
弄完以後就正常多了...