如何在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