Configuración de envio de correo en Debian con SSMTP

Hoy en dia la mayoria de servidores no gestionan su propio correo electrónico pero sí necesitan enviar correos electrónicos para notificaciones, avisos o cualquier otro menester.

Históricamente he venido instalando el paquete Exim (el estándar Debian) configurado sólo para envio via un smarthost (un servidor encargado de aceptar y entregar el correo).

Sin embargo esa solución desperdicia bastantes recursos ya que no necesitamos, ni de lejos, nada tan complejo como un MTA completo. Ahí entra SSMTP. Se trata de una pequeña aplicación que hace las funciones de envio de correo de un MTA emulando las llamadas al venerable sendmail por linea de comandos.

Instalación

Debian provee un paquete estándar con lo que la instalación es trivial.

Configuración

La configuración tampoco es complicada. Necesitamos un servidor SMTP que nos permita reenviar correo, un usuario y una contraseña. Puede ser el de cualquier cuenta de correo incluyendo GMail y servicios similares. Sin embargo yo habitualmente utilizo el servicio SMTP de Mailgun ya que dispongo de cuenta para utilizarlo al desarrollar.

En todo caso la configuración no difiere así que yo voy a utilizar los siguientes datos de ejemplo:

  • Servidor: stmp.ejemplo.com
  • Usuario: marty@ejemplo.com
  • Contraseña: DeLorean1955

Voy a suponer que el usuario y la dirección de correo de la cuenta coinciden ya que es lo más habitual. Sino habria que ajustar algunos campos.

La configuración de SSMTP se realiza en dos ficheros, ambos en el directorio /etc/ssmtp:

revaliases

# sSMTP aliases
#
# Format:       local_account:outgoing_address:mailhub
#
# Example: root:your_login@your.domain:mailhub.your.domain[:port]
# where [:port] is an optional port number that defaults to 25.
root:marty@ejemplo.com:stmp.ejemplo.com  

ssmtp.conf

#
# Config file for sSMTP sendmail
#
# The person who gets all mail for userids < 1000
# Make this empty to disable rewriting.
root=marty@ejemplo.com

# The place where the mail goes. The actual machine name is required no
# MX records are consulted. Commonly mailhosts are named mail.domain.com
mailhub=stmp.ejemplo.com

# Where will the mail seem to come from?
#rewriteDomain=

# The full hostname
hostname=mi.servidor.com

# Are users allowed to set their own From: address?
# YES - Allow the user to specify their own From: address
# NO - Use the system generated From: address
FromLineOverride=YES

AuthUser=marty@ejemplo.com  
AuthPass=DeLorean1995  
UseTLS=YES  
UseSTARTTLS=YES  

Securización

Por ultimo una nota sobre la seguridad. Como se puede ver la contraseña está en texto plano en un fichero que todo el mundo del sistema puede leer. Si probamos a cambiar el permiso del fichero ssmtp.conf enseguida vemos que los usuarios que no son root no pueden enviar correos.

La solución és utilizar un usuario específico para el servicio y la funcionalidad el setuid. La idea la saqué de askubuntu.com aunque también está la misma idea en la wiki de ArchLinux.

El resumen de comandos:

sudo useradd -g nogroup -M -s /bin/false -c "sSMTP pseudo-user" ssmtp  
cd /etc/ssmtp/  
sudo chown ssmtp .  
sudo chmod 4750 .  
sudo chown ssmtp ssmtp.conf  
sudo chmod 640 ssmtp.conf  
sudo chown ssmtp:nogroup /usr/sbin/ssmtp  
sudo chmod 4555 /usr/sbin/ssmtp