Détection des attaques DDOS avec Nagios
Les attaques DDOS sont sous le feu de la rampe (et des médias) depuis l'affaire Wikileaks.
C'est une attaque assez difficile à détecter car contrairement à des attaques plus "classiques", elle se base sur le fait d'inonder la machine cible de requêtes venant d'un nombre important de machines zombies (c'est à dire infecté par un programme qui va lancer une attaque).
Nous allons dans ce billet voir comment utiliser Nagios pour envoyer des alertes en cas de détection d'une attaque de type DDOS SYN Flood.
Pour cela j'ai développé (sous licnce GPL v3) un plugin Nagios disponible à l'adresse suivante:
http://svn.nicolargo.com/nagiosautoinstall/trunk/check_ddos.pl
Installation du script
Il faut disposer d'un serveur Nagios correctement configuré. Puis exécuter les commandes suivantes:
cd /usr/local/nagios/libexec
sudo rm -f check_ddos.pl
wget http://svn.nicolargo.com/nagiosautoinstall/trunk/check_ddos.pl
chmod a+rx check_ddos.pl
sudo chown nagios:nagios check_ddos.pl
Test du script:
./check_ddos.pl -w 50 -c 60
No DDOS attack detected (5/50)
Configuration de Nagios
Pour ajouter un service de détection DDOS SYN Flood sur la machine locale (en clair pour vérifier les attaques DDOS vers le serveur hébergeant Nagios), il faut dans un premier temps éditer le fichier commands.cfg (par défaut dans le répertoire /usr/local/nagios/etc/objects) pour ajouter la nouvelle commande de detection DDOS SYN Flood:
# check_ddos
define command{
command_name check_ddos
command_line $USER1$/check_ddos.pl -w $ARG1$ -c $ARG2$
}
Puis il faut éditer le fichier localhost.cfg (qui se trouve également dans le répertoire /usr/local/nagios/etc/objects):
# Define a DDOS SYN Flood detection service
# http://blog.nicolargo.com/?p=4100
# Warning: >50 SYN_RECV
# Critical: >70 SYN_RECV
define service{
use local-service
host_name bilbo
service_description DDOS SYN Flood detect
check_command check_ddos!50!70
}
Nous venons ainsi de définir un service qui va émettre une alerte Warning quand le serveur aura plus de 50 connexions de type SYN_RECV ouvertes (plus de 70 pour une alerte Critical). Ces chiffrent sont bien sur à adapter selon les serveurs...
En bonus, si une alerte est généré, le plugin affiche le TOP 10 des adresses IP des machines zombies (pratique pour les bloquer avec des règles de Firewall Iptables).
Si vous souhaitez surveiller les attaques DDOS SYN Flood sur une autre machine, il faut utiliser le plugin NRPE qui va faire l'interface entre le serveur Nagios et le serveur à superviser.
Sources pour la rédaction de ce billet: