Configurer la notification par mail dans Nagios
En cas d’alerte dans l’outil de monitoring Nagios, il est possible d’envoyer un mail aux contacts spécifiés grâce au programme postfix.
On va donc installer postfix (qui remplacera sendmail) ainsi qu’un outil pour tester l’envoi de mails: mailx. Ensuite on configurera Nagios pour qu’il envoie ses mails via postfix.
Désactivation de sendmail
On va commencer par arrêter sendmail (utilisez kill si le process est récalcitrant)
# service sendmail forcestop
On le désactive au démarrage
# echo 'sendmail_enable="NONE"' >> /etc/rc.conf
Ainsi que dans le fichier /etc/periodic.conf (s’il n’existe pas, créez-le) auquel on ajoute les lignes
daily_clean_hoststat_enable="NO" daily_status_mail_rejects_enable="NO" daily_status_include_submit_mailq="NO" daily_submit_queuerun="NO"
Installation des programmes nécessaires
On installe postfix, procmail et mailx et on crée un lien symbolique dans /etc/ pour éviter la confusion d’autres applications utilisant postfix
# cd /usr/ports/mail/postfix && make config ... select PCRE, SASL2, and TLS # make install clean > Would you like to activate Postfix in /etc/mail/mailer.conf [n] ... Répondez "y" # postconf -a > cyrus > dovecot ... ok les modules SASL sont intégrés à postfix # cd /usr/ports/mail/procmail && make install clean # cd /usr/ports/mail/mailx && make install clean # ln -s /usr/local/etc/postfix /etc/postfix # ln -s /usr/sbin/mailwrapper /usr/sbin/sendmail
SASL (Secured Anthentication and Security Layer) est nécessaire pour se loguer sur un relais SMTP avec un login et un mot de passe.
Le user « postfix » est automatiquement ajouté dans le fichier /etc/passwd.
On n’oublie pas d’activer postfix au démarrage dans /etc/rc.conf
# echo 'postfix_enable="YES"' >> /etc/rc.conf
Configuration de postfix
On peut configurer postfix en éditant le fichier /usr/local/etc/postfix/main.cf (remplacez les variables mises en évidence) pour qu’il ressemble à ceci:
Utilisation avec un relais SMTP
Dans mon cas, j’utilise un relais SMTP externe sur un port non-standard exigeant une authentification par login et mot de passe, ce qui est typiquement le cas pour GMail.
Création du fichier db contenant les identifiants
J’ai donc créé le fichier /usr/local/etc/postfix/sasl_passwd contenant les identifiants nécessaires. Si vous le configurez pour GMail, l’identifiant est votre adresse email.
smtp.provider.com:2525 login:password
On restreind ses permissions par soucis de sécurité
chown root:wheel /usr/local/etc/postfix/sasl_passwd && chmod 600 /usr/local/etc/postfix/sasl_passwd
> Postfix démarre d’abord avec les droits root, lit tous les fichiers nécessaires, et s’exécute ensuite avec l’utilisateur postfix.
On transforme le fichier plat en database sasl_passwd.db afin que postfix puisse lire plus rapidement les credentials qui y sont contenus
postmap /usr/local/etc/postfix/sasl_passwd
Un moyen de tester est de faire une query vers la db avec le paramètre -q. Si tout est correct, vous recevrez le login et mot de passe
# postmap -q smtp.provider.com:2525 /usr/local/etc/postfix/sasl_passwd > login:password
Edition de la config de postfix pour prendre en compte les paramètres SMTP
On édite le fichier /usr/local/etc/postfix/main.cf pour lui ajouter les lignes
relayhost = send.one.com:2525 smtpd_sasl_auth_enable = yes smtpd_sasl_path = smtpd smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/usr/local/etc/postfix/sasl_passwd smtp_sasl_type = cyrus smtp_sasl_security_options = noanonymous smtp_use_tls = no smtp_cname_overrides_servername = no
On édite le fichier /etc/mail/aliases pour modifier l’adresse email de root
root: myemail@gmail.com
Et on génère ensuite le fichier .db qui va avec
# newaliases ou # makemap hash /etc/mail/aliases.db < /etc/mail/aliases # postmap -q root /etc/mail/aliases ... affiche l'adresse mail de root ...
Dans le cas où le nom de domaine interne est différent du nom de domaine externe
Si vous laissez la config telle quelle, vous recevrez un mail d’erreur avec le message
Sender address rejected: not owned by user myemail@gmail.com
Votre relais SMTP vous préviens que vous tentez d’envoyer un mail en une adresse de sender qui ne correspond pas à votre compte: « root@monhost.mondomaine.be » au lieu de « myemail@externaldomain.com ».
Pour celà, il faut créer une table de mapping et spécifier à postfix qu’il doit réécrire l’adresse du sender dans le mail header:
# touch /usr/local/etc/postfix/generic # echo "root@monhost.mondomaine.be myemail@externaldomain.com" >> /usr/local/etc/postfix/generic # echo "nagios@monhost.mondomaine.be myemail@externaldomain.com" >> /usr/local/etc/postfix/generic # postmap /usr/local/etc/postfix/generic # echo "smtp_generic_maps = hash:/usr/local/etc/postfix/generic" >> /usr/local/etc/postfix/main.cf
Test d’envoi de mail
On peut finalement tester postfix en le démarrant
# /usr/local/etc/rc.d/postfix onestart
ou en lui demandant de faire un reload de sa config si il est déjà démarré
# postfix reload
On va créer un mail de test dans /tmp/testmail.txt
To: destinataire@mail.be From: myemail@ecternaldomain.com Subject: Testmessage This is a test for sending
et envoyer ce mail de test vers sendmail (postfix en fait)
# sendmail destinataire@mail.be < /tmp/testmail.txt
Vous devriez avoir reçu un mail sur votre adresse destinataire@mail.be
Troubleshooting
Si vous n’avez rien reçu ou si vous recevez un mail « Undelivered mail returned to sender », vérifiez les logs /var/log/messages et /var/log/maillog .
Pour tester l’envoi de mail à partir de Nagios, vous pouvez sélectionner un service et cliquer sur « send custom notification for this service ». Vous devriez recevoir un mail venant de Nagios.
Tags: nagios
Trackback from your site.
Comments (1)
Supervision Nagios | White Flag
| #
[…] comment configurer les notifications et l’envoi de mail. Par contre je vous ai déniché un petit article bien sympas qui vous […]
Reply