Notificaciones de seguridad por email desde el terminal con msmtp y Gmail
Etiquetas: email,seguridad,servidor,msmtp,gmail,alertasPor 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.
Equipamiento recomendado
- Raspberry Pi 3 B+ — Servidor ligero de bajo consumo para empezar tu homelab
- Mini PC Intel N100 — Mini PC silencioso y eficiente para servidor doméstico 24/7
Enlaces de afiliado. Sin coste extra para ti.