Como Niall mencionou, o mod_evasive funciona muito bem nessa situação e recentemente usei-o para parar um problema muito similar que eu estava tendo em um dos meus sites. Isso ajuda na situação em que você não está recebendo muitas conexões em um único IP, mas vê padrões não naturais ocorrendo no servidor.
No meu caso, eu também bloguei sobre aqui , eu instalei mod_evasive e configurei com as seguintes configurações:
<IfModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 3
DOSSiteCount 100
DOSPageInterval 3
DOSSiteInterval 5
DOSBlockingPeriod 300
DOSLogDir "/var/log/httpd/modevasive/"
DOSEmailNotify [email protected]
</IfModule>
Basicamente, se um único IP solicitar o mesmo recurso (arquivo) 3 vezes em 5 segundos; ou 100 acessos em qualquer arquivo dentro de 5 segundos; O Apache, em seguida, negará mais solicitações para esse arquivo.
Se você quiser aprimorar este script; você pode ter comandos do sistema acionados quando seus parâmetros são atingidos. No meu caso, adicionei este comando à configuração acima:
DOSSystemCommand "/usr/bin/sudo /usr/sbin/csf -td %s 3600"
Isso faz com que meu firewall CSF bloqueie o IP por uma hora. Você poderia facilmente escrever um script iptables para fazer a mesma coisa, mas o CSF torna isso fácil para mim.
De qualquer forma, espero que ajude você a atacar seus atacantes DDOS!