前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >屏蔽国外IP访问的几种常用方法

屏蔽国外IP访问的几种常用方法

原创
作者头像
lowryli
修改2023-11-20 17:17:43
7.5K0
修改2023-11-20 17:17:43
举报
文章被收录于专栏:IT人小李IT人小李

一、背景

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

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

黑名单:

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

白名单:

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

二、使用Web应用防火墙或云防火墙

代码语言:javascript
复制
说明:此方法需要单独购买Web应用防火墙或云防火墙产品。

2.1 Web应用防火墙

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

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

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

2.1.2 方法二:配置黑白名单

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

详见:Web 应用防火墙 功能简介-操作指南-文档中心-腾讯云

2.2 云防火墙

2.2.1 配置访问控制规则

此处以“访问控制”下「互联网边界规则」为例说明,更多访问控制规则参见官网:云防火墙 互联网边界规则-操作指南-文档中心-腾讯云

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

在“添加入站规则”的弹窗中,可进行规则的配置。访问源类型可选 IP 地址、地理位置、云厂商和 云防火墙 地址模板-操作指南-文档中心-腾讯云

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

三、宝塔Nginx防火墙 禁止海外访问

代码语言:javascript
复制
说明:
1.安装配置简单,易操作
2.宝塔在实际商务中应用的安全性,缺乏官方权威验证,可自测使用

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段。

四、 域名解析方式

代码语言:javascript
复制
优点:非常简单
缺点:只能禁止通过域名方法的方式,不能禁止通过IP访问的方式

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

举例:腾讯云DNS解析为例:

设置A记录类型

解析线路:境外

记录值:127.0.0.1

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

五、 云安全组或系统软防火墙规则

5.1 云安全组

代码语言:javascript
复制
说明:云安全组可用来允许或拒绝某些流量,但无法从地理位置维度屏蔽国外IP。

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

5.2 系统软防火墙

黑名单屏蔽:首先需要得到国家IP段,下载地址(这里以china为例):http://www.ipdeny.com/ipblocks/data/countries/cn.zone

其他国家参见:IPdeny IP country CIDR blocks

这里以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

六、Nginx安装geoip2模块

代码语言:javascript
复制
说明:此方法来自网络,geoip2模块受ip地址数据库影响,也有可能存在信息同步不及时以及误判等情况,仅参考使用

6.1 下载nginx

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

#wget http://nginx.org/download/nginx-1.18.0.tar.gz

6.2 下载ngx_http_geoip2_module模块

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

#mv ngx_http_geoip2_module /usr/local

6.3 编译安装

[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]# ./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

6.4 查看nginx版本

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

6.5 下载最新的IP地址数据库文件

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

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

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

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

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

代码语言:javascript
复制
# cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf-bak
 # vim /usr/local/nginx/conf/nginx.conf
在http 中添加几行代码,定义数据库文件位置
geoip2 /usr/share/GeoIP/GeoLite2-City.mmdb {
auto_reload 5m;
$geoip2_data_country_code country iso_code;
}
  map $geoip2_data_country_code $allowed_country {
                default yes;
                CN no;
}

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

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

代码语言:javascript
复制
if ($allowed_country = yes) {
       # return https://www.baidu.com;
       # return /home/japan;
        return 404;
          }

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

代码语言:javascript
复制
# /usr/local/nginx/sbin/nginx -t
# /usr/local/nginx/sbin/nginx -s reload

6.6 测试验证

使用海外节点的服务器去访问网站,验证访问网站是否是配置的404 Not Found报错 。到此我们通过Nginx来实现禁止国外IP访问网站就结束了。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 二、使用Web应用防火墙或云防火墙
    • 2.1 Web应用防火墙
      • 2.1.1 方法一:全球地域封禁功能
      • 2.1.2 方法二:配置黑白名单
    • 2.2 云防火墙
      • 2.2.1 配置访问控制规则
      • 3.1 安装宝塔面板
      • 3.2 登录宝塔面板
      • 3.3 宝塔中安装Nginx免费防火墙
      • 3.4 配置防火墙(禁止海外访问)
  • 三、宝塔Nginx防火墙 禁止海外访问
  • 四、 域名解析方式
  • 五、 云安全组或系统软防火墙规则
    • 5.1 云安全组
      • 5.2 系统软防火墙
        • 5.2.1 安装ipset
        • 5.2.2 创建规则
        • 5.2.3 设定屏蔽或解除屏蔽
    • 六、Nginx安装geoip2模块
      • 6.1 下载nginx
        • 6.2 下载ngx_http_geoip2_module模块
          • 6.3 编译安装
            • 6.4 查看nginx版本
              • 6.5 下载最新的IP地址数据库文件
                • 6.6 测试验证
                相关产品与服务
                访问管理
                访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档