Você já olhou para o fail2ban? Isso pode ajudá-lo a reagir aos ataques recebidos descartando os IPs de origem no firewall.
Eu tenho usado as minhas próprias "regras de iptables" para bloquear todos os principais tipos de ataques de DDOS em servidores de jogos, pois esses ataques eram específicos de aplicativos / servidores de jogos, em vez dos ataques gerais de DDOS. Demorei quase 3 anos para estudar esses ataques e responder com essas regras. Até agora, eu estava usando um limite de taxa no iptables que automaticamente DROP o IP se ele fizesse 250 contas de conta / segundo, já que a taxa do cliente é muito mais baixa do que isso (o máximo é de 500kb / s). Isso ocorre porque os atacantes geralmente enviavam um grande número de contagens de acertos com pacotes do tamanho 15:30, pois esse é o tamanho geral do pacote em que o servidor do jogo responde bem. Isso funcionou muito bem até que alguém atacou com algo diferente hoje para passar por essa regra.
-A INPUT -p udp -m udp --dport 16000:29000 -m recent --set
-A INPUT -p udp -m udp --dport 16000:29000 -m recent --update --seconds 1 --hitcount 250 -j DROP
Recentemente, observei ataques que estavam facilmente produzindo 1-3mb / s de entrada, como visto através de "iftop" para meus servidores e as regras acima não os estavam bloqueando porque meu servidor de jogo estava respondendo com "... .disconnect "pacotes para todas as conexões de entrada. Isso acontece quando o servidor de jogo não reconhece a string de entrada ou o comprimento do pacote. Este foi o conteúdo do pacote:
Agora, como você pode ver, o pacote tem um tamanho enorme. De acordo com o Wireshark, onde peguei o pacote, o comprimento do pacote era 700 e o tamanho / tamanho dos dados era de cerca de 5000 bytes. E eu já vi isso antes, se você tiver um comprimento / tamanho de dados maior do pacote, ainda poderá ter uma taxa mais alta, mesmo com um número menor de contagens . Então, isso explica, talvez, por que ele teve uma entrada de cerca de 3mb / se não foi bloqueado pelas contagens de contas, porque nunca teve contagens maiores que 250.
Agora preciso de algo que seja mais específico para largura de banda do que o número de pacotes / segundo. Eu preciso de uma regra iptables que bloqueia automaticamente uma entrada > 1mb / s e pode usar o tamanho do pacote, se necessário. O tamanho geral dos dados / comprimento de um cliente de servidor de jogo justo normalmente teria comprimentos de pacotes e tamanho de dados de menos de 500 bytes, mas pode aumentar em alguns casos, mas nunca ocupará mais de 500kb / s de largura de banda.
A pergunta é diferente do resto das perguntas respondidas anteriormente, porque é a primeira aplicação específica. Em segundo lugar, estou pedindo uma solução iptables que negaria qualquer entrada > 1mb / s?
Atualização:
Eu fiz alguns trabalhos teóricos para explicar por que uma largura de banda de entrada de 3 Mb / s não é mais que 250 hitcounts / second e aqui está o trabalho:
3 Mb = 3x1024x1024 = 3,145,728 bits / s = 393,216 Bytes / s
Por isso,
Se um pacote tivesse o tamanho de 5000 bytes, o número máximo de pacotes por segundo deveria ser:
393216/5000 = 78,6 pacotes / segundo
E isso significa que se as regras do iptables tiverem que funcionar, o pacote deve ter sido menor que 393216/250 = 1516 bytes .