SMTP Relay
Introducción
Nagios requiere enviar e-mails para notificarnos de los errores o recuperaciones, y es posible que futuros servicios también lo requieran.
Para reducir configuraciones, se configurará Exim para hacer de relay hacia nuestro servidor de SMTP, este únicamente reenvia los e-mails, NO es un servidor de e-mail.
Muchos Linux utilizan Postfix, pero Exim requiere menos recursos, algo interesante cuando utilizas una Raspberry.
Configuración
Si el usuario que utilizamos para conectar a nuestro servidor de SMTP permite "inventar" nombres, podremos asignar nombres según el nombre del servidor o del servicio, si no, debemos indicar el nombre del usuario que conecta al SMTP.
Iniciamos instalando el servicio y configurando.
sudo apt update
sudo apt install exim4 -y
sudo dpkg-reconfigure exim4-config
Estas son las opciones que elegir:
General type of mail configuration: mail sent by smarthost; no local mail
System mail name: serverName
IP-addresses to listen on for incoming SMTP connections: 127.0.0.1 ; ::1
Other destinations for which mail is accepted: serverName
Visible domain name for local users: serverName
IP address or host name of the outgoing smarthost: smtp.domain.cat::587
Keep number of DNS-queries minimal (Dial-on-Demand): No
Split configuration into small files: No
Root and postmanster mail recipient: [email protected]
Actualizar las variables de serverName acorde al nombre del servidor (lo hace por defecto), smtp.domain.cat es el nombre hacia nuestro servidor de SMTP y [email protected] es el usuario que se utilizará como from.
El puerto 587 es el estándar para STARTTLS. Si el servidor SMTP utiliza TLS implícito, cambiar el puerto a 465 y ver la sección de configuración TLS más abajo.
A partir de aquí debemos asignar la configuración según nuestro SMTP, esta parte puede cambiar, así que es posible que requiera cierta investigación y pruebas hasta dar con la correcta.
Configuración STARTTLS (puerto 587)
Configuración recomendada para servidores como ProtonMail Bridge que utilizan STARTTLS.
sudo vi /etc/exim4/exim4.conf.localmacros
MAIN_TLS_ENABLE = 1
REMOTE_SMTP_SMARTHOST_HOSTS_REQUIRE_TLS = *
Configuración TLS implícito (puerto 465)
Si el servidor SMTP no soporta STARTTLS y requiere TLS implícito en el puerto 465, usar esta configuración alternativa.
sudo vi /etc/exim4/exim4.conf.localmacros
MAIN_TLS_ENABLE = 1
REMOTE_SMTP_SMARTHOST_HOSTS_REQUIRE_TLS = *
TLS_ON_CONNECT_PORTS = 465
Recordar que si se utiliza TLS implícito, el smarthost debe configurarse con el puerto 465 en el paso anterior: smtp.domain.cat::465.
Credenciales SMTP
Indicamos el usuario y contraseña para autenticarnos en el servidor de SMTP.
sudo vi /etc/exim4/passwd.client
smtp.domain.cat:mail@domain.com:password
Es preferible especificar el host del smarthost en lugar de * para evitar enviar credenciales a servidores no deseados.
Protección de credenciales
Exim no encripta las contraseñas almacenadas en su configuración, así que es fundamental proteger los ficheros con permisos de Linux para que únicamente root y el servicio de Exim puedan leerlos.
sudo chown root:Debian-exim /etc/exim4/passwd.client
sudo chmod 640 /etc/exim4/passwd.client
sudo chown root:Debian-exim /etc/exim4/exim4.conf.localmacros
sudo chmod 640 /etc/exim4/exim4.conf.localmacros
Ningún otro usuario del sistema debería poder leer estos ficheros. Verificar periódicamente con ls -la /etc/exim4/ que los permisos no se han alterado tras una actualización.
E-mails por usuario
Por último, añadimos qué e-mail utilizará cada usuario de sistema, si no lo indicamos, los servicios deberán siempre indicarlo, algo que no siempre hacen.
sudo vi /etc/email-addresses
pi: mail@domain.cat
root: mail@domain.cat
nagios: nagios@domain.cat
Reiniciamos para aplicar los cambios.
sudo update-exim4.conf
sudo service exim4 restart
Test
Nunca debemos confiar en que un relay funcionará a la primera, al terminar se debe hacer enviar un e-mail hacia un usuario del dominio (o fuera de este si queremos configurar que tiene permiso para ello).
Si no llega el correo, revisar los logs para diagnosticar el problema.
sudo tail -f /var/log/exim4/mainlog