Tutorial: Despliegue de Mailu en Docker

Una tarea que tengo pendiente es aprender y entender Docker, con lo que el despliegue de Mailu, es una oportunidad valiosa para sufrir la iniciación en este mundo.

El entorno a desplegar es el siguiente:

  • Odoo 17 desplegado con docker
  • Nginx como centralizador de los servicios. Instalado desde apt en debian 12
  • Mailu desplegado con docker

Mailu

Mailu is a simple yet full-featured mail server as a set of Docker images. It is free software (both as in free beer and as in free speech), open to suggestions and external contributions. The project aims at providing people with an easily setup, easily maintained and full-featured mail server while not shipping proprietary software nor unrelated features often found in popular groupware.

Main features include:

  • Standard email server, IMAP and IMAP+, SMTP and Submission with auto-configuration profiles for clients
  • Advanced email features, aliases, domain aliases, custom routing, full-text search of email attachments
  • Web access, multiple Webmails and administration interface
  • User features, aliases, auto-reply, auto-forward, fetched accounts, managesieve
  • Admin features, global admins, announcements, per-domain delegation, quotas
  • Security, enforced TLS, DANE, MTA-STS, Letsencrypt!, outgoing DKIM, anti-virus scanner, Snuffleupagus, block malicious attachments
  • Antispam, auto-learn, greylisting, DMARC and SPF, anti-spoofing
  • Freedom, all FOSS components, no tracker included

Cito directo de su pagina de configuración que pueden visitar aquí porque tiene mucha información interesante. No es la primera vez que configuro un servidor de correo, por lo que me queda mas que claro la pesadilla que es hacerlo. Especialmente sobre el DKIM (DomainKeys Identified Mail) Una imposición que trata de validar la autenticidad de los correos electrónicos para evitar el fraude. Ya hablaré de ese drama mas adelante.

El plan

A estas alturas te darás cuenta de cual es el plan; sufrir lo mínimo posible.

Aunque el plan sea ese, la verdad es que ha fallado. Mailu es mas complicado de desplegar de lo que parecía, pero ahora te comparto un tuto rápido para que lo puedas utilizar sin tanto drama. Recuerda que tienes que tener docker actualizado e instalado y docker-compose v2

curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

Desplegando Mailu con docker Compose

Hasta este momento, veras que todo es amor.

La pagina de configuración de Mailu te deja todo resuelto. Incluso te da un configurador que te permite ajustar todo a tus necesidades, pero asume que tienes un servidor exclusivo para desplegarlo. Como ya mencioné arriba, no es mi caso y tengo que configurarlo en un servidor que tiene otros servicios trabajando.

https://mailu.io/2024.06/compose/setup.html

PD: me encanta el tema que le he puesto a mi blog. BlockMag se llama. Pero que drama al poner enlaces en el editor de entrada. si quiero agrear uno el cuadro de texto se va todo arriba y no se lo puede utilizar. Afortunadamente aun puedo usar ctrl+v al seleccionar un texto y funciona.

Cuando hayas usado la herramienta de creación de archivos de configuración de Mailu y descargado en tu server los archivos, deberías hacer algunos ajustes a tu configuración antes de desplegar.

Aclaraciones

  • El Main mail domain and server display name se refiere al nombre de dominio que has configurado para el web client. Cuando configures tu dominio, deberás tenerlo creado y validar que los DNS ya lo hayan difundido. No seas desesperado como yo para no estresarte porque no funciona el server.
  • La seguridad y los certificados TLS dan igual si vas a usar un Nginx externo al que ya viene en el container de Mailu. Elige LetsEncript preferentemente.
  • Website name y Linked Website URL son mas de adorno. Si habilitas el cliente web y la administracion web, simplemente son links para ir a tu sitio principal.
  • La Subnet of the docker network dejalo como está. Probablemente no haga conflicto con nada, pero se refiere a la red virtual privada que va a crear docker para que puedas acceder a los servicios.
  • El Public hostnames lo pones si vas a utilizar un subdominio para tu servidor de correo. Recuerda haber configurado el MX en tu dominio.

Ajustes a Mailu

Dado que ya tienes instalado Nginx y está ocupando los puertos 80 y 443, necesitas modificar el archivo de configuracion docker-compose.yml. específicamente en la redirección de puertos y en ajustes de Real-IP

front:
    image: ${DOCKER_ORG:-ghcr.io/mailu}/${DOCKER_PREFIX:-}nginx:${MAILU_VERSION:-2024.06}
    restart: always
    env_file: mailu.env
    logging:
      driver: journald
      options:
        tag: mailu-front
    ports:
      - "127.0.0.1:8080:80"
      - "127.0.0.1:8443:443"

Recuerda que en ports, estaba la dirección IP real de tu servidor, pero necesitas que el proxy inverso envíe las peticiones por el subdominio que tienes, así que cambias la ip real de estas dos lineas por el localhost y redireccionas los puertos a unos nuevos libres. en este caso, el 80 al 8080 y el 443 al 8443.

