自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何在Linux上按國別阻止網(wǎng)絡(luò)流量?

譯文
安全
作為一名維護(hù)生產(chǎn)環(huán)境Linux服務(wù)器的系統(tǒng)管理員,在有些情況下,你需要根據(jù)地理位置,有選擇性地阻止或允許網(wǎng)絡(luò)流量。我在本教程中將介紹另一種基于iptables的GeoIP過濾機(jī)制,這種機(jī)制實(shí)施了xtables-addons。有些讀者對(duì)它還不熟悉,所以有必要先介紹一下,xtables-addons是一套面向netfilter/iptables的擴(kuò)展。

51CTO.com快譯】作為一名維護(hù)生產(chǎn)環(huán)境Linux服務(wù)器的系統(tǒng)管理員,在有些情況下,你需要根據(jù)地理位置,有選擇性地阻止或允許網(wǎng)絡(luò)流量。比如說,你遇到了拒絕服務(wù)攻擊,這些攻擊主要源自在某一個(gè)國家注冊的IP地址。在其他情況下,出于安全方面的原因,你又想要阻止外國來歷不明SSH登錄請(qǐng)求;或者貴公司對(duì)在線視頻擁有發(fā)行權(quán),因而只可以分發(fā)給某些國家;或者由于地域限制方面的公司政策,你需要防止本地主機(jī)將文檔上傳到非美國遠(yuǎn)程云存儲(chǔ)系統(tǒng)。

 如何在Linux上按國別阻止網(wǎng)絡(luò)流量?

所有這些場景都需要能夠安裝一個(gè)防火墻,可以按國別對(duì)流量進(jìn)行過濾。有幾種方法可以做到這一點(diǎn)。舉例說,你可以使用TCP包裝器(TCP wrapper),針對(duì)個(gè)別應(yīng)用程序(比如SSH、NFS和httpd)設(shè)置有條件的阻止。其缺點(diǎn)是,你想要保護(hù)的那個(gè)應(yīng)用程序在開發(fā)當(dāng)初必須支持TCP包裝器。此外,TCP包裝器并非普遍出現(xiàn)在不同的平臺(tái)上(比如說,Arch Linux已停止對(duì)TCP包裝器的支持)。另一種辦法就是,利用基于國家的GeoIP信息來設(shè)置ipset,然后將它運(yùn)用于iptables規(guī)則。后一種方法更有希望,因?yàn)榛趇ptables的過濾與應(yīng)用程序無關(guān),而且易于設(shè)置。

我在本教程中將介紹另一種基于iptables的GeoIP過濾機(jī)制,這種機(jī)制實(shí)施了xtables-addons。有些讀者對(duì)它還不熟悉,所以有必要先介紹一下,xtables-addons是一套面向netfilter/iptables的擴(kuò)展。xtables-addons內(nèi)含了一個(gè)名為xt_geoip的模塊,該模塊擴(kuò)展了netfilter/iptables的功能,可以根據(jù)來源/目的地國家,過濾、NAT或管理數(shù)據(jù)包。如果你想使用xt_geoip,不需要重新編譯內(nèi)核或iptables,只需要構(gòu)建xtables-addons模塊,并使用當(dāng)前的內(nèi)核構(gòu)建環(huán)境(/lib/modules/`uname -r`/build)。也不需要重啟。一旦你構(gòu)建并安裝好了xtables-addons,xt_geoip立即就可以與iptables結(jié)合使用。

