Ataques distribuídos de negação de serviço ou “DDoS” sequestram os recursos de um servidor por meio de táticas abusivas de comunicação digital. Esses tipos de ataques são ataques organizados do mundo dos computadores. Numerosas ações anti-like incômodas se combinam para criar uma ameaça formidável o suficiente para parar um servidor experiente em suas trilhas. Pior de tudo, acontece que existem vários meios de travar essa guerra de guerrilha na web contra servidores desavisados. Felizmente, os servidores podem ser configurados para revidar.
Nginx, um sistema de servidor altamente popular para máquinas Unix, vem com funcionalidade interna suficiente para limitar bastante a eficácia dos ataques DDoS.
Aqui estão algumas opções eficazes para lidar com essas ameaças em um servidor Nginx:
Faça backup do seu arquivo de configuração
Antes de alterar qualquer configuração, certifique-se de fazer um backup rápido da configuração do seu servidor. O seguinte comando funciona para isso:
sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.backup-original
Uma vez feito isso, você está pronto para seguir em frente.
Verificando o tráfego
Ficar de olho no tráfego do seu servidor torna mais fácil otimizar a segurança e implementar táticas adicionais no futuro. O Nginx possui um módulo feito especificamente para isso.
Configurar uma página de status
O Nginx normalmente vem com um módulo denominado “stub status” (http_stub_status_module) que permite que esse tipo de funcionalidade seja integrado ao ambiente do servidor com bastante facilidade. Primeiro, verifique-o usando o seguinte comando:
nginx -V
Ou canalize o código acima para grep para encontrá-lo mais rápido:
nginx -V 2>&1 | grep -o with-http_stub_status_module
Se sua saída for semelhante à saída acima, você está pronto para prosseguir; caso contrário, você precisará reinstalar ou recompilar a instalação do Nginx com o módulo incluído.
Configurar uma página de status que você pode verificar é simples, mas você também precisará limitar o acesso a ela apenas ao mínimo (sua máquina) para mantê-la segura. Comece abrindo o arquivo de configuração principal do seu servidor, encontrado em “/etc/nginx/nginx.conf.”
Abra-o e adicione o seguinte código à “diretiva http” para ativar o módulo, substituindo suas próprias informações em vez de “localhost,” “/ status_page” e “127.0.0.1”:
server { listen 80; listen [::]:80; server_name localhost; ## # Status Page Settings ## location /status_page { stub_status on; allow 127.0.0.1; allow ::1; deny all; } }
Nota: você precisará de privilégios sudo para modificar este arquivo.
Agora teste sua configuração:
sudo nginx -t
Se tudo estiver bem, envie ao seu servidor um sinal de recarregamento:
sudo systemctl reload nginx
Para acessar sua página de status, visite o local do seu server_name seguido por “/ status_page” em um navegador da web ou usando uma ferramenta de linha de comando como curl. (Isso é útil se o cache do seu navegador não for atualizado automaticamente.) A seguir está o comando curl para acessar a página em nossos exemplos:
curl localhost/status_page
No navegador, a imagem acima se parece com a imagem a seguir.
Verifique os registros de acesso
Se você notar um tráfego anormal ao verificar a página de status configurada acima, pode ser uma boa ideia verificar o log de acesso do servidor. Isso pode ser encontrado em “/var/log/nginx/access.log.” O log lista os métodos HTTP usados, data / hora das tentativas de acesso, agentes do usuário e as páginas acessadas.
Limitando conexões
Entre as muitas táticas úteis que vale a pena tentar para evitar ataques DDoS, uma das mais simples e eficazes é a limitação das taxas de tráfego de entrada.
Idealmente, você deve restringir o acesso apenas o suficiente para evitar que bots mal-intencionados dominem o seu servidor a taxas desumanas, enquanto mantém taxas razoáveis para clientes humanos. No Nginx, isso pode ser feito com o limit_req_zone
e limit_req
diretivas. O código a seguir define as restrições de memória e taxa para uso em qualquer local que seu servidor esteja configurado para mostrar:
limit_req_zone $binary_remote_addr zone=speedbump:10m rate=10r/s;
“Zona” especifica o nome e o tamanho (em Megabytes, neste caso) do espaço na memória onde as solicitações do usuário são armazenadas. “Taxa” estabelece o número total de solicitações que o Nginx aceitará a cada segundo (10 neste exemplo). Pense neste código como uma regra e o código a seguir como o uso dessa regra:
limit_req zone=speedbump burst=20;
O código acima realmente faz um pouco mais do que apenas implementar nossa regra de limitação; ele também adiciona uma pequena fila de até vinte solicitações para manipular suavemente conexões legítimas que aparecem um pouco mais rápido que o normal, excedendo a regra e a fila resulta em um erro 503 para o cliente. Esta é a aparência de ambas as diretivas em nginx.conf:
Endereço IP na lista negra
Se você conseguir obter o endereço IP que está executando o DDoS em seu servidor, pode simplesmente colocá-lo na lista negra e cancelar qualquer conexão originada desse endereço IP.
Adicione o seguinte código à sua diretiva de servidor:
location / { deny 123.123.123.0/28; # ... }
Bloqueando solicitação para certos arquivos
Se o ataque DDoS tem como alvo certos arquivos em seu servidor – por exemplo, o arquivo xmlrpc.php no WordPress (este é um arquivo altamente direcionado na maioria dos servidores WordPress) – você pode bloquear todas as solicitações para ele. Adicione este código à diretiva do seu servidor:
location /xmlrpc.php { deny all; }
Siga o procedimento acima e você será capaz de limitar a maioria dos ataques DDoS. Certifique-se de verificar o Documentação Nginx para opções de segurança adicionais que você pode colocar no lugar.