早上好,好久没更新文章了,今天给大家更新一个过滤境外ip和域名的解决方案
昨天翻生产环境日志,发现一些非业务请求,过滤境外ip和域名访问的做了哪些工作,给大家做个简单分享。

查了一下请求ip:
德国的:

保加利亚的:

坏了,被扫描了。
仔细看了一下他的请求方式: PROPFIND,这种通常是自动扫描器在探测 WebDAV 漏洞或共享目录

因为目前我们的业务没有涉及到境外,所以就做了一下操作过滤了境外IP和域名请求,此次只做技术分享,不代表任何地区观点!
从2方面入手:
1、封禁境外域名访问:
已在阿里云做了以下配置:

凡是境外访问的一律到127.0.0.1
访问效果如下:

可以用这个工具进行测试:https://boce.aliyun.com/detect/dns
发现境外访问已经全部解析到了127.0.0.1

备注:
阿里云:您使用的免费版DNS,无海外解析节点,海外访问域名DNS解析速度慢、失败率高。
建议您升级到付费版DNS,付费版DNS全球集群覆盖东南亚、欧美、中东等地域,能加速您的海外解析速度。

2、封禁境外ip+端口访问:
首先肯定想到的是设置阿里云入站规则,但是入站规则需要配置所有的ip号段,需要的话可以从这个地方获取(https://lite.ip2location.com/china-ip-address-ranges)
阿里云不提供一键式服务。但是可以购买阿里云的云防火墙可以直接阻拦,一年费用大概3800,还是比较贵的。
那就从nginx层面进行控制。
先设置不是域名访问的直接给过滤掉,就是ip+端口的方式:
配置如下:
# 拦截 443 端口的直接 IP 访问或非授权域名
server {
listen 443 ssl default_server;
server_name _;
# 必须有一组有效的证书,否则 Nginx 会报错
ssl_certificate /DATA/freeware/nginx/nginx/cert/xxx/xxx.pem;
ssl_certificate_key /DATA/freeware/nginx/nginx/cert/xxx/xxx.key;
# 【核心修改 1】497 错误是 Nginx 内部定义的:当 HTTP 请求发送到 HTTPS 端口时触发
# 我们强制把这个错误重定向,并返回 444(直接丢弃连接)
error_page 497 =444 /;
# 【核心修改 2】针对常规请求也返回 444
location / {
return 444;
}
}
然后再把nginx版本号给隐藏了,以防nginx特定版本有bug,增加攻击机会。
http {
server_tokens off; # 隐藏版本号
}
最后一步把其他请求方式给过滤掉。
# 只拦截绝对非法的 WebDAV 方法
if ($request_method ~* (PROPFIND|SEARCH|MKCOL|COPY|MOVE|LOCK|UNLOCK) ) {
return 444;
}
大功告成,最后的效果是ip+端口访问不进去,域名境外访问不进去,特殊请求方式请求给过滤。
好了今天就给大家分享一个过滤境外ip和域名访问的解决方案。
最后给大家提示一句,一定要把服务器的端口给设置白名单,尽量的不过多的把端口给暴露出去,避免受到经济损失。
祝各位,永远不会遇到此类事件!