至于xt_geoip和ipset之間的區(qū)別,官方來源(http://xtables-addons.sourceforge.net/geoip.php)提到,xt_geoip在內(nèi)存占用空間方面少于ipset。不過在匹配速度方面,基于散列的ipset可能具有優(yōu)勢。

在本教程其余部分,我會(huì)演示如何使用iptables/xt_geoip,根據(jù)來源/目的地國家,阻止網(wǎng)絡(luò)流量。

將Xtables-addons安裝到Linux上

下面介紹如何編譯xtables-addons,并將它安裝到不同的Linux平臺(tái)上。

想構(gòu)建xtables-addons,你就需要先安裝幾個(gè)依賴程序包。

·將依賴程序包安裝到Debian、Ubuntu或Linux Mint上

$ sudo apt-get install iptables-dev xtables-addons-common 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

從官方網(wǎng)站(http://xtables-addons.sourceforge.net)下載最新的xtables-addons源代碼,然后構(gòu)建/安裝它,如下所示。

$wget http://downloads.sourceforge.net/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

請(qǐng)注意:如果是默認(rèn)情況下已啟用SELinux的基于紅帽的系統(tǒng)(CentOS、RHEL、Fedora),有必要調(diào)整SELinux策略,如下所示。要不然,SELinux會(huì)阻止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數(shù)據(jù)庫

下一步是安裝GeoIP數(shù)據(jù)庫,xt_geoip將用到該數(shù)據(jù)庫,用于IP與國別映射。很方便的是,xtables-addons源程序包隨帶兩個(gè)幫助腳本,可分別用來從MaxMind下載GeoIP數(shù)據(jù)庫,并將它轉(zhuǎn)換成xt_geoip可識(shí)別的二進(jìn)制格式。這些腳本位于源程序包里面的geoip文件夾下面。按照下列說明,即可構(gòu)建GeoIP數(shù)據(jù)庫,并將它安裝到你系統(tǒng)上。

$ 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

據(jù)MaxMind聲稱,其GeoIP數(shù)據(jù)庫的準(zhǔn)確性達(dá)到99.8%,數(shù)據(jù)庫更每月都更新。為了確保本地安裝的GeoIP數(shù)據(jù)庫內(nèi)容最新,你就需要設(shè)置每月執(zhí)行的計(jì)劃任務(wù),以便每月更新一次本地GeoIP數(shù)據(jù)庫。

阻止來自或發(fā)往某個(gè)國家的網(wǎng)絡(luò)流量

一旦xt_geoip模塊和GeoIP數(shù)據(jù)庫都已安裝好,你就可以立即使用iptables命令中的geoip匹配選項(xiàng)。

$ sudo iptables -m geoip --src-cc country[,country...] --dst-cc country[,country...]

你想要阻止的國家使用兩個(gè)字母ISO3166代碼來指定,比如說US(美國)、CN(中國)、IN(印度)和FR(法國)。

比如說,如果你想阻止來自也門(YE)和贊比亞(ZM)的入站流量,下面這個(gè)iptables命令就能實(shí)現(xiàn)。

$ sudo iptables -I INPUT -m geoip --src-cc YE,ZM -j DROP

如果你想阻止發(fā)往中國(CN)的出站流量,只要運(yùn)行下面這個(gè)命令。

$ sudo iptables -A OUTPUT -m geoip --dst-cc CN -j DROP

匹配條件也可以被“抵消”,只要將“!”放在“--src-cc”或“--dst-cc”的前面。比如說:

如果你想在服務(wù)器上阻止所有非美國的入站流量,可以運(yùn)行這個(gè)命令:

$ sudo iptables -I INPUT -m geoip ! --src-cc US -j DROP

針對(duì)Firewall-cmd用戶

像CentOS/RHEL 7或Fedora這一些發(fā)行版已將iptables換成firewalld,作為默認(rèn)防火墻服務(wù)器。在這類系統(tǒng)上,你同樣可以利用xt_geoip,使用firewall-cmd阻止流量。上面三個(gè)例子可以用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

結(jié)束語

我在本教程中介紹了iptables/xt_geoip,這是一種簡單方法,可以根據(jù)來源/目的地國家,對(duì)網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行過濾。如果需要的話,可以將這件有用的武器部署到你的防火墻系統(tǒng)中。最后提醒一句,我應(yīng)該提到:基于GeoIP的流量過濾并不是在你服務(wù)器上阻止某些國家的萬無一失的方法。GeoIP數(shù)據(jù)庫天生就不準(zhǔn)確/不完整,如果使用VPN、Tor或任何受到危及的中繼主機(jī),就很容易欺騙來源/目的地國家?;诘赜虻倪^濾甚至?xí)柚贡静辉摫唤沟暮戏髁俊C靼走@個(gè)局限性后,再?zèng)Q定將它部署到你的生產(chǎn)環(huán)境中也不遲。

原文標(biāo)題:How to block network traffic by country on Linux,作者:Dan Nanni

【51CTO.com獨(dú)家譯文,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明出處】

責(zé)任編輯:何妍 來源: 51CTO.com
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)