Qual é a melhor maneira de bloquear URLs no nginx?

2

Estamos recebendo uma quantidade incomum de tráfego para alguns URLs, ex:

link

link

Qual é a melhor maneira de bloquear esses URLs no nginx?

Alguma outra sugestão para limitar a quantidade de conexões por segundo / minuto para páginas específicas?

    
por tomster 26.04.2012 / 05:40

4 respostas

3

Se o tráfego de entrada for realmente incomum e você tiver certeza de que o tráfego é spam, considere bloqueá-lo no firewall. Quanto menor a pilha que você pode negar o tráfego, melhor. Por exemplo, iptables -A INPUT -s 1.1.1.1 -j DROP . Obviamente, substitua 1.1.1.1 pelo endereço IP em questão.

Uma ferramenta mais ampla para proteger seu servidor de conexões de entrada suspeitas seria fail2ban . Existem também regras que você pode fazer que são específicas para o Nginx. O Fail2ban protege você de muitos ataques diferentes e não é apenas uma solução para sua pergunta específica.

Para uma solução específica para o Nginx, ela vem com um módulo chamado ngx_http_access_module que permite permitir ou negar o acesso com base no endereço IP. Você abriria nginx.conf e adicionaria include blockips.conf; Em seguida, criaria blockips.conf onde quer que seus arquivos de configuração Nginx estivessem. Provavelmente é /usr/local/nginx/conf/ . Por fim, adicione as configurações deny conforme desejado:

deny 1.1.1.1;
deny 2.2.2.0/24;
deny 3.3.0.0/16;
    
por 26.04.2012 / 06:32
3

Usando o mesmo princípio de link e link

O código a seguir permitiria que você proibisse IPs específicos de acessar esses URLs e também limitasse qualquer pessoa que tentasse acessar esses URLs.

http {
...
limit_req_zone  $binary_remote_addr  zone=one:10m   rate=1r/s;
...
server {
..
 set $deny_access off;

  if ($remote_addr ~ (bad.ip.add.ress|second.bad.ipadd.ress|third.bad.ipadd.ress)) {
   set $deny_access on;
  }
  if ($uri ~ "^/(search\.php|product\.php)\?(type=[0-9]+&mode=[a-z]+searchterm=(.*)+|productid=[0-9]+)$" ) {
   limit_req   zone=one  burst=5;
   set "${$deny_access}on";
  }
  if ($deny_access = onon) {
   return 503;
  }
  location /deny_access{
  }
  error_page 503 @deny_access;
  location @deny_access {
   rewrite ^(.*)$ /deny.html break;
 }
..
}
..
}
    
por 26.04.2012 / 11:24
1

link : «… Além disso, o código não padrão 444 fecha uma conexão sem enviar um cabeçalho de resposta . … »

- Então você só define esses locais específicos e usa return 444 .

Any other suggestions to limit the amount of connections per second/minute for specific pages?

mgorven apontou para você já.

    
por 26.04.2012 / 07:54
0

Você também pode usar o módulo limit_req para limitar a taxa na qual cada IP de origem pode acessar determinados caminhos.

    
por 26.04.2012 / 06:35

Tags