开发者问题收集

如何使用 fail2ban 解决 Nginx 错误“主要脚本未知”

2020-12-31
987

我使用 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 上构建正确的正则表达式时遇到了麻烦

2个回答

在您的 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
AndroidX
2021-01-03

既然您提到阻止脚本访问 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,但您可以轻松地将其应用于其他发行版中的任何其他防火墙。

Danila Vershinin
2020-12-31