Que expressão regular posso usar para identificar solicitações inválidas de arquivos em logs nginx?

1

Preciso de ajuda para configurar uma expressão regular para o fail2ban. Eu uso meu servidor web principalmente para hospedagem de arquivos de podcast simples, mas vejo muitos pedidos inválidos para arquivos php, asp e pl nos logs.

Gostaria de configurar o fail2ban para procurar solicitações inválidas de arquivos desses tipos nos logs.

Em um ponto, eu tive a seguinte configuração de strings regex para o apache:

[[]client []] (No such file or directory|script not found or unable to stat): /\S*(php|mysql|.asp|.exe|.pl)

[[]client []] script '/\S*(.php|.asp|.exe|.pl)\S*' not found or unable to stat *$

Isso obviamente não funciona para logs nginx. Aqui está um trecho de uma solicitação de arquivo inválida (eu mudei os caminhos e os IPs):

2011/05/14 20:38:20 [error] 5349#0: *828 open() "/example/path/htdocs/administrator.php" failed (2: No such file or directory), client: 123.123.123.123, server: example.server.com, request: "GET administrator.php HTTP/1.1", host: "example.server.com"

Eu poderia obter alguma ajuda para criar uma string regex revisada para detectar esses tipos de erros? Eu gostaria de reiterar que eu não hospedo nenhum arquivo php ou asp, então não estou muito preocupado com o potencial risco positivo falso aqui.

    
por Mike B 15.05.2011 / 06:06

1 resposta

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

Comente o ignoreip = 127.0.0.1/8 e teste com algumas solicitações inexistentes:

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"

No /var/log/fail2ban.log , você verá algo assim:

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

Examine o iptables novamente:

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       
    
por 10.08.2012 / 04:41