NAGIOS – Supervision d’un serveur de messagerie

Supervision d’un serveur de messagerie

Aujourd’hui, le serveur de messagerie est l’un des serveurs les plus critiques dans le système d’information de l’entreprise. En effet, l’e-mail devient le canal de communication le plus utilisé dans le milieu professionnel. D’où vient la nécessité d’avoir un trafic e-mail fiable et performant. Pour cette raison, la surveillance et le contrôle du serveur de messagerie sont donc essentiels pour une communication fiable au sein de l’entreprise.

Nagios assure la surveillance des services de courrier électronique comme SMTP, POP3 et IMAP en vérifiant la disponibilité de ces services et en vous alertant en cas de pannes. Le contrôle de la messagerie avec Nagios consiste à :

  • Contrôler des services SMTP, POP3 et IMAP ;

  • Contrôler l’envoi des e-mails ;

  • Contrôler la réception des e-mails ;

  • Contrôler l’ensemble du processus de livraison des e-mails de bout en bout ;

  • Contrôler l’accès web du client .

1. Contrôle d’un serveur SMTP

SMTP (Simple Mail Transfer Protocol) est un protocole de communication utilisé pour transférer le courrier électronique sur les réseaux d’un serveur de messagerie électronique vers un autre. Un serveur SMTP est un service qui utilise le port 25 par défaut pour envoyer les e-mails. Par conséquent, il est primordial de contrôler sa disponibilité sur le réseau. Nagios offre le plugin check_smtp permettant de tester la connexion avec le serveur SMTP. La syntaxe du plugin check_smtp est la suivante :

check_smtp -H host [-p port] [-C command] [-R response] 
           [-e expect] [-f from addr] [-F hostname] 
           [-A authtype -U authuser -P authpass] 
           [-w <warning time>] [-c <critical time>] 
           [-t timeout] [-S] [-D days] [-n] [-4|-6]

Comme ce plugin accepte la plupart des options standards, nous passons directement à un exemple d’utilisation.

./check_smtp smtp.gmail.com  
 
SMTP OK - 0.082 sec. response time|time=0.082320s;;;0.000000

Le résultat retourné montre que le service SMTP est bien fonctionnel sur l’hôte smtp.gmail.com et répond en 0.082 seconde.

Une définition de base de commande de contrôle de SMTP devrait ressembler à ceci :

define command { 
    command_name           check_smtp 
    command_line           $USER1$/check_smtp -H $HOSTADDRESS$  
}

Un autre plugin peut être utilisé pour contrôler le service SMTP : c’est le plugin check_smtp_send. Ce plugin se connecte sur un serveur SMTP et essaye d’envoyer un message. Vous pouvez récupérer ce plugin à partir de cette adresse : http://buhacoff.net/software/check_email_delivery/archive/check_email_delivery-0.7.1b.tar.gz

Voici la syntaxe à utiliser avec check_smtp_send :

check_smtp_send --hostname <HOST> --mailto <recipient@your.net>  
                --mailfrom <sender@your.net> --body <message>  
                --header <header> --port <number> 
                --warning <seconds> --critical <seconds>  
                --expect-response <code> --auth <method>  
                --username <username> --password <password> 
                  --timeout <seconds> [--tls|--notls] [--ssl--nossl]

 Plusieurs options sont acceptées par ce plugin, à savoir :

  • –hostname : cette option spécifie l’adresse ou nom du serveur SMTP à contrôler.

  • –mailfrom : cette option permet de définir l’adresse mail de l’expéditeur.

  • –mailto : cette option permet de définir l’adresse mail du destinataire. On peut spécifier plusieurs adresses mail séparées par une virgule.

  • –username, –password : cette option spécifie le nom d’utilisateur et le mot de passe à utiliser lors de la connexion au serveur SMTP.

  • –body : cette option spécifie le corps du message.

  • –header : cette option permet de définir un en-tête arbitraire dans le message.

  • –port : cette option spécifie le port à utiliser sur le serveur SMTP. Par défaut le port est 25 pour SMTP, 465 pour SSL et 587 pour TLS.

  • –warning : cette option renvoie un état d’avertissement si la période en secondes pour se connecter au serveur SMTP dépasse la valeur passée en paramètre. Par défaut, la valeur est 15 secondes.

  • –critical : cette option renvoie un état critique si la période en secondes pour se connecter au serveur SMTP dépasse la valeur passée en paramètre. Par défaut, la valeur est 30 secondes.

