我可以使用什么正则表达式来识别 nginx 日志中的无效文件请求?

我可以使用什么正则表达式来识别 nginx 日志中的无效文件请求?

我需要帮助配置 fail2ban 的正则表达式。我主要将我的 Web 服务器用于简单的播客文件托管,但我在日志中看到很多针对 php、asp 和 pl 文件的无效请求。

我想配置 fail2ban 来在日志中查找这些类型的无效文件请求。

有一次,我为 apache 设置了以下正则表达式字符串:

[[]客户端[]](没有此文件或目录|未找到脚本或无法统计):/\S*(php|mysql|.asp|.exe|.pl)

[[]客户端 []] 脚本 '/\S*(.php|.asp|.exe|.pl)\S*' 未找到或无法统计 *$

这显然不适用于 nginx 日志。以下是错误文件请求的摘录(我更改了路径和 IP):

2011/05/14 20:38:20 [错误] 5349#0:*828 open()“/example/path/htdocs/administrator.php”失败(2:没有此文件或目录),客户端:123.123.123.123,服务器:example.server.com,请求:“GET Administrator.php HTTP/1.1”,主机:“example.server.com”

我可以得到一些帮助来制作一个修改过的正则表达式字符串来捕获这些类型的错误吗?我想重申一下,我没有托管任何 php 或 asp 文件,所以我不太担心这里潜在的误报风险。

答案1

/etc/fail2ban/filter.d/nginx-noscript.conf

[Definition]
failregex = open\(\) "/\S*(\.php|\.asp|\.exe|\.pl)\S*" failed \(2: No such file or directory\), client: <HOST>,.*
ignoreregex =

/etc/fail2ban/jail.conf

[nginx-iptables]
enabled     = true
filter      = nginx-noscript
action      = iptables[name=nginx, port=81, protocol=tcp]
logpath     = /var/log/nginx/*error_log
maxretry    = 3

注释掉ignoreip = 127.0.0.1/8并使用一些不存在的请求进行测试:

2012/08/10 09:28:11 [error] 3473#0: *27 open() "/var/www/localhost/htdocs/d.pl" failed (2: No such file or directory), client: 127.0.0.1, server: localhost, request: "GET /d.pl HTTP/1.0", host: "localhost:81"

在 中/var/log/fail2ban.log,你会看到类似这样的内容:

2012-08-10 09:32:55,234 fail2ban.actions: WARNING [nginx-iptables] Ban 127.0.0.1

再次检查 iptables:

Chain fail2ban-nginx (1 references)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DROP       all  --  *      *       127.0.0.1            0.0.0.0/0       

相关内容