Meus 2 cents,
Obrigado por compartilhar !
A solucao apontada usando o modulo 'recent' eh bem legal - simples e limpo de usar.
Para quem for estudar este script, alguns detalhes:
- Como usa '$IPTABLES -I' as regras sao inseridas, entao fica na posicao invertida - o resultado final eh (iptables -nvL):
INPUT -i ${INTERFACE} -p tcp -m multiport --dports 80,443 -m state --state NEW -m recent --update --seconds ${SECONDS} --hitcount ${BLOCKCOUNT} -j ${ACTION}
INPUT -i ${INTERFACE} -p tcp -m multiport --dports 80,443 -m state --state NEW -m recent --set
E isto eh correto: primeiro checa se o IP ja esta na lista 'recent' com os limites indicados, se sim ja 'dropa' (descarta). Caso nao esteja na lista, cai na regra seguinte e inclui nesta lista.
Uma pequena alteracao que pode ser legal eh incluir a opcao '--name XXXX' nas duas linhas, assim voce indica qual a lista que se refere - o que pode ser util se voce quiser criar varias listas 'recent' com valores diferentes (e protocolos diferentes).
Um ponto que gostaria de acrescentar eh que pode ser interessante usar este tipo de controle na tabela 'RAW' de forma que, caso o IP esteja na lista, evita que o mesmo entre no 'connection tracking' do NAT (observar a troca de -m state NEW para -m tcp --syn que eh basicamente a mesma coisa, mas sem usar tracking).
Por exemplo:
$IPTABLES -t raw -I PREROUTING -p tcp -m multiport --dports 80,443 -i ${INTERFACE} -m tcp --syn -m recent --set --name HTTP
$IPTABLES -t raw -I PREROUTING -p tcp -m multiport --dports 80,443 -i ${INTERFACE} -m tcp --syn -m recent --name HTTP --update --seconds ${SECONDS} --hitcount ${BLOCKCOUNT} -j ${ACTION}
Outro adendo: tem outros modulos que podem ser uteis neste caso, como 'hashlimit', 'limit' e 'synproxy' (este ultimo eh legal, mais moderno e ainda um tanto subestimado).
Continue postando sobre o assunto, sempre eh legar ver conteudos diferentes (em especial como cyberseguranca) por aqui.
Saude e Sucesso !