centos7下使用iptables屏蔽所有中国IP

简述

最近有个客户想要备案,因为国内的制度是备案必须关站,所以在不影响备案的情况下还能允许非国内IP的访问这就用到了屏蔽国内IP的方法,当然也有屏蔽备案地IP的办法,不过很容易不过审(比如在深圳备案,就屏蔽深圳所有IP)。

方法

用 iptables 屏蔽所有国内IP

  1. 先到 IPdeny 下载以国家代码编制好的 IP 地址列表,比如下载 cn.zone:
# wget http://www.ipdeny.com/ipblocks/data/countries/cn.zone
  1. 有了国家的所有 IP 地址,要想屏蔽这些 IP 就很容易了,直接写个脚本逐行读取 cn.zone 文件并加入到 iptables 中: 复制代码 代码如下:
#!/bin/bash
# Block traffic from a specific country

COUNTRY="cn"
IPTABLES=/sbin/iptables
EGREP=/bin/egrep
if [ "$(id -u)" != "0" ]; then
   echo "you must be root" 1>&2
   exit 1
fi
resetrules() {
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -t mangle -F
$IPTABLES -X
}
resetrules
for c in $COUNTRY
do
        country_file=$c.zone
        IPS=$($EGREP -v "^#|^$" $country_file)
        for ip in $IPS
        do
           echo "blocking $ip"
           $IPTABLES -A INPUT -s $ip -j DROP
        done
done
exit 0

将上面代码保存为cn.sh 上传到服务器,然后赋予777权限,运行。
如果出现 /bin/bash^M: bad interpreter: No such file or directory
是因为windows和linux的编码问题导致的。
可以使用 yum install dos2unix
安装转换工具然后 dos2unix cn.sh 或者 vi filename打开文件,执行 : set ff=unix 设置文件为unix,然后执行:wq,保存成unix格式。
这样就可以屏蔽所有国内IP了。

参考文章:
https://www.okay686.cn/490.html
https://www.vpsee.com/2011/03/redirect-traffic-from-a-specific-country-to-a-specific-page-using-iptables/


 继续浏览关于 centosiptables 的文章

 本文最后更新于 2019/08/10 02:15:55,可能因经年累月而与现状有所差异

 引用转载请注明:icret > 教程 > centos7下使用iptables屏蔽所有中国IP

精选评论

  1. 欧文斯
    欧文斯 回复

    Windows 10Chrome 75.0.3770.80

    让我想到了分区域解析,貌似更方便,主机配置都不用动 icon_redface.gif

    1. administrator

      貌似并不管用。 icon_neutral.gif
      分区解析容易出现指定线路不解析反而变成其他地址解析。。猜想的。