Image placeholder

在NGINX服务器中阻止恶意扫描、用户代理、垃圾爬虫、恶意IP以及DDOS防御

Image placeholder
F2EX 2021-06-13

nginx ultimate bad bot blocker 是Github中的一个开源项目。主要用于在NGINX服务器中阻止垃圾机器人、恶意扫描、垃圾爬虫、用户代理、垃圾邮件、广告软件、恶意软件、勒索软件、点击劫持、点击重定向和反 DDOS 攻击的恶意 IP 拦截器、Nginx 速率限制以及伪装的 Googlebot 。

nginx ultimate bad bot blocker 项目收集恶意 Referrers 共计7060个,恶意 User-Agents 615个,伪装的Googlebots 217个,持续更新中。除了 NGINX 配置,还有 Apache 配置以及 robots.txt 配置。还有文件保护、预防攻击和 HTTP 头 的可选配置文件。

下面讲一下 NGINX 服务器中主要文件 bad bot blocker 的配置,文件保护、攻击预防配置和HTTP 头配置这三部分。

第一部分:bad bot blocker配置

准备工作

  • 下载 nginx ultimate bad bot blocker ,此配置主要用到 conf.dbots.d 这两个文件夹。
  • 确认你服务器中的 nginx 目录,也就是有 nginx.conf 的目录中新建一个文件夹 bot.rules (命名随意),此时 bot.rules 文件夹应该和 vhost 文件夹同级。
  • 在 bot.rules 文件夹内新建 custom.rules 文件夹(用于区分核心规则和自定义规则)。

开始配置

1. 打开下载下来的 conf.d 文件夹中的 globalblacklist.conf 进行编辑,搜索全部 /etc/nginx/bots.d/ 更改为你上面新建的 custom.rules 文件夹路径。例如将 /etc/nginx/bots.d/ 修改为 /usr/local/nginx/conf/bot.rules/custom.rules/ 。

2. 将下载下来的 conf.d 文件夹中的 botblocker-nginx-settings.conf 和 globalblacklist.conf 上传至 bot.rules 文件夹内。

3. 将下载下来的 bots.d 文件夹中的 blockbots.conf , ddos.conf 上传至 bot.rules 文件夹内。

4. 将下载下来的 bots.d 文件夹中的 bad-referrer-words.conf ,blacklist-ips.conf ,blacklist-user-agents.conf , custom-bad-referrers.conf , whitelist-domains.conf , whitelist-ips.conf 上传至 custom.rules 文件夹内。

5. 打开 nginx.conf ,在 http { … } 内添加 :

http{
...
  include bot.rules/botblocker-nginx-settings.conf;
  include bot.rules/globalblacklist.conf;
...
}

6. 打开 vhost 中的网站配置文件,例如 f2ex.conf ,然后添加:

server{
...
  include 你的nginx.conf所在路径/bot.rules/blockbots.conf;
  include 你的nginx.conf所在路径/bot.rules/ddos.conf;
...
}

7. 重要!百度,搜狗,360以及微信浏览器、QQ浏览器的 User-Agent 默认在核心规则集里(globalblacklist.conf)进行了屏蔽,你可以将它们放入白名单。打开 blacklist-user-agents.conf 找到 # MY WHITELIST 在下面添加白名单规则:

"~*(?:\b)Baidu(?:\b)"		0;
"~*(?:\b)Sogou\ web\ spider(?:\b)"		0;
"~*(?:\b)MicroMessenger(?:\b)"		0;
"~*(?:\b)MQQBrowser(?:\b)"		0;
"~*(?:\b)360Spider(?:\b)"		0;

还有一些国内设备被屏蔽,可查看 globalblacklist.conf ,根据你自己的需要调整。

你也可以在 # MY BLACKLIST 下面添加黑名单规则:


#不区分大小写,可写正则
"~*(?:\b)GRequests(?:\b)"   3;
"~*(?:\b)ias(?:\b)"   3;
"~*(?:\b)JRO03D(?:\b)"   3;
"~*(?:\b)YisouSpider(?:\b)"   3;
"~*(?:\b)Windows\ NT\ 5.1(?:\b)"    3;
"~*(?:\b)admantx-apacas(?:\b)"    3;
"~*(?:\b)Mozilla/4.0(?:\b)"    3;
"~*(?:\b)chrome/(1(?:8|9)|2[0-9]|3[0-9]|4[0-7])(?:\b)"    3; #匹配chrome18 至 chrome47

#严格完整匹配
"Mozilla/5.0"    3;

重新上传 blacklist-user-agents.conf 文件。

8. 测试nginx,重启服务。

nginx -t
service nginx reload

排错

如果 nginx 测试提示有重复,根据提示检查下你原来的 nginx.conf 是否设置了 server_names_hash_bucket_size ,如果有,打开 botblocker-nginx-settings.conf 将重复项注释掉重新上传。

测试


curl -A "AIBOT" http://yourdomain.com  #测试 User Agent ,返回错误码

curl -I http://yourdomain.com -e http://zx6.ru  #测试 referrers ,返回错误码

更新

之后的更新只需要下载 globalblacklist.conf 文件进行更新(注意修改 include 路径),custom.rules 文件夹内的规则都是你的自定义规则,不要覆盖。

第二部分:文件保护、攻击预防配置

将下载下来的 deny.d 文件夹上传至 nginx.conf 的目录,和 bot.rules 以及 vhost 同一个目录。

打开 vhost 中的网站配置文件,例如 f2ex.conf ,然后添加:

server{
...
include 你的nginx.conf所在路径/deny.d/deny.conf;
...
}

测试nginx,重启服务。

注:deny.conf 文件可根据你的实际需求修改。

第三部分:HTTP 头配置

将下载下来的 headers.d 文件夹上传至 nginx.conf 的目录,和 bot.rules 以及 vhost 同一个目录。

打开 vhost 中的网站配置文件,例如 f2ex.conf ,然后添加:

server{
...
include 你的nginx.conf所在路径/headers.d/headers.conf;
...
}

测试nginx,重启服务。

以上三部分可单独使用,也可搭配使用。如果要一起使用,请注意优先级顺序:

server{

...端口、域名配置...

include 你的nginx.conf所在路径/headers.d/headers.conf;
include 你的nginx.conf所在路径/deny.d/deny.conf;
include 你的nginx.conf所在路径/bot.rules/blockbots.conf;
include 你的nginx.conf所在路径/bot.rules/ddos.conf;

...其他规则...

}

2023-08-30