网站的客户和受众人群都是国内的,不想让国外访问;或者站长监测到国外肉鸡一直有扫描或攻击。这时就需要对对境外IP进行进行过滤和屏蔽;对IP进行过滤屏蔽只有两种方法:加白
和加黑
; 加白
就是把允许访问的添加入白名单中,没在白名单中的都进行屏蔽过滤,不允许访问;加黑
就是把不允许访问的加入到黑名单中,没在黑名单中的完全放开,都可以进行访问。那么两种方法怎么选择呢?并且要怎样去屏蔽呢?
黑白名单
作为运维的对黑白名单肯定不会默认,但是他们的使用场景是完全不同的。根据不同场景要求,选择是加白
还是加黑
是很重要的。正确选择可以让我们事半功倍,而且便于后期维护,反之亦然。那么他们哪些场景选择黑名单?哪些场景选择白名单呢?黑白名单的选择是根据场景需求中目标数量的比较决定的。
黑名单
要屏蔽的目标数量远远小于允许访问的数量时,就选择黑名单。只需要把需要屏蔽的加入黑名单中,其他完全放开就可以了。
白名单
允许访问的目标数量远远小于要屏蔽的数量时就选择白名单。
工具
ipset
是iptables
的扩展,它允许你创建匹配整个IP
地址集合的规则。可以快速的让我们屏蔽某个IP
段。
屏蔽方法
DNS屏蔽
原理: 利用域名解析来禁止掉海外IP访问。绝大多数域名解析服务商都是提供电信联通移动海外线路区分解析的,所以我们可以充分利用这个功能,来禁止海外访问。
以阿里云DNS解析为例:
设置A记录类型
解析线路:境外
记录值:127.0.0.1
设置后等30分钟后我们再用ping工具测试下境外解析,就会发现所有的海外线路都会解析至127.0.0.1这个IP上,为什么是127.0.0.1呢?因为这个是本地IP,如果有攻击海外肉鸡攻击这个网站,就会自己攻击自己。
黑名单屏蔽
首先需要得到国家IP
段,下载地址:http://www.ipdeny.com/ipblocks/。这里以我们国家为例。
安装ipset
1 | #Debian/Ubuntu系统 |
创建规则
1 | #创建一个名为cnip的规则 |
开始屏蔽
1 | iptables -I INPUT -p tcp -m set --match-set cnip src -j DROP |
解除屏蔽
1 | #-D为删除规则 |
一键执行
为了便于实时,这里我写了个脚本,可以一键执行。适用于CentOS
、Debian
、Ubuntu
等常用系统
1 | vim sunblock.sh |
封禁ip
时会要求你输入国家代码,代码查看:点击进入。记住所填参数均为小写字母。比如JAPAN (JP)
,我们就输入jp
这个参数。注意:封禁国内时要特别注意,如封禁国内会造成登录服务器失败
演示
封禁IP
查看封禁列表
解封IP
白名单屏蔽
有同学会说国外那么多国家,我不可能一个个国家去进行屏蔽吧。只需要国内访问或个别几个国家访问。那就选择白名单,把允许的几个国家加入白名单中,其他全部屏蔽掉即可。已中国为例:
获取列表
1 | #下面语句可以单独执行,不需要每次执行都获取网段表 |
一键执行
脚本一
1 | mmode=$1 |
将上面内容保存为/root/allcn.sh,并授予可执行权限
运行
/root/allcn.sh
运行后国外IP无法访问网站
停止
/root/allcn.sh stop
运行后国外IP恢复访问网站
脚本二
1 |
|