如何在iptables中阻止來自具有Geoip附件的國家的IP地址

我們將學習如何使用GeoIP數據庫和Linux IPTables阻止來自特定國家IP的流量。 iptables是基於命令的實用程序,用於配置作為Netfilter項目的一部分而實現的Linux防火牆的內核。 而GeoIP是對應於地理位置的IP地址的集合,其中地理位置被映射到分配給那些特定組織,城市,地區和國家的IP地址。 GeoIP數據庫中的地理坐標通常位於人口中心附近,因此不應將其用於標識特定的地址或家庭。 使用名為xt_geoip的模塊,該模塊由Iptables xtables-addon和GeoIP數據庫組成。

更新和安裝依賴項

首先,我們必須升級我們的Linux系統,然後繼續安裝xtables-addons所需的依賴項。 為此,我們將運行以下命令,這些命令與在計算機上運行的發行版相對應。

基於Debian的系統(DebianUbuntu,Linux Mint)

# apt-get update && apt-get upgrade
# apt-get install iptables-dev xtables-addons-common libtext-csv-xs-perl pkg-config

基於RedHat的系統(CentOS,RHEL,Fedora)

# yum update
# yum install gcc-c++ make automake kernel-devel-`uname -r` wget unzip iptables-devel perl-Text-CSV_XS

安裝xtables-addons

升級系統並安裝所有依賴項後,我們將在計算機上安裝xtables-addons。 為此,我們將使用wget從xtables-addons項目的官方網站下載最新的tarball。 下載完成後,我們將解壓縮存檔,然後編譯並將其安裝在我們的計算機上。

# wget http://downloads.sourceforge.net/project/xtables-addons/Xtables-addons/xtables-addons-2.13.tar.xz
# tar xf xtables-addons-2.13.tar.xz
# cd xtables-addons-2.13
# ./configure
# make
# make install

允許SELinux加載模塊(基於RedHat系統)

由於發行基於RedHat,即 CentOS,RHEL和Fedora在默認情況下啟用了SELinux,我們必須如下調整SELinux策略。 否則,SELinux將阻止xt_geoip引導模塊的IPTables。

# chcon -vR --user=system_u /lib/modules/$(uname -r)/extra/*.ko
# chcon -vR --type=lib_t /lib64/xtables/*.so

安裝GeoIP數據庫

接下來,我們將運行Xtables-addons擴展隨附的名為xt_geoip的模塊,該模塊將從MaxMind下載GeoIP數據庫並將其轉換為xt_geoip可以識別的二進制形式。 加載後,我們將創建它並將其移動到xt_geoip中的所需路徑,即 / usr / share / xt_geoip /。

# cd geoip
# ./xt_geoip_dl
# ./xt_geoip_build GeoIPCountryWhois.csv
# mkdir -p /usr/share/xt_geoip/
# cp -r {BE,LE} /usr/share/xt_geoip/

阻止來自該國的交通

如果一切按預期進行,我們應該能夠使用防火牆上的IPTables實用程序來使用GeoIP模塊。

使用iptables

這是將IPTables與GeoIP模塊一起使用以阻止源自某個國家或發往某個國家的流量的基本語法。 在這裡我們必須使用 兩個字母的代碼ISO3166 而不是某個國家/地區,例如,俄羅斯的RU,愛爾蘭的IE,印度的IN,中國的CN等。

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

現在,如果我們要阻止來自印度(IN)和美國(US)的傳入流量,我們將為Iptables編寫以下命令。

# iptables -I INPUT -m geoip --src-cc IN,US -j DROP

如果要在服務器上阻止俄羅斯境外的所有傳入流量,則必須執行以下步驟。

# iptables -I INPUT -m geoip ! --src-cc RU -j DROP

[email protected]:~# ping 213.159.209.228                                                                                                                         
PING 213.159.209.228 (213.159.209.228) 56(84) bytes of data.

當我們嘗試從俄羅斯以外的網絡ping服務器時,沒有任何答案。 由於Iptables配置是在運行時應用的,並且未保存,因此在重新啟動服務器後,我們收到了來自服務器的ping響應。 如果要阻止發往印度(IN)的傳出流量,則需要運行以下命令。

# iptables -A OUTPUT -m geoip --dst-cc IN -j DROP

使用防火牆

如果我們登錄到一個基於Systemd的系統,並用firewalld作為前端IPTables的控制器,那麼我們也可以將firewalld用於上述任務。

    # firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -m geoip --src-cc IN,UN -j DROP

    # firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -m geoip ! --src-cc RU -j DROP

    # firewall-cmd --direct --add-rule ipv4 filter OUTPUT 0 -m geoip --dst-cc IN -j DROP

帶有GeoIP模塊的iptables對於防止來自某些國家的DOS,DDOS攻擊非常重要。 如果要限制從特定國家/地區訪問您的網站/服務器,這也非常有效。 因此,必須將GeoIP模塊與iptables-addons一起安裝才能具有允許或拒絕某些國家/地區的設置。 因此,如果您有任何問題,建議或反饋,請在下面的評論框中寫下。 謝謝 ! 祝你好運 微笑

Sidebar