Bloqueie HTTP 1.0 com nginx

5

Meu servidor está sob um ataque pesado. A maioria dos pedidos está chegando assim:

46.43.84.214 - - [15/May/2012:11:21:45 +0400] "GET / HTTP/1.0" 200 65859 "2r4k68998q24ay.ru" "Mozilla/4.0 (compatible; MSIE 4.01; Vonna.com b o t)"

A versão do protocolo HTTP é a mesma para todas essas solicitações. Posso bloquear as solicitações HTTP 1.0 em um nível de servidor da web de alguma forma? Eu tentei isso para eliminar o ataque (redirecionar para um arquivo vazio):

if ($server_protocol ~* "HTTP/1.0") {
    rewrite ^/ http://example.com/white.txt;
}

Parece não ajudar muito, não vejo nenhum desses redirecionamentos nos logs. Eu uso o nginx 1.0.9 como um proxy reverso com o Apache 2.2.3.

Qualquer ajuda é apreciada.

    
por Andrew 15.05.2012 / 09:30

3 respostas

7

Você poderia usar algo assim

if ($http_user_agent ~* "Vonna.com" ) {
    return 444;
} 

444 fechará a conexão sem retornar nada, garantindo o menor impacto possível. No entanto, se você quiser informar possíveis usuários legítimos, use algo como 400, talvez.

Além disso, talvez bloqueie por referenciador, embora a maioria dos bots também falsifique isso.

No que diz respeito ao bloqueio de todo o HTTP 1.0, você deve verificar este primeiro. Se você ainda quiser implementar o bloco como uma solução temporária, algo assim deve funcionar.

if ($server_protocol ~* "HTTP/1.0") {
    return 444;
} 
Basicamente, a mesma coisa que você tinha, exceto sem reescrever - se eu estou lendo corretamente, seu uso fez com que ficasse em um loop permanente.

    
por 15.05.2012 / 09:47
2

Isso funcionou para mim com o Nginx 1.8.

if ($server_protocol = HTTP/1.0) {
    return 444;
}

Meu motivo para fazer isso foi diferente. O Relatório de Ameaças Qualys detectou o CVE-2000-0649, "permite que atacantes remotos obtenham o endereço IP interno do servidor por meio de uma solicitação HTTP 1.0", no meu servidor. Eu tenho a liberdade de fazer isso porque nosso site suporta apenas navegadores limitados.

    
por 02.09.2015 / 18:25
1

Use a variável certa: $server_protocol em vez de $http_user_agent .

    
por 15.05.2012 / 09:48

Tags