¿Cuantas veces necesitamos que nos llegue un mensaje o aviso cada vez que alguien se autentifica como un usuario en particular en un servidor Linux?
Ya sea con el usuario ‘root’, o con cualquier otro, podemos configurar el sistema para que nos envíe un correo de forma totalmente automática, de esta forma cada vez que el usuario se autentifique recibirás un correo electrónico con la alerta.
Instalar soporte para el envío de correos
El primer paso es instalar el programa ‘msmtp’ que será el encargado de enviar los correos.
Para ello instalaremos los siguientes paquetes:
msmtp
: Nos proporciona el cliente SMTP que será el encargado de enviar correos electrónicos desde la línea de comandos. Es el elemento principal que necesitamos para configurar el envío de correos.msmtp-mta
: Contiene utilidades adicionales relacionadas con el transporte de correo. Aunque no es estrictamente necesario, puede sernos útil para ciertas configuraciones avanzadas o para interactuar con otros componentes del sistema de correo.mailutils
: Nos proporciona herramientas para enviar y recibir correos electrónicos. Incluye el comandomail
, que nos permite enviar correos desde la línea de comandos.
sudo apt install msmtp msmtp-mta mailutils
Configurar el envío de correos
Tenemos que crear un archivo llamado .msmtprc
, el cual puede estar en dos ubicaciones diferentes según nuestras necesidades.
- Directorio de usuario. Si ponemos el fichero de configuración en esta ubicación solo podrá usar el servicio de correo electrónico este usuario. Este es el sistema que yo prefiero, al menos en este caso.
- Directorio /etc/. Al ubicar el archivo de configuración aquí, cualquier usuario del sistema podrá hacer uso de la configuración reflejada aquí.
Las opciones que podemos configurar son bastantes pero aquí voy a reflejar las mínimas necesarias para que el sistema funcione correctamente.
Para que msmtp
funcione correctamente con TLS (Transport Layer Security), será necesario que el cliente confíe en los certificados del servidor de correo. Esto se suele gestionar a través de un archivo de certificados de autoridades de certificación (CA), que debe estar en: /etc/ssl/certs/ca-certificates.crt
.
Este archivo contiene certificados de confianza de las CA y es utilizado para validar el certificado del servidor SMTP al establecer una conexión segura.
Por tanto, tendremos que asegurarnos que lo tenemos:
ls /etc/ssl/certs/ca-certificates.crt
Si el archivo no existe tenemos que instalar el paquete ca-certificates
:
sudo apt install ca-certificates
Creamos el archivo .msmtprc
:
sudo nano ~/.msmtprc
y añadimos el siguiente contenido:
defaults
auth on
tls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
logfile ~/.msmtp.log
account default
host smtp.tuservidor.com
port 587
from tu@correo.com
user tu@correo.com
password tu-contraseña-SMTP
Recuerda que tienes que poner tu host
, from
, user
y password
de tu sistema de envíode correos.
Yo suelo usar un sistema de correos ajeno al propio servidor aunque tenga instalado el mismo dominio, para ello en mi registrador configuro las DNS en función del servicio que esté usando: ‘A’, ‘MX, ‘FTP’, etc.
Con esta configuración ya podemos probar si todo funciona correctamente con la siguiente instrucción:
echo -e "Asunto: Test\n\nEste es un correo de prueba desde la terminal." | msmtp -a default destino@dominio.com
Cada correo que se envíe creará un registro en el archivo ‘log’ declarado en el archivo de configuración:
logfile ~/.msmtp.log
Por tanto podremos ver las últimas entradas con:
tail ~/.msmtp.log
Crear el script para enviar correos
Crearemos un archivo .sh
con el siguiente contenido que se puede variar en función de la información que quieras recibir.
sudo nano enviar_mail.sh
#!/bin/bash
# -*- ENCODING: UTF-8 -*-
FECHA=$(date)
QUIEN=$(whoami)
IP=$(who | cut -d'(' -f2 | cut -d')' -f1)
# Variables de correo electrónico
EMAIL_FROM="origen@correo.com"
EMAIL_TO="destino@correo.com"
EMAIL_SUBJECT="Alerta: Acceso a Servidor"
EMAIL_BODY="Se ha accedido al servidor con el usuario $QUIEN el $FECHA desde la IP $IP"
# Función para enviar el correo electrónico usando msmtp
enviar_correo() {
{
echo "Subject: $EMAIL_SUBJECT"
echo "From: Nombre <$EMAIL_FROM>"
echo "To: $EMAIL_TO"
echo
echo "$EMAIL_BODY"
} | msmtp --debug --from=$EMAIL_FROM -t $EMAIL_TO
}
enviar_correo
- En la variable ‘FECHA‘ almacenamos el día y la hora en la que se accede al servidor.
- En la variable ‘QUIEN‘ almacenamos el nombre del usuario autentificado.
- En la variable ‘IP‘ almacenamos la IP desde donde se ha accedido.
Después creamos una función que será la encargada de preparar, formatear y enviar el correo electrónico.
La última línea únicamente se encarga de llamar a la función.
El siguiente paso es dar permisos de ejecución al script:
chmod +x enviar_mail.sh
Y, por último, editamos el archivo de configuración de usuario para llamar al script.
sudo nano .bashrc
Y al final del archivo añadimos:
.
.
.
/home/usuario/mail_acceso.sh > /dev/null # Recuerda cambiar tu usuario
Para probar que todo funciona correctamente solo tienes que cerrar la sesión y volver a entrar o recargar el fichero de configuración de usuario:
source ~/.bashrc
Revisa el correo porque ya tienes uno esperándote en la bandeja de entrada.