Algumas palavras cautelosas: A defesa contra um ataque DDoS é difícil e geralmente requer a ajuda do seu ISP . Só os iptables não protegem você e podem até ser prejudiciais. Eu não acho que você realmente quer fazer o que você está pedindo.
- O DDoS deve causar negação de serviço sobrecarregando seu sistema. O registro de pacotes aumentará a carga do seu sistema. Então você estaria fazendo um favor aos atacantes.
- A origem de um endereço IP é facilmente falsificável. Imagine que você está conectado ao seu servidor via ssh e um invasor aprende o endereço IP do seu laptop. É muito fácil enviar pacotes parecendo que vieram de um determinado IP, neste exemplo o do seu laptop. Seu servidor responderá bloqueando seu endereço IP, bloqueando-o efetivamente. Essa técnica permite que o invasor tenha qualquer endereço IP bloqueado pelo servidor. Novamente, você está fazendo um favor ao atacante e tornando o trabalho deles muito mais simples.
Com isso fora do caminho:
Registre cada endereço IP individual em seu syslog (limite de 1 entrada por IP e hora):
iptables -I INPUT 1 \! -i lo \
-m hashlimit --hashlimit-name "IP_SOURCES" \
--hashlimit-mode srcip \
--hashlimit-burst 1 \
--hashlimit-upto 1/hour \
-j LOG
Substitua iptables
por ip6tables
para fazer o mesmo com os pacotes IPv6.
O bloqueio de um IP funcionaria de maneira semelhante, basta lançar o módulo conntrack
na regra acima, corresponder NEW
connections e definir a meta de salto como DROP
. Mas, novamente, eu realmente acho que você faria um desserviço se realmente fizesse isso.
iptables -I INPUT 1 \! -i lo \
-m conntrack --ctstate NEW \
-m hashlimit --hashlimit-name "RATE_LIMIT" \
--hashlimit-mode srcip \
--hashlimit-burst 20 \
--hashlimit-above 1/min \
-j DROP
Isso permitirá 20 tentativas de conexão por minuto, descartando todas as outras tentativas de conexão. Pacotes de conexões estabelecidas ainda podem passar ilesos.
Como observado nos comentários, fail2ban
pode ser uma boa solução para bloquear tráfego indesejado. Não ajudará se os invasores estiverem gerando um flood SYN ou usando IPv6, mas será útil, por exemplo. se os invasores estiverem tentando forçar sua entrada em seu servidor ssh ou smtp com uma conexão IPv4 "normal".