Categorias
Tutoriais

Mod_evasive no Apache oferece proteção contra ataque de DDoS

O mod_evasive no Apache oferece proteção contra ataque de DDoS no CentOS 6 e 7, UBUNTU e DEBIAN. Esta é mais uma  matéria da nossa série de artigos, com objetivo de auxiliar a comunidade Linux na proteção de seus servidores.

Introdução a mod_evasive no Apache

Mod_evasive no Apache oferece proteção contra ataque de DDoS

O módulo mod_evasive Apache, ajuda a proteger contra ataques DDoS (negação de serviço distribuída) e força bruta no servidor da web Apache. Ele pode fornecer ações evasivas durante ataques e relatar abusos por meio de recursos de email e syslog. O módulo funciona criando uma tabela dinâmica interna de endereços IP e URIs, além de negar qualquer endereço IP único de qualquer um dos seguintes itens:

  •     Solicitando a mesma página mais de algumas vezes por segundo
  •     Fazendo mais de 50 solicitações simultâneas no mesmo segundo
  •     Fazendo solicitações enquanto estiver temporariamente na lista negra

Se alguma das condições acima for atendida, uma resposta 403 é enviada e o endereço IP é registrado. Opcionalmente, uma notificação por email pode ser enviada ao proprietário do servidor ou um comando do sistema pode ser executado para bloquear o endereço IP.

Instalando o mod_evasive

Nesta seção, instalaremos os pacotes necessários para o funcionamento do mod_evasive e finalmente instalaremos.

Inicialmente necessitamos instalar o repositório yum EPEL (Pacotes Extra para Enterprise Linux) no servidor.

Execute o seguinte comando para instalar e ativar o repositório EPEL no seu servidor:

No CentOS 7:

sudo rpm -ivh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm

No CentOS 6:

sudo rpm -ivh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

Debian/Ubuntu:

sudo apt-get install apache2-utils

Vamos verificar se o repositório EPEL está ativado usando:

sudo yum repolist

Se ativado, você verá o seguinte repositório listado na saída:

epel/x86_64 Extra Packages for Enterprise Linux 7 – x86_64

 

Agora, vamos proteger os pacotes base do EPEL usando o yum plugin protectbase .

sudo yum instala o yum-plugin-protectbase.noarch -y

O objetivo do plug-in protectbase é proteger certos repositórios yum de atualizações de outros repositórios. Pacotes nos repositórios protegidos não serão atualizados ou substituídos por pacotes em repositórios não protegidos, mesmo que o repositório não protegido tenha uma versão posterior.

Agora estamos prontos para instalar o módulo mod_evasive. Execute o seguinte comando para instalá-lo:

CentOS 6 e 7

sudo yum instal mod_evasive -y

Verificando a instalação

Agora que o mod_evasive está instalado, vamos verificar se o arquivo de configuração foi instalado e se o módulo está sendo carregado.

Durante a instalação, o arquivo de configuração mod_evasive /etc/httpd/conf.d/mod_evasive.conf foi adicionado. Para verificar esta execução:

sudo ls -al /etc/httpd/conf.d/mod_evasive.conf

A saída deve ser semelhante a:

-rw-r–r– 1 root root 3473 Jul 01 05:41 /etc/httpd/conf.d/mod_evasive.conf

Por padrão, a seguinte linha LoadModule será adicionada à parte superior do arquivo de configuração mod_evasive.conf.

Abra o arquivo e adicione a linha, se ainda não estiver presente.

A linha abaixo informa ao servidor da web Apache para carregar e usar o módulo mod_evasive.

No CentOS 7, a linha deve ter a seguinte redação:

/etc/httpd/conf.d/mod_evasive.conf
 

LoadModule evasive20_module modules/mod_evasive24.so

No CentOS 6, a linha deve ser a seguinte:

/etc/httpd/conf.d/mod_evasive.conf
 

LoadModule evasive20_module modules/mod_evasive20.so

Vamos listar os módulos carregados para o servidor da web Apache e procurar por mod_evasive:

sudo httpd -M |  grep evasive

A saída deve mostrar algo como:

evasive20_module (shared)

No Debian/Ubuntu:

sudo apt-get install libapache2-mod-evasive

Configurando o mod_evasive

Agora que a instalação foi concluída e verificada, vejamos a configuração do módulo. O mod_evasive pode ser facilmente personalizado através do arquivo de configuração mod_evasive.conf. Iremos mostrar abaixo os principais pontos da configuração.

