引言
运维圈里有句话说的好,“国内业务屏蔽海外访问,能解决你99%的问题”,这次我们就试着从这里了解一下网站访问限制的各种实现方式。
第一步:通过DNS解析厂商进行
一般情况下扫描器会针对域名进行扫描,我们可以在dns解析处做第一层防御,将海外线路解析为127.0.0.1,配置完成后海外扫描器就几乎都失效了。
以阿里云为例:
第二步:通过Nginx进行限制
通过域名解析后下一步会进入CDN,WAF网站防火墙,硬件设备或直接通往源站,此时我们可以对请求进行更细的过滤,这里主要讲一下通过网站防火墙配置和Nginx配置。
1.地区访问限制
前面提到的是通过DNS解析来对域名进行禁海外访问,但如果攻击者使用IP来扫描就没办法了,所以我们需要在服务器或应用上进行限制。
Nginx实现根据国家/城市进行访问限制
Nginx使用模块ngx_http_geoip_module
来实现对国家/城市访问限制
安装方式如下:
1.1 安装maxminddb library(geoip2扩展依赖)
Ubuntu debian
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
宝塔面板下nginx的编译方式
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; }
至此配置完成
另外一种方式是借用堡塔云WAF的【禁中国境外访问】功能
安装好WAF免费防火墙后打开此开关即可
拦截效果
2.禁止IDC机房、服务器IP访问
通常情况下服务器IP并不是我们的客户,在这里推荐大家在没有接口业务的情况下禁止服务器IP访问。
堡塔云WAF的功能为例:
我们只需要在防护网站设置里开启禁止IDC访问即可达成,它还会自动放行真实爬虫以免影响网站收录。
3.对用户上传目录进行严格限制,禁止访问可执行文件
这是黑客的主要渗透手段之一,在可上传文件的目录下传入后门文件,我们在禁止后即使他们成功传入也无法进行利用。
堡塔云WAF的功能为例:
在自定义规则功能里面配置禁止访问/file/upload目录下的所有以.php结尾的文件
拦截效果
恭喜您,如果您有经过上述配置,您的网站安全性又提高啦!
堡塔云WAF安装方式
堡塔云WAF需要占用80、443、33060端口,建议使用单独服务器部署,已经安装了宝塔面板的机器不支持安装云WAF。
官网地址:防黑客CC攻击-装堡塔云WAF
安装命令:
URL=https://download.bt.cn/cloudwaf/scripts/install_cloudwaf.sh && if [ -f /usr/bin/curl ];then curl -sSO "$URL" ;else wget -O install_cloudwaf.sh "$URL";fi;bash install_cloudwaf.sh