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-mtaLa 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:
- Ve a myaccount.google.com
- Seguridad → Contraseñas de aplicaciones (necesitas 2FA habilitado)
- Selecciona “Correo” y “Otros (personalizado)”
- Gmail te genera una contraseña de 16 caracteres
Ahora crea o edita ~/.msmtprc:
nano ~/.msmtprcAgrega 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 : gmailPermisos críticos:
chmod 600 ~/.msmtprcEsto 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.comRevisa 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
fiGuárdalo en /usr/local/bin/check-ssh-alerts.sh y hazlo ejecutable:
sudo chmod +x /usr/local/bin/check-ssh-alerts.shAutomatizar con cron#
Agrega a crontab para que se ejecute cada hora:
sudo crontab -e0 * * * * /usr/local/bin/check-ssh-alerts.shProblemas 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 visudoY agrega:
nobody ALL=(ALL) NOPASSWD: /usr/local/bin/check-ssh-alerts.shAsí 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.