Ariel Costas

Instalar OpenSMTPD y Dovecot en Debian

Anoche sustituí mi software de servidor de correo: pasé de la configuración que genera Emailwiz.sh a instalar OpenSMTPD (el servidor de correo del proyecto OpenBSD) y a reconfigurar desde cero Dovecot.

¿Por qué?

Porque quiero tener más control sobre mi correo, y siento que usando un script de configuración no entiendo tan bien lo que estoy configurando exactamente (aunque pueda ver el código del script) que si leo una guía detallada y voy escribiendo cada parte a mano. Además, no me terminaba de convencer la necesidad de crear usuarios Unix para cada usuario del sistema de correo.

De esta forma, puedo proveer correo para varios dominios, acceso a solo envío o recepción, reenvío a otros dominios... sin tener que pelearme con mi configuración. La configuración de OpenSMTPD es mucho más sencilla que la de Postfix, como ocurre con otros programas de OpenBSD como doas (remplazo a sudo).

Instalación inicial

Para la instalación inicial, seguí las guías de prefetch.eu, pero adaptando la estructura de carpetas y usuarios/grupos a las de mi máquina.

Permitir alias y reenvío a servidores remotos

Una vez hice esto y configuré varios dominios, me encontré con el siguiente problema: no podía añadir alias a otros servidores de correo. Podría por ejemplo hacer que al llegar un correo a foo@bar.com se redirija a una cuenta de correo en foo@example.com, que está en otro servidor. Para poder hacer esto, hice los siguientes cambios a mi configuración:

table aliases file:/usr/local/etc/mail/aliases
table domains file:/usr/local/etc/mail/domains
table passwd file:/usr/local/etc/mail/passwd
table virtuals file:/usr/local/etc/mail/virtuals

action "remote_mail" lmtp "/var/run/dovecot/lmtp" rcpt-to virtual <virtuals>
action "local_mail" lmtp "/var/run/dovecot/lmtp" rcpt-to alias <aliases>
action "outbound" relay srs

match from any for domain <domains> action "remote_mail"
match from local for local action "local_mail"
match from any auth for any action "outbound"
match for any action "outbound"

Eliminando las tablas, acciones y matches que tenía hasta entonces. Lo que hace esto es separar los alias locales y remotos. Por tanto, los 4 match hacen lo siguiente, por orden de aparición:

Una vez hecho eso, tenemos nuestro servidor completamente funcionando. Aunque es posible que hayas tenido el mismo error que yo por algún motivo:

DKIM da fallos

En este caso, la guía de prefetch.eu parece tener un fallo en el que las claves DKIM `public.key` y `private.key` coinciden. Esto es por llamar incorrectamente a openssl, y para ello basta con generar la clave del siguiente modo:

openssl genrsa -out private.key 2048
openssl rsa -in private.key -pubout -out public.key

chown _rspamd:_rspamd private.key
chmod 440 private.key

sed 's/---.*---//' public.key |  tr -d '\n' | paste -d ' '

Con los dos primeros comandos generas el par de claves correctamente, el tercero y el cuarto cambian los permisos para que solo rspamd pueda leer las claves, y el último imprime la clave pública sin espacios ni caracteres innecesarios, para pegar en el DNS.

Prueba tu servidor

Una vez seguiste todos los pasos, deberías tener un servidor de correo funcionando correctamente. Puedes comprobar que se cumplen las directivas SPF, DKIM y DMARC entrando en DKIMvalidator y enviando allí un correo de prueba. La guía invitaba a usar IsMyEmailWorking, pero esta página parece no estar aceptando nuevos test porque alguien abusó de dicho servicio.

Si ambas funcionan, llega la hora de la verdad: envía correos a personas reales (sin hacer spam, por favor) y saber si les llega sin problemas, y que pasa todos los filtros de spam.