Uma das opções de configuração que você precisa alterar é o DOSEmailNotify. Esta é uma diretiva muito útil. Se esse valor for definido, um email será enviado para o endereço de email especificado sempre que um endereço IP estiver na lista negra. O corpo do e-mail mostrará mod_evasive HTTP Blacklisted 1.2.3.4

Por exemplo, se você deseja enviar alertas mod_evasive para dizer sammy@example.com, edite o arquivo:

sudo nano /etc/httpd/conf.d/mod_evasive.conf

Descomente a linha DOSEmailNotify removendo o # na frente da linha e altere o endereço de email para o seu:

/etc/httpd/conf.d/mod_evasive.conf
 

DOSEmailNotify voce@dseudominio.com.br

Observação: O mod_evasive usa /bin/mail para enviar alertas por email. Você precisa ter um servidor de correio instalado e funcionando.

O parâmetro que você pode querer definir é o DOSWhitelist. Usando essa opção, os endereços IP de clientes confiáveis podem ser adicionados à lista de desbloqueio para garantir que eles nunca sejam negados. O objetivo da lista de permissões é proteger software, scripts, bots de pesquisa local ou outras ferramentas automatizadas contra a negação de solicitação de grandes quantidades de dados do servidor.

Para colocar na lista branca um endereço IP, por exemplo 1.2.3.4, adicione uma entrada ao arquivo de configuração como este:

/etc/httpd/conf.d/mod_evasive.conf DOSWhitelist 1.2.3.4

Para colocar na lista branca vários endereços IP de diferentes intervalos de IP, você pode adicionar linhas separadas da lista DOSWhitelist no arquivo de configuração como este:

/etc/httpd/conf.d/mod_evasive.conf DOSWhitelist 1.2.3.4 DOSWhitelist 5.6.7.8

DOSPageCount e DOSSiteCount são outros dois parâmetros recomendados para serem alterados para valores menos agressivos para evitar que os clientes sejam bloqueados desnecessariamente.

DOSPageCount é o limite para o número de solicitações para a mesma página por intervalo de páginas (geralmente definido como um segundo) por um endereço IP. Depois que o limite desse intervalo for excedido, o endereço IP do cliente será adicionado à lista de bloqueados. O valor padrão é definido como muito baixo em 2. Você pode alterá-lo para um valor mais alto, digamos 20, editando o seguinte em

/etc/httpd/conf.d/mod_evasive.conf
DOSPageCount 20 

DOSSiteCount é o limite para o número total de solicitações para o mesmo site por um endereço IP por intervalo de site (o padrão é 1 segundo). Para alterá-lo para um valor maior, como 100 segundos:

/etc/httpd/conf.d/mod_evasive.conf DOSSiteCount 100

Existem alguns outros parâmetros que você pode alterar para obter melhor desempenho.

O parâmetro DOSBlockingPeriod informa a quantidade de tempo (em segundos)que um cliente (endereço IP) será bloqueado quando adicionados à lista de bloqueios. Durante esse período, todas as solicitações subsequentes do cliente resultarão em um erro 403 (Proibido) e o timer será redefinido (o padrão é 10 segundos).

Por exemplo, se você deseja aumentar o período de bloqueio para 3600 segundos (1 hora):

/etc/httpd/conf.d/mod_evasive.conf DOSBlockingPeriod 3600

O parâmetro DOSLogDir que se refere ao diretório temporário usado pelo mod_evasive. Por padrão, o /tmp será usado para um mecanismo de bloqueio, que abre alguns problemas de segurança se o sistema estiver aberto para usuários do shell. Vamos definir esse parâmetro no arquivo mod_evasive.conf para possibilitar seja gravado no diretório do Apache.

Por exemplo, para definir o diretório usado por mod_evasive como /var/log/mod_evasive , crie o diretório usando:

sudo mkdir /var/log/httpd/mod_evasive
 

sudo chown -R apache: apache /var/log/httpd/mod_evasive

Agora vamos modificar a configuração mod_evasive e altere o diretório conforme abaixo:

/etc/httpd/conf.d/mod_evasive.conf

DOSLogDir “/var/log/httpd/mod_evasive”

Outro parâmetro é DOSSystemCommand . Se um valor for definido, o comando especificado será executado sempre que um endereço IP estiver na lista negra. Usando esse parâmetro, você pode integrar mod_evasive ao firewall instalado no servidor ou a um script de shell e bloquear os endereços IP na lista negra de mod_evasive no firewall.

