Existe uma regra para o iptables limitar a quantidade de pacotes SYN que um / 24 intervalo de IPs pode enviar?

5

Como posso bloquear blocos IP de classe C inteiros quando eles enviam muitos pacotes SYN para o meu servidor Ubuntu 12.04?

Exemplo do que vejo durante um ataque de inundação SYN:

Cada IP diferente envia apenas 1 pacote SYN, portanto, o firewall não o bloqueia. Mas o intervalo 192.132.209.* todos juntos está enviando muitos pacotes SYN em um período de tempo muito pequeno.

    
por Salvatorelab 12.01.2013 / 14:35

3 respostas

4

Tomando 10.0.0.0/24 como exemplo, algo como

iptables -A INPUT -p tcp -s 10.0.0.0/24 --syn -m limit --limit 1/s --limit-burst 3 -j RETURN

deve fazer o trabalho e é bastante auto-descritivo, de modo que não precisa de nenhuma explicação, eu acho. Aqui está um bom, fácil de ler artigo sobre como evitar ataques de inundação TCP SYN: Linux Iptables Limit o número de ataques de conexão tcp / syn-flood de entrada . Explica mais sobre as opções e fornece uma maneira mais extensa também (registro, cadeia separada, etc.).

Não consigo ver o estado atual de seu iptables , portanto, convém adicioná-lo na parte superior da cadeia INPUT ou integrá-lo corretamente em seus scripts atuais.

Nos comentários que você mencionou, você está procurando uma maneira automática de encontrar esses bloqueios de IP. Bem, eu deveria deixar de fora o filtro de endereço de origem no comando ( -s 10.0.0.0/8 ), então o limite será aplicado ao mundo todo.

    
por gertvdijk 12.01.2013 / 15:15
1

Eu encontrei uma solução semelhante. Não é o que eu queria exatamente, mas muito parecido:

/sbin/iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 --connlimit-mask 24 -j REJECT --reject-with tcp-reset

Limita as novas conexões tcp (porta 80) a 20 por bloco de classe C. Encontrei aqui:
Exemplo: Limitações da Classe C

    
por Salvatorelab 12.01.2013 / 21:07
0

Endereço IP da Classe C: 192.0.0.0 a 223.255.255.255.

Nesse caso, a opção --connlimit-mask deve ser 192.0.0.0/3 na notação CIDR.

Se você especificar uma máscara de 24, ela será aplicada à Classe A e à Classe B também. Você precisa usar a notação CIDR para especificar a classe com certeza.

--connlimit-mask 192.0.0.0/24 
    
por Garfield 04.01.2015 / 13:39

Tags