简述
最近有个客户想要备案,因为国内的制度是备案必须关站,所以在不影响备案的情况下还能允许非国内IP的访问这就用到了屏蔽国内IP的方法,当然也有屏蔽备案地IP的办法,不过很容易不过审(比如在深圳备案,就屏蔽深圳所有IP)。
方法
用 iptables 屏蔽所有国内IP
- 先到 IPdeny 下载以国家代码编制好的 IP 地址列表,比如下载 cn.zone:
# wget http://www.ipdeny.com/ipblocks/data/countries/cn.zone
- 有了国家的所有 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/
Windows 10Chrome 75.0.3770.80来自 火星 的大神
让我想到了分区域解析,貌似更方便,主机配置都不用动
貌似并不管用。
分区解析容易出现指定线路不解析反而变成其他地址解析。。猜想的。