Esta guía es una recopilación y adaptación personal de como crear un servidor de correos con docker y traefik usando también el contenedor free que nos ofrece poste.io.
Dependencias usadas:
- Docker
- Docker-compose
- Traefik
- Una cuenta en mailjet.com (supongo que también se podría usar con el smtp de yandex).
Empezamos…
1. Clonamos el docker-compose y accedemos al directorio donde se encuentre.
git clone https://github.com/tomasmetal23/posteiomailserver.git
2. Abrimos los puertos que usaremos en el firewall, se recomienda que use los recomendados, los SSL 443 SMTPs, 993 IMAPs, 995 POP3s y TLS 587 SMTPs legacy, el puerto 25 debe estar filtrado de modo que pueda recibir emails pero no enviar.
Si configuramos un buen firewall como el de un proveedor vps, no tendremos problemas con los puertos 25 y 587 permitiéndonos usar TLS. (en mi caso uso Vultr link de referencia)
Este contenedor viene en modo bridge por lo cual necesitaremos abrir otros puertos alternativos para el puerto HTTP y el HTTPS, los cuales serán usados por Let’s Encrypt y están ocupados en el host por el Traefik. En mi caso, escogí el 81 en host como HTTP y el 8443 como HTTPS, estos están conectados directamente al puerto 80 y 443 del contenedor.
Ojo, atentos a su configuracion del firewall hubo un momento donde lo tuve mal configurado y fui atacado por spamers colocandome en una lista negra y mi proveedor VPS me bloqueo el puerto 25 impidiéndome así enviar correos electrónicos.
3. Ya habiendo modificado el docker-compose ejecutamos:
docker-compose up -d
Si abren el monitor del traefik podrán verificar los fronts y backends nos vamos a nuestro navegador y ejecutamos posteio.ejemplo.com
Crean su cuenta administrador como en la imagen y seguimos ahora con el registro en mailjet.
Servidor de correos (mail server) SMTP con Mailjet
Regístrese en mailjet.com.
Este enlace lo llevara directamente a la página para su registro. Use su correo ejemplo@ejemplo.com para registrarse ya debe poder recibir correos si tiene todo bien en su registro DNS, diríjase a la dirección webmail.ejemplo.com para validar su cuenta de mailjet.
El proceso de registro en mailjet es muy fácil, cualquier problema o inconveniente, nos vamos a https://app.mailjet.com/account
Seguimos los pasos por numero:
- Agregamos nuestro dominio, en mi caso lo hice con un registro TXT en mi tabla DNS.
- Agregamos los registros SPF y DKIM que nos proporcionará mailjet en el segundo paso a nuestra tabla DNS.
- En la tercera opción obtendremos nuestro usuario, contraseña y dirección SMTP.
Volvemos de nuevo a nuestro posteio.ejemplo.com y seguimos los pasos para culminar la configuración SMTP de nuestro servidor de correos (mail server).
Seguimos el número de los pasos, rellenamos con nuestros datos los campos y finalmente, salvamos en el botón Save Changes.
Esto es muy bueno e interesante ya que si un spamer se logra colar no podrá enviar mails si no esta validado aquí:
Test DNS y open relay de nuestro servidor de correos con Docker
Debemos chequear que nuestra configuración dns esta bien, en mxtoolbox.com podremos fijarnos.
También debemos chequear que nuestro firewall esta bien configurado. Para probar que nuestro servidor de correos no funcione como open relay y permita enviar emails sin confirmación.
En http://www.dnsgoodies.com/ podremos fijarnos el resultado debe ser como el de la imagen
Por último, las prueba de los emails, envíos a Gmail (ejemplo).
Recibido en Gmail
Por ultimo, el monitor y gestor del filtro antispam rspamd:
Espero que les funcione muy bien, cualquier duda o posible mejora me lo comentan para que mejoremos este pequeño experimento para configurar un servidor de correos con Docker y Traefik. Lo cual puede ser de mucha ayuda.
Hasta los momentos a mi me ha funcionado de maravilla.
¡Saludos! puede donar un café al @saiyansteam.
Buy me a coffeeAdministrador de sistemas, un curioso amante de las tecnologías.