Ver Feed RSS

Coluna de Segurança

Protegendo o Apache contra ataques DoS e Slowloris

Avalie este Post de Blog
Neste artigo veremos como tornar o Apache mais resiliente contra ataques DoS, sejam eles por sobrecarga do sistema através de requisições em massa ou através do Slowloris. Os comandos são baseados na distribuição Debian, mas podem facilmente ser adaptados para outras distribuições.

Lembrem-se de que não existe qualquer garantia de que estas medidas tornem seu servidor 100% seguro, isto não existe!

1) Instale o mod-evasive:

Código :
apt-get install libapache2-mod-evasive

2) Crie o diretório para os logs:

Código :
mkdir /var/log/apache2/evasive

3) Defina as permissões:

Código :
chown -R www-data:root /var/log/apache2/evasive

4) Crie o arquivo de configuração /etc/apache2/mods-enabled/mod-evasive.conf, com o seguinte conteúdo:

Código :
DOSHashTableSize 2048
DOSPageCount 20
DOSSiteCount 300
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 10
DOSLogDir "/var/log/apache2/evasive"
DOSEmailNotify [email protected]

5) Salve o arquivo e reinicie o apache:
Código :
service apache2 restart

6) Para testar as configurações existe um script que já vem com o pacote, altere o número de requisições de acordo com a configuração que você utilizou:

Código :
/usr/share/doc/libapache2-mod-evasive/examples/test.pl

Você deverá começar a receber erros 403 assim que atingir o limite definido na configuração.

mod_evasive Opções de configuração

Estas opções de configuração foram retiradas do arquivo README, apenas traduzi o conteúdo.

DOSHashTableSize

O tamanho da tabela define o número de nós de nível superior para a tabela hash de cada filho. Aumentar este número irá proporcionar um desempenho mais rápido, diminuindo o número de iterações necessárias para chegar ao registro, mas consome mais memória para o espaço de tabela. Você deve aumentar isso se você tiver um servidor web ocupado. O valor especificado será automaticamente atrelado ao próximo número primo na lista de números primos (ver mod_evasive.c para uma lista de números primos utilizados).

DOSPageCount

Este é o limiar para o número de solicitações para a mesma página (ou URI) por intervalo de página. Uma vez que o limiar para o intervalo tenha sido excedido, o endereço IP do cliente irá ser adicionado à lista de bloqueio.

DOSSiteCount

Este é o limiar para o número total de pedidos de qualquer objeto, pelo mesmo cliente no mesmo listener por intervalo. Uma vez que o limiar para o intervalo tenha sido excedido, o endereço IP do cliente irá ser adicionado à lista de bloqueio.

DOSPageInterval

O intervalo para o limiar da contagem do número de páginas; padrão é de 1 segundo.

DOSSiteInterval

O intervalo para o limiar da contagem do número de sites; padrão é de 1 segundo.

DOSBlockingPeriod

É o período (em segundos) que o cliente será bloqueado se ele for adicionado a lista negra. Durante este período, todas requisições subsequentes retornarão 403 (Forbidden) . Como o timer é resetado para cada requisição subsequente, não é necessário definir um período longo, no caso de um ataque DoS, este timer ficará resetando.

DOSEmailNotify

Se este valor estiver definido, um email será enviado ao endereço especificado cada vez que um IP for colocado na lista negra. Um mecanismo de travamento utilizando o /tmp previne que vários emails iguais sejam enviados.

Nota
Tenha certeza de que a varável MAILER esteja definida corretamente no mod_evasive.c (our mod_evasive20.c). O padrão é "/bin/mail -t %s" onde %s é utilizado para denotar o endereço de destino definido na configuração. Se você estiver rodando em linux ou qualquer outro sistema operacional com um mailer diferente, você terá que alterar isto.


DOSSystemCommand

Se este valor for definido, o comando especificado será executado toda vez que um IP for colocado na blacklist. Isto é projetado para habilitar system calls para o ip filter ou outras ferramentas.
Um mecanismo de travamento utilizando o /tmp previne que vários emails iguais sejam enviados.


DOSLogDir

Defina um diretório temporário alternativo
Por padrão o "/tmp" é utilizado para o mecanismo de trava, o que pode causar alguns problemas de segurança se o sistema estiver aberto a usuários shell. Se você tiver usuários shell não privilegiados, você deverá criar um diretório com permissões de escrita apenas para o usuário do Apache.


Lista Branca de Endereços IP

Endereços IP de clientes confiáveis podem ser definidos em uma lista branca para garantir que eles nunca sejam bloqueados. O propósito da lista branca é para proteger software, scripts, robos e outras ferramentas automatizadas sejam bloqueadas. A lista branca não deve ser utilizada de forma descontrolada pois pode tornar a máquina suscetível a abusos. Dificilmente este módulo será acionado sem ser por um ataque malicioso, e por esta razão é mais apropriado permitir que o módulo tome as decisões se um indivíduo deve ou não ser bloqueado.

Para colocar um endereço ou range na lista branca utilize a seguinte sintaxe:

DOSWhitelist 127.0.0.1
DOSWhitelist 127.0.0.*
Wildcards podem ser utilizados para liberar múltiplos IPs. Você também pode utilizar vários comandos DOSWhitelist na mesma configuração.


Mais Informações
Se você quiser consultar informações adicionais sobre o tópico.





Slowloris

O Slowloris a um grosso modo é uma ferramenta para causar DoS em diversos servidores web utilizando pouca banda. Ele possui diversos métodos para isto, creio que o mais conhecido seja manter conexões abertas no servidor, fazendo com que novas conexões sejam negadas aos outros clientes, talvez eu faça outro artigo dando foco nesta ferramenta.

1) Instale o módulo:

Código :
apt-get -y install libapache2-mod-qos

2) Edite o arquivo /etc/apache2/mods-available/qos.conf e defina os valores de acordo com suas necessidades. Não existe uma receita de bolo para isso, você deve definir os valores de acordo com sua máquina.

3) Reinicie o apache novamente
Categorias
Não Categorizado

Comentários

  1. Avatar de MarcusMaciel
    Parabéns pelo Artigo Iceman. Muito bom artigo e certamente irá ajudar vários usuários do under.

+ Enviar Comentário