CentOS 6 系列按国别阻止网络流量

CentOS 6 系列按国别阻止网络流量

服务器操作系统

CentOS release 6.5 (Final)
Linux version 2.6.32-431.el6.x86_64

安装准备

  1. 关闭SELinux:setenforce 0
  2. 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
  1. 编译需要在/usr/src/kernels/2.6.32-431.el6.x86_64/下有对应内核文件才能编译,部分虚拟机这个目录为空,需要从别的机房拷贝一份。
mkdir /usr/src/kernels/2.6.32-431.el6.x86_64/
cd /usr/src/kernels/2.6.32-431.el6.x86_64/
cp 2.6.32-431.el6.x86_64.tar.gz .
tar zxvf 2.6.32-431.el6.x86_64.tar.gz
rm -f 2.6.32-431.el6.x86_64.tar.gz

安装xtables-addons

由于内核版本问题,只能安装版本1.41

wget http://netix.dl.sourceforge.net/project/xtables-addons/Xtables-addons/xtables-addons-1.41.tar.xz
tar xf xtables-addons-1.41.tar.xz
cd xtables-addons-1.41
./configure
make
sudo make install

安装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

geoip数据库自动更新

vim /opt/scripts/xtables-addons-update.sh
GEOIP_MIRROR="http://geolite.maxmind.com/download/geoip/database"
TMPDIR=$(mktemp -d /tmp/geoipupdate.XXXXXXXXXX)

wget --no-verbose -t 3 -T 60 "${GEOIP_MIRROR}/GeoIPv6.csv.gz" -O "${TMPDIR}/GeoIPv6.csv.gz"
wget --no-verbose -t 3 -T 60 "${GEOIP_MIRROR}/GeoIPCountryCSV.zip" -O "${TMPDIR}/GeoIPCountryCSV.zip"
gzip -fdc ${TMPDIR}/GeoIPv6.csv.gz | ${TMPDIR}/GeoIPv6.csv
unzip -o -d ${TMPDIR} ${TMPDIR}/GeoIPCountryCSV.zip
mkdir -p /usr/share/xt_geoip
perl /opt/xtables-addons-1.41/geoip/xt_geoip_build -D /usr/share/xt_geoip ${TMPDIR}/GeoIP*.csv
[ -d "${TMPDIR}" ] |  rm -rf $TMPDIR

测试脚本

/bin/bash /opt/scripts/xtables-addons-update.sh

将脚本加入crontab

crontab -e
#update xtables geoip , This wil update every saturday at 09:00 the xtables IP addresses
00 09 * * 6 /bin/bash /opt/scripts/xtables-addons-update.sh

阻止来自或发往某个国家的网络流量

一旦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

结束语

我在本教程中介绍了iptables/xt_geoip,这是一种简单方法,可以根据来源/目的地国家,对网络数据包进行过滤。如果需要的话,可以将这件有用的武器部署到你的防火墙系统中。最后提醒一句,我应该提到:基于GeoIP的流量过滤并不是在你服务器上阻止某些国家的万无一失的方法。GeoIP数据库天生就不准确/不完整,如果使用VPN、Tor或任何受到危及的中继主机,就很容易欺骗来源/目的地国家。基于地域的过滤甚至会阻止本不该被禁止的合法流量。明白这个局限性后,再决定将它部署到你的生产环境中也不迟。

参考文献

如何在Linux上按国别阻止网络流量?
CentOS / RedHat 6.5 Xtables-addons installation, also puppet xtables-addons

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值