Détection des attaques DDOS avec Nagios

Publié le 08 décembre 2010 par Nicolargo

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 command.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: