相关动态
屏蔽国外IP访问的几种常用方法
2024-12-01 14:23
屏蔽国外IP访问的几种常用方法 访问

一、背景

网站的客户和受众人群都是国内的,不想让国外访问;或者站长监测到国外肉鸡一直有扫描或攻击。这时就需要对境外IP进行进行过滤和屏蔽;对IP进行过滤屏蔽一般有两种方法:加白和加黑。

加白就是把允许访问的添加入白名单中,没在白名单中的都进行屏蔽过滤,不允许访问;加黑就是把不允许访问的加入到黑名单中,没在黑名单中的完全放开,都可以进行访问。接下来介绍下屏蔽国外IP访问的几种常见方法。

黑名单:

要屏蔽的目标数量远远小于允许访问的数量时,就选择黑名单。只需要把需要屏蔽的加入黑名单中,其他完全放开就可以了。

白名单:

允许访问的目标数量远远小于要屏蔽的数量时就选择白名单。

2.1.1 方法一:全球地域封禁功能

登录 ,在左侧导航栏,选择配置中心-基础安全-访问控制,进入基础安全页面,设置并开启“地域封禁”功能。

此时您选择封禁的地区,将无法访问您的网站。本文将国外全部地区列入封禁地域后,以境外 IP 地址访问防护网站,会提示您已被腾讯云 Web 应用防火墙拦截。

2.1.2 方法二:配置黑白名单

腾讯云 Web 应用防火墙的黑白名单功能,指的是对经过 Web 应用防火墙防护域名的访问源 IP 进行黑白名单设置,以及对多个 HTTP 特征进行精准白名单设置,主要功能包括: IP 黑白名单设置、精准白名单和规则白名单设置

详见:

2.2.1 配置访问控制规则

此处以“访问控制”下「互联网边界规则」为例说明,更多访问控制规则参见官网:

登录 ,在左侧导航栏中,选择访问控制 -互联网边界规则-入站规则

在“添加入站规则”的弹窗中,可进行规则的配置。访问源类型可选 IP 地址、地理位置、云厂商和 。

说明:仅企业版和旗舰版云防火墙支持“地理位置”功能,如需使用该功能,可以升级为「企业版」或「旗舰版」云防火墙。

3.1 安装宝塔面板

1、需要在linux系统中安装好宝塔面板,可参考以下文档进行安装宝塔:https://cloud.tencent.com/developer/article/1884579

2、在宝塔中安装好LNMP,安装好Nginx(注:网站搭建的底层架构是Nginx)

为方便介绍,本例以腾讯云轻量应用服务器(LH)为例,一般新购LH后,默认是安装了宝塔面板,即可配置使用。

3.2 登录宝塔面板

1. 确认宝塔应用已安装

2. 防火墙放行面板端口并初始化登录账号密码

3.登录宝塔面板网址

3.3 宝塔中安装Nginx免费防火墙

3.4 配置防火墙(禁止海外访问)

打开防火墙的设置-全局设置-禁止海外访问,禁止中国大陆以外的地区访问站点;开启这个功能就可以了,这是通过IP段来屏蔽或者是放行的,所以也有可能存在IP段更新同步不及时以及误判等情况,请知晓。

说明:可通过「同步」操作更新国内IP段,同时也可以在「设置」里添加遗漏的国内IP段。

方法:设置域名拒绝IP直接访问。域名解析记录值的境外设置可以填写127.0.0.1或一个内网IP地址,国内可以填写正常的IP的地址来解析,而国外IP访问域名的时候,由于解析的是一个内网地址,是无法正常访问的。

举例:以解析为例:

设置A记录类型

解析线路:境外

记录值:127.0.0.1

验证:设置后等30分钟后我们再用ping拨测下境外解析,就会发现所有的海外线路都会解析至127.0.0.1这个IP上。

