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:
- De cualquier dominio a uno de los míos, lo paso a dovecot con recepción a quien tenga en la tabla <virtuals>, que puede ser en mi servidor o en otro. En caso de ser otro (como gmail), lo reenvía ahí, con otra regla que vemos más adelante.
- Desde local a una cuenta local, lo paso a local_mail, que es dovecot pero con la lista <aliases>. De este modo, un correo que llegue al usuario root (como un fallo de autenticación con sudo) puede ir reenviado a la cuenta del administrador (en este caso, la mía).
- Desde cualquier sitio AUTENTICADO hacia cualquier otro, hace relay (lo envía a quien tenga que enviarlo) firmando con SRS para evitar problemas con SPF.
- Desde LOCAL (por defecto, se omite) hacia cualquier otro sitio, también lo reenvía. Esto ocurre por ejemplo cuando dovecot recibe un correo para un servidor remoto, que lo reenvía desde local (el servidor) hacia fuera.
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.