如何对 Nginx 错误“主脚本未知”使用 fail2ban

问题描述

我使用 Ubuntu 20.04 和 Fail2ban,但不会过滤此类错误。 此错误出现在 /var/log/Nginx/error.log 中。如何在 Fail2ban 中进行设置以阻止此类机器人?

2020/12/31 18:02:34 [error] 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 上构建正确的正则表达式时遇到问题

解决方法

在您的 [nginx-badbots]

中添加部分 jail.local
[nginx-badbots]

enabled  = true
port     = http,https
filter   = nginx-badbots
logpath  = /var/log/nginx/error.log
maxretry = 2

nginx-badbots.conf 内创建一个名为 filter.d 的过滤器文件

[Definition]

failregex = FastCGI sent in stderr: "Primary script unknown" .*,client: <HOST>

ignoreregex =

重启fail2ban

service fail2ban restart

检查您的 nginx-badbots 监狱

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。无日志扫描,立即阻塞。

我在 honeypot blockingsecure NGINX configuration for WordPress 的最后一段中介绍了这种方法:

    location /wp-content/ { 
        # other PHP files cause automatic ban:
        location ~ \.php$ {
            include includes/honeypot.conf;
        }
    }

不幸的是,蜜罐文章适用于 FirewallD,但您可以轻松地将它用于其他发行版中的任何其他防火墙。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...