DOSSystemCommand “sudo /sbin/iptables -I INPUT -s %s -j DROP”

Inclua o comando abaixo no arquivo /etc/sudores

apache ALL=NOPASSWD: /sbin/iptables *

Carregando o módulo mod_evasive no Apache

Depois de fazer as alterações no arquivo de configuração, precisamos reiniciar o servidor da web Apache para que eles entrem em vigor. Execute o seguinte comando para reiniciar o Apache.

No CentOS 7:

sudo systemctl restart httpd.service

No CentOS 6:

sudo service httpd restart

No Debian/Ubuntu:

sudo systemctl reload apache2

Importante: Verifique se o  mod_evasive parece entrar em conflito com as extensões de servidor do FrontPage. Você também pode verificar as configurações do servidor da web Apache para garantir que o mod_evasive funcione conforme configurado.

Os ajustes sugeridos do Apache devem ter um valor muito alto para MaxRequestsPerChild mas não ilimitado (Um valor zero implica ilimitado) e manter o KeepAlive ativado com o KeepAliveTimeout definido por um período razoavelmente longo.

Teste da proteção DDoS

Vamos fazer um pequeno teste para ver se o módulo está funcionando corretamente. O script perl test.pl escrito por desenvolvedores mod_evasive. Para executar o script, primeiro precisamos instalar o pacote perl no servidor usando:

sudo yum install -y perl

O script de teste é instalado com mod_evasive no seguinte local:

/usr/share/doc/mod_evasive-1.10.1/test.pl

Por padrão, o script de teste solicita a mesma página do servidor da web Apache 100 vezes seguidas para acionar o mod_evasive. Na última seção, modificamos mod_evasive para ser mais tolerante com solicitações por segundo na mesma página. Precisamos alterar o script para 200 solicitações seguidas em vez de 100 para garantir que acionemos todos os métodos de notificação do mod_evasive.

Edite /usr/share/doc/mod_evasive-1.10.1/test.pl :

sudo nano /usr/share/doc/mod_evasive-1.10.1/test.pl

Encontre a seguinte linha:

/usr/share/doc/mod_evasive-1.10.1/test.pl

for(0.. 100 ) {

Substitua 100 por 200 :

/usr/share/doc/mod_evasive-1.10.1/test.pl

for(0.. 200 ) {

Salvar e sair.

Para executar o script, execute:

sudo perl /usr/share/doc/mod_evasive-1.10.1/test.pl

Você deve ver uma saída semelhante a:

HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden …

O script realiza 200 solicitações ao seu servidor web. o código de resposta 403 indica que o acesso foi negado pelo servidor da web. mod_evasive também registra no syslog quando o endereço IP está bloqueado. Verifique o arquivo de log usando:

sudo tail -f /var/log/messages

Deve mostrar uma linha semelhante a:

Saída do Terminal
Jul 30 00:11:18 servername mod_evasive[19251]: Blacklisting address 127.0.0.1: possible DoS attack.

Log acima indica que o endereço IP está bloqueado por mod_evasive.

Se você configurou o mod_evasive para enviar alertas por email quando um IP for bloqueado, você receberá um email na sua caixa de entrada com o seguinte conteúdo:



mod_evasive HTTP Blacklisted 127.0.0.1

Conclusão

O mod_evasive é  um módulo do Apache excelente para bloquear ataques com script e ataques distribuídos. Porem, somente este tipo de proteção não é suficiente para resolver os vários tipo de ataques de DDoS.

O administrador deve utilizar outras ferramentas para em conjunto pode auxiliar na proteção contra ataques do tipo DDoS.

Os links abaixo, incluímos as ferramentas já abordadas anteriormente.

Como verificar se o seu servidor está sob ataque DDoS?

Iptables – Script completo para rede corporativa incluindo LAN/DMZ e filtro de ATAQUES

Quais as chances de sua empresa estar vulnerável a um ataque de DNS?

Por Adriano Frare

Especialista em segurança. Certificado CISSP e Certicate Ethical Hacking. Gerente de projetos experiente com um histórico comprovado de trabalho no setor de administração governamental. Hábil em Planejamento Estratégico, ITIL, Project Management Office (PMO), Gerenciamento de Serviços de TI e Project Management Body of Knowledge (PMBOK), Certificado Digital (PKI), Segurança (CEH), CISSP, vendas usando métodos Soluction Selling (IBM).

Sair da versão mobile