Ahora necesitas configurar el archivo mailu.env. Busca estas lineas y ajústalas en editor de código favorito.

# Header to take the real ip from
REAL_IP_HEADER=X-Real-IP

# IPs for nginx set_real_ip_from (CIDR list separated by commas)
REAL_IP_FROM= #pon tu ip real aqui

Ajustes a Nginx

Y ahora, segun yo, los ajustes finales. Que el server Nginx mande los datos necesarios a Mailu para que no se resienta conmigo.

Estoy asumiendo que ya hiciste tu subdominio y lo tienes listo. Pues veras, te falta todavía agregar unas cuantas cosas. En la sección location / te falta agrear lo siguiente:

proxy_pass https://127.0.0.1:8443; #no olvides el https
proxy_set_header X-Real-IP $remote_addr; #esto le envia la ip real para validar a mailu
proxy_set_header Host $host; #no se, espero haberte ayudado

Puedes leer estos ajustes en el propio apartado que tiene mailu para explicar como hacer esto, pero es un poco criptico. Al menos a mi, se me hizo complicado de entender. https://mailu.io/2.0/reverse.html

Ajustes a Odoo

Ups, parece que todavía faltan ajustes.

See, se que nos estamos olvidando de algunos ajustes a Mailu, pero esto te conviene leer.

No se que tan común sea este error, pero en Odoo, al intentar configurar un correo externo (aun no pruebo si pasa lo mismo con gmail) sale un error en el que simplemente se queda colgado y luego sale una ventana popup de reconectado. Esto se soluciona fácil (pero que difícil me fue encontrar la solución) con una sola linea en tu archivo de configuración de dominio en el apartado de location /

proxy_read_timeout 300000;

El servidor rechazó el destinatario de prueba

Encontré esta solución.

Solucioné esto cambiando mi dirección de correo electrónico en la página de preferencias del usuario.

Odoo intenta probar el nuevo servidor de correo utilizando el correo electrónico del usuario actual.

Cambie su dirección de correo electrónico actual de  hawke@rpg.llc a odoo@rpg.llc para solucionar el problema.

Confirmo, la solución es correcta 😀

Configurando el DKIM en Mailu

This is the mail system at host mail.algo.dominio.

I’m sorry to have to inform you that your message could not
be delivered to one or more recipients. It’s attached below.

For further assistance, please send mail to postmaster.

If you do so, please include this problem report. You can
delete your own text from the attached returned message.

mimail@gmail.com: host gmail-smtp-in.l.google.com[142.251.179.26]
said: 550-5.7.25 [147.182.141.9] The IP address sending this message does
not have a 550-5.7.25 PTR record setup, or the corresponding forward DNS
entry does not 550-5.7.25 match the sending IP. As a policy, Gmail does not
accept messages 550-5.7.25 from IPs with missing PTR records. For more
information, go to 550-5.7.25
https://support.google.com/a?p=sender-guidelines-ip 550-5.7.25 To learn
more about Gmail requirements for bulk senders, visit 550 5.7.25
https://support.google.com/a?p=sender-guidelines.
af79cd13be357-7ae6bb65694si225238585a.654 – gsmtp (in reply to end of DATA
command)
De: ventas ventas@mail.ec
Para: «Mi» mimail@gmail.com
Enviado: Thu Oct 03 20:44:14 GMT-05:00 2024
Asunto: Test dkim
Probando si Gmail recibe mails

Bueno, la configuracion esta menos detallada en la documentacion, asi que me tocó improvisar un poco. Tras presionar el boton regenerar las claves, ya se muestran todos los detalles para que solo los copies directo en las configuraciones del DNS.

Con esto, tu servidor de Mailu, ya puede comunicarse con el berrinchudo de Gmail.

Tengo un server propio para interlan.ec que puede recibir los correos sin problemas si no tiene DKIM y me parece que cualquiera puede pasar ese filtro si no es gmail. Pero estoy tratando de evaluar las consecuencias de esto. De que manera mejora al control del spam y esas cosas.

Conclusiones

Mira el tamaño de este tutorial. Son horas y horas de leer y solucionar problemas y aunqe esta muy resumido, es enorme. No se si al llegar a esta parte ya sepas las cosas que he omitido. Seguro ya sabes configurar dominios, configurar subdominios en Nginx, crear e instalar contenedores de docker o instalar docker y docker-compose v2, pero si no, hazmelo saber. Hare un tuto si encuentro interes.

Una advertencia sobre Odoo

Al configurar un servidor de correo propio, debe ser siempre el mismo tanto en los datos del administrador como en el correo de la empresa. de lo contrario saldra un error al enviar los correos

2024-10-04 17:19:58,934 1 WARNING odoo odoo.http: Ocurrió un error al momento de enviar el correo, revise su configuración. 

Descubre más desde Interlan

Suscríbete y recibe las últimas entradas en tu correo electrónico.

,

Deja un comentario

Interlan