Instalar un servicio de correo electrónico

El objetivo de esta práctica es montar un servicio de correo electrónico para poder enviar y recibir mensajes de forma segura usando un cliente de correo electrónico. Tendrá una cuenta operativa en tu dominio (usuario@tudominio) y otra, alias de esa, en (test@tudominio).

Puedes comenzar trabajando en local (con dominio local) y luego montas el servicio en una máquina pública.

Por ejemplo, para probar el servicio de correo del dominio cesareo.freeddns.org simplemente harías:

> echo "Esto es una prueba" | mail cgr@cesareo.freeddns.org,test@cesareo.freeddns.org -s "Prueba de Correo"

Puedes usar cualquier software y sistema operativo aunque en esta práctica se usará como referencia:

  1. Postfix (SMTP)

  2. Dovecot (IMAP)

Requisitos Previos

Antes de montar tu servicio de correo electrónico necesitas tener:

  1. Control del dominio sobre el que funcionará el correo para añadir un registro MX (o varios con diferentes prioridades). Defines el FQDN del equipo que gestionará el correo y su prioridad (supongamos smtp.ejemplito.com)

  2. Una máquina pública, con un nombre completo de dominio (p.ej smtp.ejemplito.com ). Es decir, necesitas una máquina (host) con una IP pública que responda al nombre que aparece en el registro MX. Es decir, necesitas también un registro A o CNAME en smtp.ejemplito.com (Acceder a un servidor remoto)

  3. Certificados digitales. Usa los de Letsencrypt que te sirven para todos los servicios, porque necesitas certificados avalados por una AC reconocida.

  4. Un software que sirva SMTPs, IMAPs y HTTPs

Por ejemplo, puedes probar un dominio así:

> dig mx cesareo.freeddns.org
 (... te dirá quien es el responsable del correo del dominio)
> dig A smtp.cesareo.freeddns.org
(.. te dirá la IP de la máquina que gestiona ese dominio)
> ping <IP>
(.. te dirá si esta máquina está disponible, si no tiene filtrado el protocolo ICMP)

Fases de Instalación: local y público

Son dos fases de instalación:

  1. Instalación en local (lo académico y para conocer el servicio):

    1. Lo instalas en local (interface lo: 127.0.0.1)

    2. lo configuras

    3. lo pruebas, es decir, envias correos entre usuarios del sistema y compruebas los buzones

  2. Servicio público de correo (lo interesante en la práctica)

    1. Lo instalas en la interfaz pública (interface pública) pero asegurando el servicio y con una supervisión detallada

    2. Necesitas paciencia porque la arquitectura del servicio es más compleja

    3. Necesitas supervisar continuamente el servicio y consultar la documentación oficial

Software Utilizado (y documentación de referencia)

Usamos postfix como servidor SMTP, pero puedes usar cualquiera:

  1. Postfix Documentation

  2. O Servidor de Correo Postfix (galego)

  3. Archivos de configuracion : /etc/postfix/main.cf y /etc/postfix/master.cf

Usamos dovecot como servidor IMAP (y SASL), pero puedes usar cualquiera:

  1. Dovecot Manual / Quick Configuration / Dovecot Core Settings

  2. O axente MDA Dovecot (galego) Dovecot Manual

  3. Archivos de configuracion: lo ideal es tener uno solo (/etc/dovecot/dovecot.conf), aunque puede estar separado en varios ( example-config )

Configuración en local

Servidor SMTP

  1. Instalación Básica (en local). Dominio, origen, destino, redes, usuarios mailbox (Maildir), etc

  2. Revisar Alias (modificar la BD de alias): /etc/aliases -> newaliases

  3. Configuración a Medida (/etc/postfix/main.cf):

    1. Personalizaciones: banner, mensajes de respuesta, home_mailbox , etc

    2. TLS: activar y ruta de los certificados

    3. Comprobar (y entender) smtpd_relay_restrictions

    4. Y ver los valores por defecto y parámetros de configuración (comando postconf)

  4. Comprueba el funcionamiento (con mail), a la vez que revisas el log

Servidor IMAP

  1. Instalación Básica (en local):

    1. Configuración mailbox (buzón de mensajes)

    2. Certificados y Acceso SSL / TLS

    3. Sistema de autenticación: básico + uso de SSL

    En este punto tienes un servicio de correo electrónico operativo en tu servidor local. Prueba que todo va bien en local antes de aceptar conexiones remotas

