如何使用 fail2ban 解决 Nginx 错误“主要脚本未知”
我使用 Ubuntu 20.04 和 Fail2ban,但类似这样的错误没有被过滤。 此错误出现在 /var/log/nginx/error.log 中。我如何在 Fail2ban 中进行设置以阻止这样的机器人?
2020/12/31 18:02:34 [错误] 674#674:*1003 FastCGI 在 stderr 中发送:“ 主要脚本未知 ”同时从上游读取响应标头,客户端: xxx.xxx.xxx.xxx ,服务器: mydomain.com ,请求:“GET /wp-content/plugins/eshop-magic/download.php?file=../../../../wp-config.php HTTP/1.1”,上游:“fastcgi://unix:/var/run/php/php7.4-fpm.sock:”,主机:“ www.mydomain.com ”
注意:我想使用 fail2ban 阻止所有尝试访问不存在的网页的 IP 地址。我在 filter.d 上构建正确的正则表达式时遇到了麻烦
在您的
jail.local
中添加部分
[nginx-badbots]
[nginx-badbots]
enabled = true
port = http,https
filter = nginx-badbots
logpath = /var/log/nginx/error.log
maxretry = 2
在
filter.d
内创建一个名为
nginx-badbots.conf
的过滤器文件
[Definition]
failregex = FastCGI sent in stderr: "Primary script unknown" .*, client: <HOST>
ignoreregex =
重新启动 fail2ban
service fail2ban restart
检查您的
nginx-badbots
jail
fail2ban-client status nginx-badbots
既然您提到阻止脚本访问
wp-content
的 PHP 脚本...
可以说,大多数
好
插件仅通过 WordPress 的前端控制器 (
/index.php
) 执行,并具有良好的 SEO URL。
好的插件不会允许其从
/wp-content/plugins/<foo>/<foo|bar|blah>.php
之类的链接执行。允许的插件是“坏的”,或者编码错误 :-)。
因此,如果您保持插件库清洁,则不会有此类插件,并且可以将任何对
/wp-content/*.php
的请求视为恶意请求。
阻止这些请求可以自动完成,但 Fail2Ban 不是一个很好的选择,因为它需要先扫描日志。相反,为什么不将这些恶意请求直接路由到自动在防火墙中禁止此类 IP 的脚本。无需日志扫描,立即阻止。
我在 蜜罐阻止 和 为 WordPress 安全配置 NGINX 的最后几段中介绍了这种方法:
location /wp-content/ {
# other PHP files cause automatic ban:
location ~ \.php$ {
include includes/honeypot.conf;
}
}
不幸的是,蜜罐文章适用于 FirewallD,但您可以轻松地将其应用于其他发行版中的任何其他防火墙。