Voici un exemple d’utilisation de ce plugin :

check_smtp_send -H mail.server.net --mailto recipient@your.net -mailfrom 
sender@your.net --body ’Homeruns 5’ --header ’Subject: Hello, world!’ 
--header ’X-Your-Header: Yes’  
 
SMTP SEND OK - 1 seconds

Une définition simple d’une commande utilisant le plugin check_smtp_send devrait ressembler à ceci :

define command{ 
    command_name       check_smtp_send 
    command_line       $USER1$/check_smtp_send -H $HOSTADDRESS$ 
    --mailto $ARG1$ --mailfrom $ARG2$ -p $ARG3$ 
}

2. Contrôle d’un serveur POP

POP (Post Office Protocol) est un protocole très populaire permettant de récupérer des e-mails électroniques sur un serveur distant à travers un client e-mail. POP qui est actuellement dans la version 3 opère sur un réseau TCP/IP et utilise le protocole de transfert TCP via le port 110.

La sonde check_pop est dédiée à la supervision d’un serveur POP3 avec Nagios. Elle est basée sur le plugin check_tcp. Pour cela, sa syntaxe est identique au plugin original :

check_pop -H host [-p port] [-w <warning>] 
          [-c <critical>] [-s <send string>] 
          [-e <expect string>] [-q <quit string>] [-A] 
          [-m <maximum bytes>] [-d <delay>] 
          [-t <timeout seconds>] [-r <refuse state>] 
          [-M <mismatch state>] [-v] [-4|-6] [-j] 
          [-D <days to cert expiry>] [-S] [-E]

Veuillez-vous référer au plugin check_tcp pour comprendre les options de ce plugin. Ci-dessous un exemple d’un contrôle exécuté avec le plugin check_pop :

./check_pop -H pop.test.com 
 
POP OK - 0.006 second response time on port 110 
[* OK*******************************]|time=0.005728s;;;0.000000;10.000000

Une définition de base de la commande de contrôle d’un service POP3 devrait ressembler à ceci :

define command{ 
   command_name          check_pop 
   command_line          $USER1$/check_pop -H $HOSTADDRESS$  
}

3. Contrôle d’un serveur IMAP

IMAP (Internet Message Access Protocol) est aussi un protocole permettant de récupérer des e-mails électroniques. IMAP sous sa version 4 se pose comme une alternative au protocole POP3. IMAP4 utilise le protocole de transfert TCP via le port 143.

check_imap est une sonde basée sur le plugin check_tcp permettant de tester la connexion sur un serveur IMAP. Sa syntaxe est identique au plugin original check_tcp :

check_imap -H host [-p port] [-w <warning>] 
           [-c <critical>] [-s <send string>] 
           [-e <expect string>] [-q <quit string>] [-A] 
           [-m <maximum bytes>] [-d <delay>] 
           [-t <timeout seconds>] [-r <refuse state>] 
           [-M <mismatch state>] [-v] [-4|-6] [-j] 
           [-D <days to cert expiry>] [-S] [-E]

Ci-dessous un exemple d’un contrôle exécuté avec le plugin check_imap :

./check_imap mail.test.com 
 
IMAP OK - 0.004 second response time on port 143 [* OK 
*******************************]|time=0.004122s;;;0.000000;10.000000

Une définition de base de commande de contrôle d’un service IMAP4 devrait ressembler à ceci :

define command { 
    command_name          check_imap 
    command_line          $USER1$/check_imap -H $HOSTADDRESS$  
}

Un autre plugin peut être utilisé pour contrôler un serveur IMAP: C’est le plugin check_imap_receive. Ce plugin se connecte à un compte e-mail IMAP et recherche les messages. Vous pouvez le récupérer à partir de cette adresse : http://buhacoff.net/software/check_email_delivery/archive/check_email_delivery-0.7.1b.tar.gz

Voici la syntaxe de ce plugin :

