所有這些場景都需要能夠安裝壹個防火墻,可以按國別對流量進行過濾。有幾種方法可以做到這壹點。舉例說,妳可以使用TCP包裝器(TCP wrapper),針對個別應用程序(比如SSH、NFS和mon libtext-csv-xs-perl pkg-config
·將依賴程序包安裝到CentOS、RHEL或Fedora上
CentOS/RHEL 6需要先安裝EPEL軟件庫(面向perl-Text-CSV_XS)。
$ sudo yum install gcc-c++ make automake kernel-devel-`uname -r` wget unzip iptables-devel perl-Text-CSV_XS
編譯和安裝Xtables-addons
從官方網站()下載最新的xtables-addons源代碼,然後構建/安裝它,如下所示。
$wget /project/xtables-addons/Xtables-addons/xtables-addons
-2.10.tar.xz
$ tar xf xtables-addons-2.10.tar.xz
$ cd xtables-addons-2.10
$ ./configure
$ make
$ sudo make install
請註意:如果是默認情況下已啟用SELinux的基於紅帽的系統(CentOS、RHEL、Fedora),有必要調整SELinux策略,如下所示。要不然,SELinux會阻止iptables裝入xt_geoip模塊。
$ sudo chcon -vR --user=system_u /lib/modules/$(uname -r)/extra/*.ko
$ sudo chcon -vR --type=lib_t /lib64/xtables/*.so
為Xtables-addons安裝GeoIP數據庫
下壹步是安裝GeoIP數據庫,xt_geoip將用到該數據庫,用於IP與國別映射。很方便的是,xtables-addons源程序包隨帶兩個幫助腳本,可分別用來從MaxMind下載GeoIP數據庫,並將它轉換成xt_geoip可識別的二進制格式。這些腳本位於源程序包裏面的geoip文件夾下面。按照下列說明,即可構建GeoIP數據庫,並將它安裝到妳系統上。
$ cd geoip
$ ./xt_geoip_dl
$ ./xt_geoip_build GeoIPCountryWhois.csv
$ sudo mkdir -p /usr/share/xt_geoip
$ sudo cp -r {BE,LE} /usr/share/xt_geoip
據MaxMind聲稱,其GeoIP數據庫的準確性達到99.8%,數據庫更每月都更新。為了確保本地安裝的GeoIP數據庫內容最新,妳就需要設置每月執行的計劃任務,以便每月更新壹次本地GeoIP數據庫。
阻止來自或發往某個國家的網絡流量
壹旦xt_geoip模塊和GeoIP數據庫都已安裝好,妳就可以立即使用iptables命令中的geoip匹配選項。
$ sudo iptables -m geoip --src-cc country[,country...] --dst-cc country[,country...]
妳想要阻止的國家使用兩個字母ISO3166代碼來指定,比如說US(美國)、CN(中國)、IN(印度)和FR(法國)。
比如說,如果妳想阻止來自也門(YE)和贊比亞(ZM)的入站流量,下面這個iptables命令就能實現。
$ sudo iptables -I INPUT -m geoip --src-cc YE,ZM -j DROP
如果妳想阻止發往中國(CN)的出站流量,只要運行下面這個命令。
$ sudo iptables -A OUTPUT -m geoip --dst-cc CN -j DROP
匹配條件也可以被“抵消”,只要將“!”放在“--src-cc”或“--dst-cc”的前面。比如說:
如果妳想在服務器上阻止所有非美國的入站流量,可以運行這個命令:
$ sudo iptables -I INPUT -m geoip ! --src-cc US -j DROP
針對Firewall-cmd用戶
像CentOS/RHEL 7或Fedora這壹些發行版已將iptables換成firewalld,作為默認防火墻服務器。在這類系統上,妳同樣可以利用xt_geoip,使用firewall-cmd阻止流量。上面三個例子可以用firewall-cmd來改寫,如下所示。
$ sudo firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -m geoip --src-cc YE,ZM -j DROP
$ sudo firewall-cmd --direct --add-rule ipv4 filter OUTPUT 0 -m geoip --dst-cc CN -j DROP
$ sudo firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -m geoip ! --src-cc US -j DROP
結束語
我在本教程中介紹了iptables/xt_geoip,這是壹種簡單方法,可以根據來源/目的地國家,對網絡數據包進行過濾。如果需要的話,可以將這件有用的武器部署到妳的防火墻系統中。最後提醒壹句,我應該提到:基於GeoIP的流量過濾並不是在妳服務器上阻止某些國家的萬無壹失的方法。GeoIP數據庫天生就不準確/不完整,如果使用VPN、Tor或任何受到危及的中繼主機,就很容易欺騙來源/目的地國家。基於地域的過濾甚至會阻止本不該被禁止的合法流量。明白這個局限性後,再決定將它部署到妳的生產環境中也不遲。