… para gestionar listas de correo.
Tenemos un servidor de correo que siempre ha despachado hacia una máquina externa y ahora estamos albergando un puñado de dominios para los que queremos un tratamiento independizado.
Las cuestiones que hay que tocar son las siguientes:
- Recepción de correo
- Cifrado para conexiones seguras
- Reconocimiento de los dominios locales
- Alias y redirecciones específicas para cada dominio
- Despacho local de correo si es necesario
- Transportes especiales para buzones artificiales como las listas de correo
- Envío de correo
- Cifrado para conexiones seguras
- Acreditación de usuarios dependientes de cada dominio
- Firma de mensajes con claves separadas por dominio
- Uso de servidores de despacho remotos si el dominio lo requiere.
Cifrado de conexiones
Esta es una cuestión importante. Dado que vamos a utilizar los certificados para el dominio creados con Let’s Encrypt a priori no hay necesidad de tener uno por cada dominio alojado. El serviodor acepta las conexiones como un todo. Luego es cuando filtra y clasifica.
Así que, una vez obtenidos los archivos, e instalados en su sitio (/etc/ssl/domain/) lo normal es indicarle a exim4 dónde encontrarlos.En el archivo conf.d/main/03_exim4-config_tlsoptions podemos especificar su localización:
MAIN_TLS_ENABLE=yes
MAIN_TLS_CERTIFICATE=/etc/ssl/esferas.org/fullchain.pem
MAIN_TLS_PRIVATEKEY=/etc/ssl/esferas.org/privkey.pem
No hay que olvidar instalar los archivos con el grupo adecuado y añadir el usuario que emplea Debian para exim al grupo correspondiente.
~$ getent passwd | egrep -i exim
Debian-exim:x:104:109::/var/spool/exim4:/bin/false
~$ sudo adduser Debian-exim ssl-cert
[sudo] password for osr:
Añadiendo al usuario Debian-exim' al grupo
ssl-cert' …
Añadiendo al usuario Debian-exim al grupo ssl-cert
Hecho.
~$
Reconocimiento de dominios locales …
… y alias y redirecciones específicas para cada dominio.
Exim4 tiene una forma sencilla de gestionar dominios virtuales. Hay dos tipos como bien dice la documentación: uno en el que todas las direcciones de correo se trasladan a un dominio interno (como por ejemplo victor@empresa.net a victor@interno.empresa.net) y otro en el que existen buzones locales para cada cuenta en cada dominio.
En realidad se pueden dar varias combinaciones de este tipo y como en mi situación estoy gestionando varios entornos con necesidades diferentes he intentado que estén lo más separados posible. Primero he creado un árbol de dominios y luego he ido añadiendo los archivos necesarios a cada uno:
El árbol de momento está así:
root@esferas:/etc/exim4# tree -puag domains/ domains/ ├── [drwxr-xr-x root Debian-exim] esferas.org │ └── [-rw-r----- root Debian-exim] aliases ├── [drwxr-xr-x root Debian-exim] osteoluna.es └── [drwxr-xr-x root Debian-exim] vistanieve.net 3 directories, 1 file
Teniendo el archivo aliases el siguiente contenido:
# # Alias de correo para esferas.org # # Cuentas administrativas mailer-daemon: postmaster postmaster: root abuse: root spam: root root: victor # Cuentas de usuario victor: victor@taquiones.net
Para que exim emplee esta estructura se crea un enrutador con la siguiente forma:
virtual:
driver = redirect
domains = dsearch;/etc/exim4/domains
data = ${lookup{$local_part}lsearch{/etc/exim4/domains/$domain_part/aliases}}
no_more
Este enrutador funciona de la siguiente manera:
- Comprueba con dsearch que existe en el directorio /etc/exim4/domains un archivo con el nombre del dominio tratado.
- Busca la parte local de la dirección en el archivo de alias del dominio.
- Al ser un enrutador de tipo redirección el resultado -si encuentra algo- es una nueva dirección de envío.
Hay otra opción más completa que he encontrado aquí y que añade un cambio interesante, concretamente el que consigue que los dominios virtuales se consulten dinámicamente buscando en el directorio.
Primero se cambia el archivo de definiciones en conf.d/main/01_exim4-config_listmacrosdefs
domainlist local_domains = @:localhost:dsearch;/etc/exim4/domains
Para añadir el enrutador que menciono en conf.d/router/350_exim4-config_vdom_aliases:
#
# Enrutador para dominios locales virtuales
#
vdom_aliases:
driver = redirect
allow_defer
allow_fail
domains = dsearch;/etc/exim4/domains
data = ${expand:${lookup{$local_part}lsearch*@{/etc/exim4/domains/$domain/aliases}}}
retry_use_local_part
pipe_transport = address_pipe
file_transport = address_pipe
no_more