> ~# netstat -lt -4
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN
tcp        0      0 localhost:smtp          0.0.0.0:*               LISTEN
tcp        0      0 localhost:imaps         0.0.0.0:*               LISTEN

Prueba del servicio de correo

La mejor prueba la puedes hacer usando el comando mail (los correos) y openssl s_client (el uso de encriptación). Algunos ejemplos de pruebas automáticas:

Si no incluyes el dominio en el usuario revisa cómo lo entrega (revisa el parámetro *append_dot_mydomain*) . No es lo mismo escribir *root* que *root@tudominio*.

  > echo "Prueba 1" | mail usuario -s "Desde root, al usuario"
  > echo "Prueba 2" | mail root,postmaster -s "Tienen que llegar dos"
  > dpkg -l | mail root -s "Los paquetes instalados en tu sistema"
  > openssl s_client -connect localhost:993
  > tail -25 /var/log/mail.log | mail postmaster -s "Últimas 25 líneas del log de correo"

Configuración para Acceso Público

Un servidor público de correo tiene un riesgo importante pero es un sistema muy robusto si está bien configurado. Revisa los logs con frecuencia.

Servidor IMAP

  1. Activa la interfaz pública ( listen, en Dovecot Core Settings )

  2. Abre el puerto del firewall imaps (993)

  3. Usa el comando openssl s_client para probar desde consola

  4. Haz una auditoría IMAP y monitorea el servicio

  5. Prueba con un cliente externo

    1. Envía un correo en local a tu buzón, y lo debes ver desde tu cliente en remoto

    2. Crea una carpeta

    3. Borra y/o Mueve archivos

¿Problemas? Es lo normal, recuerda revisar los logs.

Servidor SMTP

  1. Activar la interfaz pública ( listen, en Dovecot Core Settings )

  2. Abre el puerto del firewall imaps (993)

  3. Haz una auditoría SMTP (y monitorea el servicio)

En este punto tienes un servicio de correo electrónico en tu máquina, que puede comunicarse con otros servidores SMTP de forma segura.

> ~# netstat -lt -4

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:smtp            0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:imaps           0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:submission      0.0.0.0:*               LISTEN

SMTP Auth

En este punto puedes recibir correo y puedes consultar tu buzón pero no puedes (no deberías) poder utilizar tu servidor SMTP para enviar correos, desde fuera de las redes permitidas

Para eso tienes que añadir el sistema de autenticación ( SMTP Auth). En el caso de Postfix, como ya tienes Dovecot instalado (como servidor IMAP), puedes usarlo como servidor de autenticación, conectando los dos vía SASL. Postfix and Dovecot SASL

  1. ¿Qué servicios SASL soporta? postfix -a

  2. Añade el punto de conexion (socket) para escucha SASL. Mejor un socket unix (rápido y seguro)

  3. Añade configuración SASL a Postfix.

  4. Sólo usuarios autenticados, desde una red externa, pueden usar SMTP utilizando el puerto 587 (submission port).

Prueba del servicio de correo

Prueba con un cliente externo. ¿Problemas? Es lo normal, recuerda revisar los logs. Recuerda que un servicio de correo tiene que estar continuamente supervisado. Una vez que el servicio esté en marcha, haz una auditoría SMTP

Funcionalidades Extra

Hay muchas funcionalidades extra que puedes añadir, algunas ideas para ampliar la funcionalidad:

  1. Personalizar el sistema:

    1. cambia el banner de bienvenida

    2. cambia los mensajes de respuesta (devoluciones, retrasos, buzones no encontrados

    3. limita el tamaño de los mensajes. Que sólo permite mensajes < 2MB

    4. instala un mensaje OoO (Out of Office) para tus usuarios

    5. Añade un registro SPF

    6. Añade el sistema DKIM

  2. No usar usuarios del sistema. Por ejemplo los usuarios estarán en una base de datos y todos los buzones en /srv/buzones/$USER.

  3. Usar un sistema de almacenamiento de los buzones en red (con NFS)

  4. Usar un sistema de autenticacion en una máquina externa y centralizada (Radius y/o LDAP).

  5. Hacer una prueba de carga (test de stress)

  6. … etc.

Solución -> Archivos de Configuración

Postfix: main.cf / master.cf

Dovecot: dovecot.conf