如何解决如何对 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 blocking 和 secure NGINX configuration for WordPress 的最后一段中介绍了这种方法:
location /wp-content/ {
# other PHP files cause automatic ban:
location ~ \.php$ {
include includes/honeypot.conf;
}
}
不幸的是,蜜罐文章适用于 FirewallD,但您可以轻松地将它用于其他发行版中的任何其他防火墙。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。