當前位置:編程學習大全網 - 源碼下載 - 如何在Linux上按國別阻止網絡流量

如何在Linux上按國別阻止網絡流量

作為壹名維護生產環境Linux服務器的系統管理員,在有些情況下,妳需要根據地理位置,有選擇性地阻止或允許網絡流量。比如說,妳遇到了拒絕服務攻擊,這些攻擊主要源自在某壹個國家註冊的IP地址。在其他情況下,出於安全方面的原因,妳又想要阻止外國來歷不明SSH登錄請求;或者貴公司對在線視頻擁有發行權,因而只可以分發給某些國家;或者由於地域限制方面的公司政策,妳需要防止本地主機將文檔上傳到非美國遠程雲存儲系統。

所有這些場景都需要能夠安裝壹個防火墻,可以按國別對流量進行過濾。有幾種方法可以做到這壹點。舉例說,妳可以使用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或任何受到危及的中繼主機,就很容易欺騙來源/目的地國家。基於地域的過濾甚至會阻止本不該被禁止的合法流量。明白這個局限性後,再決定將它部署到妳的生產環境中也不遲。

  • 上一篇:如何選擇網站的關鍵詞網站如何選擇網站關鍵詞
  • 下一篇:終末之詩的終末之詩
  • copyright 2024編程學習大全網