微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何对 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,但您可以轻松地将它用于其他发行版中的任何其他防火墙。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。