Seguramente muchos de vosotros habéis querido estar informados del estado de vuestro servidor a través de alarmas de email, ¿verdad? Desde hace muchísimos años conozco multitud de sistemas de monitorización como por ejemplo, Cacti, Nagios (mi preferido), MRTG, HP Openview, Graphite, Pandora , Munin... pero posiblemente os haya interesado alguna vez recibir alarmas o notificaciones de vuestro servidor totalmente personalizadas. En este pequeñísimo tutorial, os voy a enseñar como enviar emails a través de la consola Shell gracias al programa SSMTP. De esta forma, junto con el programador de tareas CRON y un poco de Bash Scripting, podemos hacer maravillas a la hora de estar al tanto del estado de nuestros equipos. Espero que os guste mi nuevo tutorial.
Excepto el proceso de instalación del paquete SSMTP, todos los pasos podemos aplicarlos a cualquiera de las distribuciones actuales de GNU/Linux.
El manual es muy sencillo y seguro que no tendréis problemas en seguirlo con mis indicaciones. ¡Allá vamos!
1.- ELEMENTOS UTILIZADOS EN ESTE TUTORIAL
Máquina virtual con GNU/Linux Debian 8.0 corriendo bajo VMWARE WORKSTATION 11
SSMTP
2.- INSTALACIÓN DE SSMTP
Antes de realizar la instalación del paquete SSMTP, es recomendable primeramente actualizar la lista de paquetes de nuestros repositorios. Ejecutaremos (con root o sudo) los siguientes comandos para actualizar e instalar el paquete SSMTP:
# apt-get update # apt-get install ssmtp
3.- CONFIGURACIÓN DE SSMTP
Ahora toca configurar SSMTP a través de su fichero principal de configuración en /etc/ssmtp/ssmtp.conf. Antes ed nada realizaremos uan copia de seguridad por si necesitamos revertir los cambios. Para ello haremos uso de nuestro editor de textos preferido, en mi caso usaré vi:
# cp /etc/ssmtp/ssmtp.conf /etc/ssmtp/ssmtp.conf.backup # vi /etc/ssmtp/ssmtp.conf
El propósito de usar SSMTP es usar como una cuenta de GMAIL para el envío de correos desde nuestro propio equipo. Por tanto, debemos configurar los siguientes valores (el resto de valores podemos dejarlos tal y como están) en el fichero principal de configuración:
root = Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo. mailhub = smtp.gmail.com:587 AuthUser=tu_email AuthPass=tu_password UseTLS=YES UseSTARTTLS=YES rewriteDomain=gmail.com hostname=localhost FromLineOverride=YES
Ahora necesitamos asociar al usuario root (en mi caso estoy usando root), la cuenta de email en el siguiente fichero /etc/ssmtp/revaliases quedando de la siguiente forma
root:Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.:smtp.gmail.com:587
Por último, para evitar que los emails se envien con From: root, ejecutaremos el siguiente comando y cambiaremos al valor a nuestro gusto:
# chfn -f 'Aquí nuestro valor' root
4.- CAMBIOS EN LA POLÍTICA DE SEGURIDAD DE GOOGLE
Tras el último cambio en la política de seguridad de Google, ya no es posible enviar los emails si no se usa una autenticación de tipo OAuth. Por tanto, debemos cambiar nuestra cuenta para que use una política de seguridad de acceso menos segura. Os recomiendo hacer esto con una cuenta de gmail nueva que tengáis en exclusiva para el envio de emails, no lo hagais con cuestra cuenta personal. El mensaje de Gmail y el link para cambiar la seguridad es el siguiente:
Gmail has recently started blocking emails from senders that do not authenticate using OAuth. To allow SSMTP to use gmail's SMTP server, you need to allow access to unsecure apps.
Una vez hecho este cambio ya podremos enviar los emails desde SSMTP.
5.- COMPROBAR EL ENVIO DE EMAILS
Para enviar un email podemos hacerlo de la siguiente forma:
# echo "Aqui el mensaje" | mail -s "Aqui el asunto" email_destino
6.- PEQUEÑO SCRIPT DE ENVIO DE ALARMA
A modo de ejemplo, os pongo un pequeño Script que comprueba si la ocupación del sistema /raíz supera el valor de 75%. Si este valor es superado, se envia un email avisando de dicha problema. El script hay que ponerlo en el CRON y programarlo cada X tiempo, pero existe un problema. Si lo lanzamos cada 5 minutos y el umbral es > de 75%, nos llegará un email cada 5 minutos, haciendo que sea muy molesto y posiblemente Google nos termine bloqueando la cuenta. Para ello, el CRON lo lanzaremos cada 5 minutos pero pondremos un pequeño contador en el Script de bash que compruebe si el email se ha enviado con anterioridad ( por ejemplo 6 horas ). De esta forma evitamos el SPAM. Os dejo a vuestro gusto la creación de Scripts y alarmas personalizadas:
El CRON quedará de la siguiente forma:
*/5 * * * * /scripts/alarmas.sh
Y el contenido del Script es:
#!/bin/bash USAGE_ROOT=`df -h / | awk '{print $5}' | tail -n 1 | cut -f1 -d "%"` EMAIL="Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo." NOW=`date +%s` LAST_MAIL="/tmp/alarmas_emails.log"
if [ ! -f $LAST_MAIL ]; then touch $LAST_MAIL fi
if [ "$USAGE_ROOT" -gt "75" ]; then let DIF=$NOW-`cat $LAST_MAIL` if [ $DIF -gt 21600 ]; #6 horas then echo "El porcentaje de uso del directorio / ha superado el umbral de 50%. Actualmente su valor es de $USAGE_ROOT" | mail -s "El umbral de / ha sido superado: $USAGE_ROOT%" $EMAIL echo $NOW > /tmp/alarmas_emails.log fi fi
El email llega de la siguiente forma a nuestro correo de Gmail:
Si necesitas una Web para tu negocio, atractiva, llamativa y funcional, no lo dudes y contacta conmigo. Me adapto a cualquier requisito para tu negocio.