Den Rise / Shutterstock.com

mod_evasive é um módulo Apache que ajuda a defender seu servidor contra ataques de força bruta e negação de serviço. A configuração do mod_evasive oferece uma rede de segurança para detectar agentes mal-intencionados antes que eles comecem a degradar o desempenho do servidor.

O módulo vem com vários parâmetros de configuração que permitem definir o número de solicitações simultâneas que um cliente pode fazer em um determinado período de tempo. Outras solicitações serão bloqueadas por um período após o limite ser excedido.

Publicidade

Instalando mod_evasive

As etapas de instalação variam dependendo da distribuição do seu sistema operacional e da versão do Apache. Para a combinação mais popular do Apache 2.4 em um sistema baseado em Debian, use as seguintes etapas. Instruções para construir a partir da fonte também são fornecidas no repositório do projeto.

apt update
apt install libapache2-mod-evasive

Instalações via apt irá habilitar o módulo automaticamente.

Você pode verificar isso usando o apachectl Utilitário:

Publicidade
apachectl -M | grep evasive

Você deve ver o nome do módulo exibido se ele estiver ativo.

Definindo configurações de bloqueio

O arquivo de configuração mod_evasive geralmente pode ser encontrado em /etc/apache2/mods-enabled/evasive.conf. Ele usa o mesmo formato de outros arquivos de configuração do Apache. Uma referência completa pode ser encontrada no mod_evasive docs.

Aqui está um exemplo de arquivo de configuração com várias personalizações:

<IfModule mod_evasive20.c>
    DOSPageCount 5
    DOSSiteCount 10

    DOSPageInterval 1
    DOSSiteInterval 2

    DOSBlockingPeriod 300

    DOSEmailNotify [email protected]
</IfModule>

mod_evasive distingue entre os pedidos de um página e pedidos de um local. Você pode definir esses dois fatores de bloqueio independentemente um do outro. Este exemplo bloqueará clientes que solicitam o mesmo URI cinco vezes em um intervalo de um segundo. Além disso, um bloqueio será imposto aos clientes que solicitarem mais de dez URIs de um único site em um intervalo de dois segundos.

Publicidade

Quando qualquer um dos limites for excedido, o cliente será impedido de fazer outras solicitações por um período de cinco minutos (300 segundos). mod_evasive irá enviar um email para [email protected] notificando que o endereço IP foi bloqueado.

Publicidade

mod_evasive também suporta a execução de um comando de sistema arbitrário quando um limite é atingido. Isso pode ser usado para integrar a ferramenta com seu próprio aplicativo ou firewall para que você possa registrar um bloqueio em seu banco de dados. Colocou o DOSSystemCommand configuração, usando %s para denotar o endereço IP bloqueado:

DOSSystemCommand /app/blacklisted_ip.php  --ip=%s

Whitelisting IPs conhecidos

mod_evasive oferece suporte a uma lista de permissões de IPs conhecidos para auxiliar no desenvolvimento e teste. Os desenvolvedores podem, às vezes, criar altos volumes de solicitação enquanto trabalham em um servidor, seja intencionalmente ou não.

Use o DOSWhiteList configuração para especificar intervalos de endereços IP a serem ignorados. Os limites não serão aplicados a nenhum desses endereços.

DOSWhiteList 127.0.0.1
DOSWhiteList 192.168.0.*

Como funciona?

O mod_evasive funciona mantendo uma tabela hash de endereços IP e URIs em uma lista negra temporária. O endereço IP e o URI são misturados para criar uma chave que pode ser usada para verificar se o cliente solicitou a mesma página anteriormente.

Um bloqueio ocorre quando um URI ou site aparece na tabela de hash do IP com maior frequência do que você permitiu. Isso resulta em um 403 código de status sendo enviado de volta ao cliente. O status é a única resposta que o cliente receberá, minimizando os recursos do servidor necessários para lidar com solicitações consideradas espúrias ou maliciosas.

Publicidade

Uma vez que o limite é alcançado, o cliente deve esperar pelo especificado DOSBlockingPeriod antes de fazer outra solicitação bem-sucedida. Tentar novamente durante o período de espera resulta na imposição de um bloqueio ainda mais longo. Outros endereços IP continuam a ser admitidos como de costume e não devem ser interrompidos pela tentativa de negação de serviço.

O módulo pode causar uma penalidade de desempenho em servidores muito ativos. Ele precisa registrar cada solicitação e verificar se o IP foi bloqueado ou precisa ser bloqueado. Servidores ocupados com memória suficiente devem aumentar o DOSHashTableSize configuração para permitir uma tabela hash maior na memória. Isso reduz o tempo necessário para comparar um IP de entrada com suas outras solicitações recentes.

DOSHashTableSize 32768

Testando sua instalação

A melhor maneira de testar o mod_evasive é lançar uma breve enxurrada de solicitações para verificar como o seu servidor responde. Com o mod_evasive ativado corretamente, você deve começar a ver rapidamente os 403s e um alerta de e-mail se estiver configurado.

o ab A ferramenta de linha de comando pode ser usada para iniciar conexões em massa:

ab -n 1000 -c 50 http://...

Você deve ajustar o -n e -c parâmetros para se adequar à sua configuração mod_evasive e impacto previsto no servidor:

Publicidade
  • -n – O número total de solicitações a serem feitas.
  • -c – O número de conexões simultâneas a serem abertas.

O exemplo acima enviará 1.000 solicitações em lotes de 50.

ab é uma ferramenta poderosa que pode iniciar um ataque genuíno de negação de serviço. Certifique-se de ter especificado o endereço do servidor correto antes de enviar as solicitações!

Resumo

mod_evasive é um módulo simples, mas eficaz para evitar que ataques de força bruta afetem a operação do seu servidor. Você pode configurar limites por página e por site que se aplicam a cada cliente que tenta uma conexão. Se o cliente acabar ultrapassando o limite, ele receberá um 403 e deverá conceder um período de bloqueio temporário.

Como administrador, você pode optar por receber alertas por e-mail quando um novo bloqueio for imposto. Isso o mantém informado sobre ataques em potencial e permite monitorar falsos positivos. Você precisa de uma pilha de e-mail em funcionamento no servidor – o mod_evasive envia usando o agente de transferência de e-mail do sistema.

Finalmente, é possível integrar o mod_evasive com outras partes do seu aplicativo executando um comando do sistema sempre que um IP estiver na lista negra. Esse recurso pode ser usado para sinalizar um usuário de banco de dados, criar um alerta em uma ferramenta de monitoramento de terceiros ou retransmitir o bloqueio para seus outros servidores para proteger partes adicionais de sua infraestrutura.

Publicidade