Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

RodGomes

Melhor proteção contra ataques slowloris e dos com iptables para apach

Recommended Posts

Olá pessoal, esse é meu primeiro post no forum e estou trazendo um assunto que não vejo muito em foruns brasileiros.



Proteção contra Slowloris e DOS usando iptables, firewall nativo do linux, compatível com WHM e especialmente para quem usa CSF.


Como muitos sabem, o CSF é uma excelente ferramenta e totalmente integrada ao WHM, mas para proteger meu servidor contra esses ataques eu sempre ouvi falarem do fail2ban, claro que é uma ferramenta excelente, porém eu não queria abrir mão do meu CSF e usar os dois juntos é pura gambiarra.



Desta forma, depois de muitas pesquisas e de não encontrar muita informação sobre o assunto, fiz meu próprio script iptables compatível com CSF, você não precisa instalar nada nem fazer gambiarras.



Segue abaixo:



#!/bin/sh
/sbin/iptables -N BLOCK_IP
/sbin/iptables -N SYN_CHECK
/sbin/iptables -N DOS_CHECK
/sbin/iptables -N SYN_ATTACK
/sbin/iptables -N DOS_ATTACK
#
# primeiro verifica se o IP esta bloqueado
/sbin/iptables -A INPUT -j BLOCK_IP
# derruba ele se estiver bloqueado
/sbin/iptables -A BLOCK_IP -p tcp -m multiport --dport 80,443 -m recent --name BlockedIP --rcheck --seconds 60 -j DROP
/sbin/iptables -A BLOCK_IP -p udp -m multiport --dport 80,443 -m recent --name BlockedIP --rcheck --seconds 60 -j DROP
# se passou o tempo desbloqueia ele
/sbin/iptables -A BLOCK_IP -p tcp -m multiport --dport 80,443 -m recent --name BlockedIP --remove -j RETURN
/sbin/iptables -A BLOCK_IP -p udp -m multiport --dport 80,443 -m recent --name BlockedIP --remove -j RETURN
#
# verifica: se existe mais de 20 conexões simultaneas com status SYN - ignora IP do Varnish Cache
/sbin/iptables -A INPUT -p tcp -m multiport --dport 80,443 --syn ! -s 123.456.789.0 -m connlimit --connlimit-above 20 -j SYN_CHECK
# verifica: conexão feita e posteriormente a frequencia - ignora IP do Varnish Cache
/sbin/iptables -A INPUT -p tcp -m multiport --dport 80,443 ! -s 123.456.789.0 -m state --state NEW -j DOS_CHECK
/sbin/iptables -A INPUT -p udp -m multiport --dport 80,443 ! -s 123.456.789.0 -m state --state NEW -j DOS_CHECK
#
# verifica se o ataque é frequente
/sbin/iptables -A SYN_CHECK -m recent --update --seconds 10 --hitcount 20 --name RATE -j SYN_ATTACK
/sbin/iptables -A DOS_CHECK -m recent --update --seconds 3 --hitcount 20 --name RATE -j DOS_ATTACK
# caso o ataque seja frequente, bloqueia por 1 minuto e gera log
/sbin/iptables -A SYN_ATTACK -j LOG --log-prefix "BLOCK SYN ATTACK: " --log-level 6
/sbin/iptables -A SYN_ATTACK -m recent --set --name BlockedIP -j DROP
/sbin/iptables -A DOS_ATTACK -j LOG --log-prefix "BLOCK DOS ATTACK: " --log-level 6
/sbin/iptables -A DOS_ATTACK -m recent --set --name BlockedIP -j DROP
#
# se o ataque não é frequente, libera
/sbin/iptables -A SYN_CHECK -m recent --set --name RATE -j ACCEPT
/sbin/iptables -A DOS_CHECK -m recent --set --name RATE -j ACCEPT
#

Para rodar é muito simples, se você usa WHM com CSF basta colocar em /usr/local/csf/bin/csfpre.sh e digitar no terminal csf -r


Usando isso seu servidor Apache estará protegido contra a maioria dos ataques pequenos DDOS, Slowloris e SYN Flood.



E claro, estou divulgando isso com um único objetivo: ver meu script sendo melhorado. Quando desenvolvi ele eu nunca tinha programado nada em iptables, só depois de muitas noites perdidas e estudos consegui chegar nesse resultado que considero ser o melhor que existe na internet disponível (eu pesquisei muito, posso falar com prioridade). Mas claro, se conhecerem um melhor ou tiverem sugestões para melhorar essa proteção, sejam bem vindos!



Façam bom proveito!


Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.