Meu sistema funciona! :)
Requerimentos:
- sudo
- em
- OPCIONAL: heirloom-mailx (no meu caso)
NOTA: Você pode usar outro agente de email e modificar o script.
Agora minhas configurações:
mod_evasive (/etc/apache2/mods-enabled/mod-evasive.conf)
<IfModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 10
DOSSiteCount 150
DOSPageInterval 2
DOSSiteInterval 2
DOSBlockingPeriod 10
DOSSystemCommand "sudo /usr/local/bin/ddos_system.sh %s"
DOSLogDir "/tmp"
</IfModule>
sudoers
www-data ALL=NOPASSWD: /sbin/iptables *, /usr/bin/at *
ddos_system.sh (copie para / usr / local / bin)
#!/bin/bash
#set -x
[ -z $1 ] && (echo "Usage: $0 <sourceip>"; exit 1)
[ -x /usr/bin/at ] || (echo "Please, install 'at'"; exit 1)
#############
## OPTIONS
#
SOURCEIP="$1"
HOSTNAME=$(/bin/hostname -f)
BODYMAIL="/tmp/bodymailddos"
MODEVASIVE_DOSLogDir="/tmp"
FROM="Anti DDOS System <[email protected]>"
# Multiple accounts separated by commas
TO="[email protected] [email protected]"
# Time-units can be minutes, hours, days, or weeks
BANNEDTIME="1 minute"
#
##
############
# Custom mail message
{
echo "Massive connections has been detected from this source IP: $SOURCEIP
The system has blocked the IP in the firewall for $BANNEDTIME. If the problem persist you should block that IP permanently.
- Anti DDOS System -"
} > $BODYMAIL
/sbin/iptables -I INPUT -s $SOURCEIP -j DROP
echo "/sbin/iptables -D INPUT -s $SOURCEIP -j DROP" | at now + $BANNEDTIME
cat $BODYMAIL | /usr/bin/mail -r "$FROM" -s "DDOS Attack Detected - $HOSTNAME" $TO
rm -f "$MODEVASIVE_DOSLogDir/dos-$SOURCEIP"
MINI FAQ
Q: E a última linha? (rm -f ...)
R: Quando mod_evasive detecta alguns ataques Ele cria um arquivo (arquivo de bloqueio) em "DOSLogDir" com o nome "dos- [sourceip]" (ex. dos-8.8.8.8) e executa o "DOSSystemCommand" uma vez até esse arquivo desaparecer. Então, quando você executa "iptables", você deve remover o arquivo de bloqueio para a próxima verificação.
Testado no Debian 7.
Boa sorte, respeito.