一个安全组规则上限是200条(入规则100条,出规则100条),国内IP段有8674+,通过屏蔽国内所有IP段方式不太适合(甚至一个云资源关联多个安全组也不适合);因此建议在安全组中设置允许已知的IP地址登录:在安全组规则中,只添加允许已知的国内IP地址,其他IP地址拒绝访问。

黑名单屏蔽:首先需要得到国家IP段,下载地址(这里以china为例):

其他国家参见:

这里以iptables中的ipset为例,其他类型的软防火墙一个处理逻辑。ipset是iptables的扩展,它允许你创建匹配整个IP地址集合的规则,可以快速的让我们屏蔽某个IP段。

5.2.1 安装ipset

#CentOS系统

yum -y install ipset

#Debian/Ubuntu系统

apt-get -y install ipset

5.2.2 创建规则

#CentOS系统

#创建一个名为cnip的规则

ipset -N cnip hash:net

#下载国家IP段

wget -P . http://www.ipdeny.com/ipblocks/data/countries/cn.zone

#将IP段添加到cnip规则中

for i in $(cat /root/cn.zone ); do ipset -A cnip $i; done

#查看ipset list

ipset -L

#清空ipset list

ipset destroy cnip

5.2.3 设定屏蔽或解除屏蔽

#设定仅允许国内IP访问

iptables -I INPUT -m set --match-set cnip src -j ACCEPT

说明:如果仅禁止tcp协议,则添加参数-p tcp

#把 INPUT 规则链的默认策略设置为拒绝

(提醒:务必提前确认允许IP在cnip的IP段中,否则执行以下命令将会导致被禁用,请谨慎操作。出现异常可通过VNC登录调整规则)

iptables -P INPUT DROP

#-D为删除规则

iptables -D INPUT -m set --match-set cnip src -j ACCEPT

#查看封禁列表

iptables -L | grep match-set

安装 ngx_http_geoip2 模块至少需要nginx 1.18 版本及以上:

#wget

#git clone https://github.com/leev/ngx_http_geoip2_module.git

#mv ngx_http_geoip2_module /usr/local

[root@ddkk tmp]# tar -xf nginx-1.18.0.tar.gz

[root@ddkk tmp]# cd nginx-1.18.0/

[root@ddkk nginx-1.18.0]# https://cloud.tencent.cn/developer/article/configure --with-http_stub_status_module

--prefix=/usr/local/nginx

--user=nginx --group=nginx --with-http_ssl_module --with-stream

--add-module=/usr/local/ngx_http_geoip2_module #具体编译模块按实际情况

[root@ddkk nginx-1.18.0]# make

[root@ddkk nginx-1.18.0]# pkill nginx #杀死nginx

[root@ddkk nginx-1.18.0]# /usr/local/nginx/sbin/nginx #再次启动Nginx

# /usr/local/nginx/sbin/nginx -V

6.5.1 模块安装成功后,还要在 Nginx 里指定数据库,在安装运行库时默认安装了两个,位于 /usr/share/GeoIP/ 目录下,一个只有 IPv4,一个包含 IPv4 和 IPv6:

登录www.maxmind.com 网址,创建账户 下载最新的库文件(账户创建就不演示了)

选择GeoLite2 Country ,点击 Download GZIP 下载即可

上传到 /usr/share/GeoIP/ 下并解压

6.5.2 配置nginx 配置文件,修改前先备份配置文件

6.5.3 在server 中的 location 下添加条件,如果满足IP是国外IP就执行下面的return 动作,这里定义了3种, 注释了其中两个。

如:当访问IP 是国外IP ,直接返回404

6.5.4 修改完毕后, 检测下配置文件,重新加载下 nginx

    以上就是本篇文章【屏蔽国外IP访问的几种常用方法】的全部内容了,欢迎阅览 ! 文章地址:http://dh99988.xhstdz.com/quote/82696.html 
     栏目首页      相关文章      动态      同类文章      热门文章      网站地图      返回首页 物流园资讯移动站 http://dh99988.xhstdz.com/mobile/ , 查看更多   
发表评论
0评