运维圈里有句话说的好,“国内业务屏蔽海外访问,能解决你99%的问题”,这次我们就试着从这里了解一下网站访问限制的各种实现方式。在运维圈中,确实存在这样的说法,即通过屏蔽海外访问可以解决很多网络问题。这种策略通常用于优化网络性能、提高安全性或遵守法律法规。以下是几种常见的实现网站访问限制的方式:
1.
地理IP限制:
通过识别访问者的IP地址,并根据IP地址的地理位置信息来限制访问。例如,可以设置规则,允许国内IP访问,而阻止海外IP。
2.
DNS解析控制:
通过DNS解析策略,将海外用户的请求重定向到其他服务器或直接拒绝服务。
3.
防火墙规则:
在网络防火墙上设置规则,允许或拒绝特定IP地址或IP地址范围的访问。
4.
内容分发网络(CDN):
使用CDN服务,可以设置访问控制策略,根据访问者的地理位置来提供不同的内容。
5.
访问控制列表(ACL):
在网络设备上配置ACL,允许或拒绝特定IP地址的访问。
6.
反向代理:
使用反向代理服务器,可以控制哪些请求被转发到后端服务器,从而实现访问控制。
7.
API网关:
对于API服务,可以使用API网关来控制哪些客户端可以访问API,以及他们可以访问哪些资源。
8.
用户身份验证:
通过要求用户登录或提供访问令牌,可以控制只有授权用户才能访问网站。
9.
速率限制:
对特定IP地址或用户进行速率限制,以防止滥用或攻击。
10.
SSL/TLS加密:
使用SSL/TLS加密连接,可以确保数据在传输过程中的安全性,并可能限制某些类型的网络攻击。
每种方法都有其优缺点,选择合适的方法取决于网站的具体需求、安全策略和性能要求。在实际操作中,可能需要结合多种方法来实现有效的访问控制。
第一步:通过DNS解析厂商进行
一般情况下扫描器会针对域名进行扫描,我们可以在dns解析处做第一层防御,将海外线路解析为127.0.0.1,配置完成后海外扫描器就几乎都失效了
1 第二步:通过Nginx进行限制
通过域名解析后下一步会进入CDN,WAF网站防火墙,硬件设备或直接通往源站,此时我们可以对请求进行更细的过滤,这里主要讲一下通过网站防火墙配置和Nginx配置。
1.地区访问限制
前面提到的是通过DNS解析来对域名进行禁海外访问,但如果攻击者使用IP来扫描就没办法了,所以我们需要在服务器或应用上进行限制。
Nginx实现根据国家/城市进行访问限制
Nginx使用模块
ngx_http_geoip_module
来实现对国家/城市访问限制
安装方式如下:
1.1 安装maxminddb library(geoip2扩展依赖)
Ubuntu
apt install libmaxminddb0 libmaxminddb-dev mmdb-bin
Centos
yum install libmaxminddb-devel -y
1.2 下载ngx_http_geoip2_module模块
进入root目录,然后克隆模块
cd root && git clone https://github.com/leev/ngx_http_geoip2_module.git
1.3 把模块编译到Nginx
手工编译方式
./configure --add-module=/root/ngx_http_geoip2_module
1.4 下载Geoip数据库
模块安装成功后,还要在 Nginx 里指定数据库,位于 /usr/share/GeoIP/ 目录下,一个只有 IPv4,一个包含 IPv4 和 IPv6:
数据库地址:
cd /usr/local/share/GeoIP
wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.mmdb.gz
wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.mmdb.gz
1.5 添加配置到Nginx主配置文件
geoip2 /usr/local/share/GeoIP/GeoLite2-Country.mmdb {$geoip2_data_country_code country iso_code;}map $geoip2_data_country_code $allowed_country { default yes; CN no; }
1.6 修改Nginx虚拟主机的配置文件,在server段内添加后重载nginx
if ($allowed_country = yes) { return 403; }
至此配置完成