nginx não está bloqueando os agentes do usuário

1

Eu tenho isso no meu arquivo .conf para o meu site na tentativa de bloquear 2 agentes de usuário constantemente pesquisando meu servidor.

## Block http user agent - morpheus fucking scanner ##
if ($http_user_agent ~* "morfeus fucking scanner|ZmEu") {
   return 403;
}

Eu também tentei o seguinte, sem sorte:

if ($http_user_agent ~* ("morfeus fucking scanner|ZmEu"))
if ($http_user_agent ~* (morfeus fucking scanner|ZmEu))
if ($http_user_agent ~* ("morfeus fucking scanner"|"ZmEu"))
if ($http_user_agent ~* "morfeus fucking scanner|ZmEu")
if ($http_user_agent ~* morfeus fucking scanner|ZmEu)

Funcionou bem quando eu tinha apenas 1 agente de usuário, mas, na tentativa de adicionar um segundo, esses agentes de usuário ainda conseguem sondar o servidor.

111.90.172.235 - - [17/Feb/2013:23:05:22 -0700] "GET /phpMyAdmin/scripts/setup.php HTTP/1.1" 404 118 "-" "ZmEu" "-"
111.90.172.235 - - [17/Feb/2013:23:05:22 -0700] "GET /MyAdmin/scripts/setup.php HTTP/1.1" 404 118 "-" "ZmEu" "-"
111.90.172.235 - - [17/Feb/2013:23:05:22 -0700] "GET /pma/scripts/setup.php HTTP/1.1" 404 118 "-" "ZmEu" "-"
111.90.172.235 - - [17/Feb/2013:23:05:22 -0700] "GET /w00tw00t.at.blackhats.romanian.anti-sec:) HTTP/1.1" 403 118 "-" "ZmEu" "-"
111.90.172.235 - - [17/Feb/2013:23:05:22 -0700] "GET /myadmin/scripts/setup.php HTTP/1.1" 404 118 "-" "ZmEu" "-"
111.90.172.235 - - [17/Feb/2013:23:05:22 -0700] "GET /phpmyadmin/scripts/setup.php HTTP/1.1" 404 118 "-" "ZmEu" "-"

De acordo com essas duas postagens # 12: Como negar certos usuários? Agentes? , Como: Nginx Block User Agent , acho que estou configurado corretamente, mas não parece estar funcionando.

EDITAR

Aqui está a versão do nginx e o arquivo inteiro do conf

nginx version: nginx/1.2.7

server {
listen       80;
server_name  localhost;

#charset koi8-r;

access_log  /var/log/nginx/XXXXXX/access.log  main;
error_log /var/log/nginx/XXXXXX/error.log;

root /srv/www/XXXXXX;

location / {
    index  index.html index.htm index.php;

    #5/22/2012 - Turn on Server Side Includes
    ssi on;

    ## Block http user agent - morpheus fucking scanner ##
    if ($http_user_agent ~* "morfeus fucking scanner|ZmEu") {
       return 403;
    }

    ## Only allow GET and HEAD request methods. By default Nginx blocks
    ## all requests type other then GET and HEAD for static content.
    if ($request_method !~ ^(GET|HEAD)$ ) {
      return 405;
    }
}

location ~ \.php {
    try_files $uri =404;
    include /etc/nginx/fastcgi_params;
    fastcgi_pass 127.0.0.1:9000;
    #fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME /srv/www/XXXXXX/$fastcgi_script_name;
}

#error_page  404              /404.html;

# redirect server error pages to the static page /50x.html
error_page   500 502 503 504  /50x.html;
location = /50x.html {
    root   /usr/share/nginx/html;
}

# Redirect server error pages to the static page
error_page 403 404 /error403.html;
location = /error403.html {
    root /usr/share/nginx/html;
}
    
por ProfessionalAmateur 20.02.2013 / 00:35

3 respostas

3

O nginx só aplica um bloco de localização em cada nível da configuração. Todos os arquivos 404ing são arquivos .php que atingem o bloco \.php location e, portanto, não usam o bloco / location que contém o bloco do agente do usuário. Para corrigir isso, mova seu bloco de agente do usuário para fora do bloco de localização para o nível raiz, de modo que ele seja aplicado a todas as solicitações.

if ($http_user_agent ~* "morfeus fucking scanner|ZmEu") {
    return 403;
}

location / {
    ...
}

location \.php {
    ...
}

Editar: você pode testar isso com algo como curl , que permite definir cabeçalhos arbitrários:

% curl -I localhost/sf645/blah
HTTP/1.1 404 Not Found
% curl -I -H 'User-agent: ZmEu' localhost/sf645/blah
HTTP/1.1 403 Forbidden
% curl -I -H 'User-agent: morfeus fucking scanner' localhost/sf645/blah
HTTP/1.1 403 Forbidden
    
por 20.02.2013 / 01:04
0

Tente usar apenas o padrão (morfeus) . Esse caractere de canal provavelmente está estragando a correspondência de padrões de expressão regular.

    
por 20.02.2013 / 00:44
0

tente isso

if ($http_user_agent ~* (morfeus|ZmEu) ) {
   return 403;
}
    
por 20.02.2013 / 00:47