Ir al contenido

Notificaciones de seguridad por email desde el terminal con msmtp y Gmail

Rogelio Guerra Riverón
Autor
Rogelio Guerra Riverón
Construyendo mi propia infraestructura web desde cero. Aquí documento cada paso: servidores, redes, contenedores y lo que vaya surgiendo.

Por qué necesitas esto
#

Cuando corres un servidor en casa, necesitas saber si algo raro sucede. Un script que te envíe un email cuando detecta un intento de acceso fallido, un certificado por expirar o un disco casi lleno es invaluable. El problema es que tu ISP bloquea el puerto 25, así que no puedes usar sendmail directamente. Aquí entra msmtp.

msmtp es un cliente SMTP minimalista. No es un servidor de correo completo, solo envía emails a través de servidores externos como Gmail. Perfecto para casos como el nuestro.

Instalación
#

En Debian/Ubuntu:

sudo apt-get update
sudo apt-get install msmtp msmtp-mta

La opción msmtp-mta es importante porque crea un enlace simbólico que hace que otros programas piensen que estás usando sendmail tradicional.

Configuración básica con Gmail
#

Gmail tiene dos opciones: contraseña de aplicación o usar el protocolo SMTP directo. Voy a usar contraseña de aplicación porque es más seguro y funciona sin habilitar “aplicaciones menos seguras”.

Primero, crea una contraseña de aplicación en tu cuenta Google:

  1. Ve a myaccount.google.com
  2. Seguridad → Contraseñas de aplicaciones (necesitas 2FA habilitado)
  3. Selecciona “Correo” y “Otros (personalizado)”
  4. Gmail te genera una contraseña de 16 caracteres

Ahora crea o edita ~/.msmtprc:

nano ~/.msmtprc

Agrega esto:

defaults
auth           on
tls            on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
logfile        ~/.msmtp.log

account        gmail
host           smtp.gmail.com
port           587
from           tu-email@gmail.com
user           tu-email@gmail.com
password       tu-contraseña-de-aplicacion

account default : gmail

Permisos críticos:

chmod 600 ~/.msmtprc

Esto es importante. Si otros usuarios pueden leer el archivo, ven tu contraseña.

Test inicial
#

Prueba que funciona:

echo "Cuerpo del email" | msmtp tu-email@gmail.com -S from=tu-email@gmail.com

Revisa tu bandeja de entrada. Si recibes el email, está funcionando.

Usar msmtp desde scripts de seguridad
#

Ahora integra esto en tus alertas. Aquí un ejemplo simple que monitorea intentos SSH fallidos:

#!/bin/bash

FAILED_ATTEMPTS=$(grep "Failed password" /var/log/auth.log | wc -l)
THRESHOLD=10

if [ $FAILED_ATTEMPTS -gt $THRESHOLD ]; then
    {
        echo "Asunto: ALERTA - Múltiples intentos de acceso SSH fallidos"
        echo ""
        echo "Se detectaron $FAILED_ATTEMPTS intentos fallidos en las últimas 24 horas"
        echo ""
        echo "Últimos intentos:"
        grep "Failed password" /var/log/auth.log | tail -5
    } | msmtp tu-email@gmail.com
fi

Guárdalo en /usr/local/bin/check-ssh-alerts.sh y hazlo ejecutable:

sudo chmod +x /usr/local/bin/check-ssh-alerts.sh

Automatizar con cron
#

Agrega a crontab para que se ejecute cada hora:

sudo crontab -e
0 * * * * /usr/local/bin/check-ssh-alerts.sh

Problemas comunes
#

“SMTP Error: 535” → Contraseña incorrecta. Verifica que usaste la contraseña de aplicación, no tu contraseña de Google normal.

“TLS connection refused” → Revisa que el certificado esté en el path correcto. Usa ls /etc/ssl/certs/ca-certificates.crt.

Emails no llegan → Revisa el log: cat ~/.msmtp.log. Gmail a veces rechaza si detecta actividad sospechosa.

Seguridad adicional
#

Si el servidor corre con usuario regular pero los scripts necesitan ejecutarse como root, considera:

sudo visudo

Y agrega:

nobody ALL=(ALL) NOPASSWD: /usr/local/bin/check-ssh-alerts.sh

Así corres el script sin pedir contraseña en cron.

Conclusión
#

Con msmtp tienes alertas de seguridad automáticas en minutos, sin complicaciones de montar un servidor SMTP completo. Lo uso en mi servidor doméstico para monitorear cambios en iptables, certificados vencidos y picos de carga. Durmiendo tranquilo sabiendo que algo me avisa si hay problema.