Centos6下iptables配置Xtables-Addons和GeoIP屏蔽某个国家ip 和 解決方案

今天服务器上流量猛增,ip都来自于中国,而且是非正常访问的ip,导致php-fpm耗CPU 100%,网站打开非常慢,本来已经使用iptables限制连接数,但由于同一ip的连接数达不到,所以没办法进行限制,只能采用屏蔽某个地区ip的方法了,Xtables-Addons就是这样的模块,只需要编译此模块,而不必编译系统内核,就可以和iptables一起工作,达到过滤某个地区的ip。

第一步,检查系统iptables版本,Xtables-Addons要与iptables版本一致,例如iptables是1.4.7,就需要对应在的Xtables-Addons 1.47

  1. # uname -r
  2. 2.6.32-358.18.1.el6.x86_64
  3. # iptables -V
  4. iptables v1.4.7

那么就要下载Xtables-Addons 1.47了。

另外需要关闭selinux,编辑/etc/selinux/config,修改为disabled,并使其生效:echo 0 > /selinux/enforce。

第二步,安装perl-Text-CSV_XS依赖包

  1. # rpm -Uvh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
  2. # yum install gcc gcc-c++ make automake unzip zip xz kernel-devel-`uname -r` iptables-devel perl-Text-CSV_XS 

第三步,下载和编译xtables-addons模块

  1. # wget https://liquidtelecom.dl.sourceforge.net/project/xtables-addons/Xtables-addons/xtables-addons-1.47.tar.xz
  2. # tar xf xtables-addons-1.47.tar.xz
  3. # cd xtables-addons-1.47
  4. # ./configure
  5. # make
  6. # make install
错误: 如果在 make && make install 出现以下的错误


Xtables-addons 1.47 - Linux 2.6.32-754.6.3.el6.x86_64
if [ -n "/lib/modules/2.6.32-754.6.3.el6.x86_64/build" ]; then make -C /lib/modules/2.6.32-754.6.3.el6.x86_64/build M=/root/xtables-addons-1.47/extensions modules; fi;
make[3]: Entering directory `/usr/src/kernels/2.6.32-754.6.3.el6.x86_64'
  CC [M]  /root/xtables-addons-1.47/extensions/compat_xtables.o
/root/xtables-addons-1.47/extensions/compat_xtables.c: In function ‘xtnu_ipv6_find_hdr’:
/root/xtables-addons-1.47/extensions/compat_xtables.c:633: error: too few arguments to function ‘ipv6_find_hdr’

解决方案: 在 extensions 文档里执行以下的命令
sed -i '/define WITH_IPV6/d' compat_xtables.c xt_psd.c xt_length2.c xt_TARPIT.c xt_SYSRQ.c xt_RAWNAT.c


请安装iptables开发包iptables-devel:

  1. # yum -y install iptables-devel

第四步,下载和安装GeoIP模块,你可以到http://geolite.maxmind.com/download/geoip/database/下载CSV版本,也可以使用xtables-addons目录下geoip目录下的脚本xt_geoip_dl来下载:

  1. # cd geoip/
  2. # ./xt_geoip_dl
  3. 或者 wget https://geolite.maxmind.com/download/geoip/database/GeoLite2-Country-CSV.zip

将会下载GeoIPv6.csv.gz和GeoIPCountryCSV.zip,并解压缩,得到ip库文件GeoIPv6.csv和GeoIPCountryWhois.csv,接下来就是使用xt_geoip_build编译数据库:

  1. # mkdir -p /usr/share/xt_geoip/ #创建数据库文件默认存放位置
  2. # ./xt_geoip_build -D /usr/share/xt_geoip *.csv #编译数据库文件

完成后,将会生成两个目录BE和LE,目录下保存的文件分别有.iv6和.iv4。

第五步,添加过滤规则,屏蔽中国地区ip:

  1. # iptables -I INPUT -m geoip --src-cc CN -j DROP #注意,这将屏蔽所有端口访问
  2. # iptables -I INPUT -p tcp -m tcp --dport 80 -m geoip --src-cc CN -j DROP #只屏蔽80端口访问

评论

热门博文