check_imap_receive --hostname <HOST>   
                   --mailto <recipient@your.net>  
                   --mailfrom <sender@your.net> --body <message>  
                   --header <header> --port <number> 
                   --warning <seconds> --critical <seconds>  
                   --mailbox <mailbox> --search <string>  
                   --username <username> --password <password> 
                   --timeout <seconds> [--tls|--notls] [--ssl|--nossl] 
                   [--download | --nodownload ]

Les options acceptées par ce plugin étant semblables au plugin check_smtp_send, voici un exemple d’utilisation sans détailler cette partie :

./check_imap_receive -H mail.server.net --username testuser --password mailpass 
 -s ALL -nodelete 
 
 IMAP RECEIVE OK - 1 seconds, 7 found 

La commande renvoie qu’une seule seconde a été passée pour se connecter au serveur IMAP mail.server.net. La commande a trouvé sept courriels dans la boîte aux lettres de l’utilisateur testuser.

Voici la commande Nagios qui peut être définie pour ce plugin :

define command{ 
    command_name     check_imap_receive  
    command_line     $USER1$/check_imap_receive  -H $HOSTADDRESS$ 
--mailto $ARG1$ --mailfrom $ARG2$ -p $ARG3$  -s ALL -nodelete 
}

4. Contrôle de la messagerie de bout en bout

Une supervision accrue du serveur de messagerie doit être aussi capable de contrôler le processus de livraison des e-mails de bout en bout. Pour cela, il existe un plugin check_email_deliverypermettant la supervision de la disponibilité et le bon fonctionnement de l’ensemble du processus de livraison des e-mails. Ce plugin utilise les deux plugins check_smtp_send et check_imap_receive pour vérifier une boucle de messagerie complète. L’illustration ci-dessus vous montre le principe de fonctionnement de check_email_delivery :

  • Un e-mail est envoyé vers une boîte e-mail à travers le serveur SMTP et en utilisant le plugin check_smtp_send.

  • Le serveur SMTP transmet l’e-mail à un serveur IMAP ou POP3.

  • La boîte aux lettres est analysée via les protocoles POP3 ou IMAP en utilisant check_imap_receive jusqu’à ce que cet e-mail arrive.

Le plugin check_email_delivery peut être récupéré de cette URL : http://buhacoff.net/software/check_email_delivery/. Les options utilisées par ce plugin sont celles qui sont proposées par les deux plugins check_smtp_send et check_imap_receive. Nous allons utiliser directement le plug-in check_email_delivery à travers l’exemple suivant :

./check_email_delivery  --plugin "$USER1$/check_smtp_send -H mail.server.net 
--mailto recipient@your.net --mailfrom sender@your.net 
--header ’Subject: Nagios Test %TOKEN1%.’" 
--plugin "$USER1$/check_imap_receive --H mail.server.net 
--username testuser --password mailpass  -s ALL 
--nodelete  -s SUBJECT -s ’Nagios Test %TOKEN1%.’"

L’exemple de contrôle précédent permet en première étape d’envoyer un e-mail avec le plugin check_smtp_send à travers le serveur SMTP mail.server.net et à partir de la boîte mail sender@your.net vers la boîte mail recipient@your.net avec un objet bien spécifique « Nagios Test %TOKEN1% ». En deuxième étape, de tester la réception de cet e-mail avec le plugin check_imap_receive en cherchant sur le mail avec l’objet « Nagios Test %TOKEN1% » dans la boîte mail recipient@your.net.

Il est alors possible de créer une commande check_email_delivery pour contrôler la messagerie de bout en bout par Nagios :

define command{ 
   command_name                check_email_delivery 
   command_line                $USER1$/check_email_delivery  -p 
’$USER1$/check_smtp_send -H $HOSTADDRESS$ --mailfrom $ARG3$ --mailto $ARG4$  
-U $ARG5$ -P $ARG6$ --header "Subject: Nagios %TOKEN1%" -w $ARG1$ -c $ARG2$’ -p 
’$USER1$/check_imap_receive  -H $HOSTADDRESS$ -U $ARG5$ -P $ARG6$ -s SUBJECT 
-s "Nagios %TOKEN1%" -w $ARG1$ -c $ARG2$’ -w $ARG1$,$ARG1$ -c $ARG2$,$ARG2$ 
}