Tu propio servidor de correo en 20 minutos

Instala un servidor de correo multi-dominio

Una de las cuestiones a la que antes te vas a enfrentar si estas desarrollando proyectos digitales es la necesidad de disponer de direcciones de correos para tus proyectos. No es tanto la necesidad de de direcciones de correo como la de un transporte de correos que te permita enviar correos a tu comunidad o tus clientes.

Podrías usar cuentas gratuitas de Google para enviar correos desde tu página web, por supuesto, incluso cuando no tienes una cuenta de pago GSuite, puedes usar sus servidores como transporte SMPT para tu correo, el inconveniente es que no seria una cuenta de correo con tu dominio, seria una cuenta del dominio @gmail.com, a no ser que pagues una cuenta Gsuite y asocies tu dominio a ella, con lo que además tendrías almacenamiento en Google Drive y derecho a usar Google Workspace.

esquema servidor de correo

Si tienes un solo proyecto no es una mala solución, usas una dirección de correo del tipo miproyecto@google.com o si quieres algo mas profesional o corporativo, compras un dominio en namecheap.com o en arsys.es si prefieres un dominio . es para España y creas una cuenta Google Workspace asociada a ese dominio, con lo que te quedaría una cuenta del tipo info@miproyecto.com y podrías usas Google como SMTP para los correos de tu pagina web y enviar tu newsletter.

Si instalas tu propio servidor de correo, puedes tener tantos dominios como quieras y servir correo desde estos dominios, podrás incluso dar servicio de correo electrónico a tus clientes, si quisieras hacerlo.

Configurar tu propio servidor de correo electrónico en Linux desde cero es un proceso largo y tedioso, un dolor de cabeza si no eres un usuario avanzado. Incluso cuando el correo electrónico es algo que usas a diario y parece trivial, son muchos los procesos y protocolos que intervienen en este servicio.

Por un lado tenemos el servicio que envía y recibe correos, SMTP, también esta el servicio IMAP, con el que accedes a los correos del servidor y organizas tus correos.

Necesitamos un servidor de aplicaciones web para poder acceder a los interfaces de las aplicaciones mediante un navegador y consultar nuestro correo web por ejemplo.

Necesitamos también una base de datos donde almacenar los nombres de los dominios y los usuarios de estos dominios para los que vamos a gestionar el correo.

necesitamos una serie de aplicaciones que certifiquen la autenticidad de los dominios y las firmas de los correos así como algún antivirus que proteja nuestro servidor de correo y a los clientes a los que damos servicio o a nosotros mismos.

Necesitamos una herramienta de webmail para poder consultar el correo además de usar alguna aplicación cliente para recibir el correo en el móvil o en el ordenador. Podemos también dotar a la instalación de herramientas para tener calendarios, contactos y tareas y sincronizarlas entres nuestros dispositivos.

Como resulta realmente complicado montar todos estos servicios y revisar un montón de ficheros de configuración con protocolos e integraciones, vamos a usar iRedMail, que es un script de shell que instala y configura automáticamente todos los componentes necesarios del servidor de correo en su servidor Linux/BSD, eliminando así la instalación y configuración manual. Con iRedMail, puede crear fácilmente buzones de correo ilimitados y dominios de correo ilimitados en un panel de administración basado en la web. Los buzones pueden ser almacenados en MariaDB/MySQL, base de datos PostgreSQL u OpenLDAP. La siguiente es una lista de software de código abierto que será instalado y configurado automáticamente por iRedMail.

Con la ejecución de este script conseguiremos instalar y configurar todos estos elementos:

  • Postfix SMTP server
  • Dovecot IMAP server
  • Nginx web server to serve the admin panel and webmail
  • OpenLDAP, MySQL/MariaDB, or PostgreSQL for storing user information
  • Amavised-new for DKIM signing and verification
  • SpamAssassin for anti-spam
  • ClamAV for anti-virus
  • Roundcube webmail
  • SOGo groupware, providing webmail, calendar (CalDAV), contacts (CardDAV), tasks and ActiveSync services.
  • Fail2ban for protecting SSH
  • mlmmj mailing list manager
  • Netdata server monitoring
  • iRedAPD Postfix policy server for greylisting

1.Elegir un alojamiento y un nombre de dominio

Lo primero que tienes que hacer es elegir un nombre para tu dominio, lo habitual es utilizar el nombre del proyecto, en mi caso tecnolitas.com que lo he comprado en namecheap.com esto te puede costar 9€ al año, no es excusa para no tener un dominio propio.

Después tienes que elegir una compañía de hosting o hospedaje de internet, mis proveedores preferidos son ovh.es y contabo.com

vps para servidor de correo

Este es un ejemplo de los precios y características que podéis encontrar en OVH en cuanto a Servidores Virtuales Privado. Contabo tiene mejor oferta en cuando a prestaciones, ya que con el mismo precio prácticamente te da mucha mas CPU memoria y disco duro. Esto es aproximado y puede variar según el momento en que vayas a desplegar el servidor de correo.

vps para servidor de correo

El proceso de compra es realmente sencillo, selecciona las opción de servidor, el sistema operativo (Ubuntu 20.04) y el tiempo de compromiso que deseas adquirir, puedes pagar mes a mes o contratar todo un año, que seguramente tenga alguna ventaja económica.

Una vez se haya configurado el VPS recibirás un correo electrónico con la información del servidor, la dirección IP y las credenciales del usuario root, que es el usuario administrador del servidor con privilegios totales.

Ahora ya puedes establecer una conexión ssh con el servidor.

También necesitas un nombre de dominio. Yo registré mi nombre de dominio en NameCheap porque el precio es bajo y dan protección de privacidad whois gratis de por vida.

2.Creating DNS MX Record

El registro MX especifica qué host o hosts gestionan los correos electrónicos de un determinado nombre de dominio. Por ejemplo, el host que gestiona los correos electrónicos de tecnolitas.com es mail.tecnolitas.com. Si alguien con una cuenta de Gmail envía un correo electrónico a hola@tecnolitas.com, el servidor de correo de Gmail consultará el registro MX de tecnolitas.com. Cuando descubre que mail.tecnolitas.com es el responsable de aceptar el correo electrónico, consulta el registro A de mail.tecnolitas.com para obtener la dirección IP y así poder entregar el correo electrónico.

Tienes que ir a tu servicio de alojamiento de DNS (normalmente tu registrador de dominios) para crear registros DNS. En su gestor de DNS, crea un registro MX para tu nombre de dominio. Introduzce @ en el campo Nombre para representar el nombre de dominio principal y, a continuación, introduzca mail.tu-dominio.com en el campo Valor.

Nota: El nombre de host para el registro MX no puede ser un alias de otro nombre. Además, se recomienda encarecidamente utilizar nombres de host, en lugar de direcciones IP desnudas para el registro MX.

Tu gestor de DNS puede pedirte que introduzcas un valor de preferencia (también conocido como valor de prioridad). Puede ser cualquier número entre 0 y 65.356. Un número pequeño tiene mayor prioridad que un número grande. Se recomienda establecer el valor en 0, para que este servidor de correo tenga la mayor prioridad para recibir correos electrónicos. Después de crear el registro MX, también necesitas crear un registro A para mail.tu-dominio.com , para que pueda ser resuelto a una dirección IP. Si tu servidor utiliza una dirección IPv6, asegúrate de añadir un registro AAAA.

3. Configuring Hostname

Inicie sesión en su servidor a través de SSH y ejecute el siguiente comando para actualizar los paquetes de software existentes. Ejecuta los siguientes comandos:

sudo apt update
sudo apt upgrade -y

Durante el proceso de actualización, es posible que le haga la siguiente pregunta. selecciona mantener la versión local actualmente instalada.

Te recomiendo encarecidamente la creación de un usuario sudo para la gestión del servidor en lugar de utilizar el usuario root por defecto. Ejecuta el siguiente comando para crear un usuario. Reemplace el nombre de usuario con su nombre de usuario preferido.

adduser usuario

A continuación, añade el usuario al grupo sudo.

adduser usuario sudo

Cambia al nuevo usuario.

su - usuario

A continuación, establece un nombre de dominio completamente cualificado (FQDN) para tu servidor de correo con el siguiente comando.

sudo hostnamectl set-hostname mail.tu-dominio.com

También tenemos que actualizar el archivo /etc/hosts con un editor de texto de línea de comandos como Nano.

sudo nano /etc/hosts

Añade esta línea a tu fichero /ect/hosts, usa los cursores para desplazarte hasta el final

127.0.0.1       mail.tu-dominio.com   localhost

Guarda y cierra el archivo. (Para guardar un archivo en el editor de texto Nano, pulsa Ctrl+O, y luego pulsa Enter para confirmar. Para cerrar el archivo, pulse Ctrl+X).

Para ver los cambios, vuelve a iniciar sesión (cierra y abre la conexion ssh ) y ejecute el siguiente comando para ver su nombre de host.

hostname -f

Paso 4: Configuración del servidor de correo en Ubuntu 20.04 con iRedMail

Ejecute los siguientes comandos para descargar la última versión del instalador de scripts de iRedMail desde su repositorio de Github.

wget https://github.com/iredmail/iRedMail/archive/1.5.1.tar.gz

Extrae el fichero archivado.

tar xvf 1.5.1.tar.gz

A continuación, cambiate al directorio recién creado.

cd iRedMail-1.5.1/

Añade el permiso de ejecución al script iRedMail.sh.

chmod +x iRedMail.sh

A continuación, ejecute el script Bash con privilegios sudo.

sudo bash iRedMail.sh

Aparecerá el asistente de configuración del servidor de correo. Utiliza el tabulador para seleccionar <Yes> y pulse Enter .

La siguiente pantalla le pedirá que seleccione la ruta de almacenamiento del correo. Puede utilizar la ruta por defecto: /var/vmail, así que simplemente pulse Enter.

A continuación, elige si deseas ejecutar un servidor web. Es muy recomendable que elijas ejecutar un servidor web porque necesita el panel de administración para añadir cuentas de correo electrónico. Además, te permite acceder al webmail de Roundcube. Por defecto, el servidor web Nginx está seleccionado, por lo que puedes simplemente pulsar Enter. (Un asterisco indica que el elemento está seleccionado).

A continuación, selecciona el backend de almacenamiento para las cuentas de correo electrónico. Elige uno con el que esté familiarizado. Yo uso MariaDB(MySQL). Pulse las flechas arriba y abajo y pulse la barra espaciadora para seleccionar.

Si has seleccionado MariaDB o MySQL, tienes que establecer la contraseña de root (usuario root de MySQL).

A continuación, introduce tu dominio de correo. Puedes añadir dominios de correo adicionales más tarde en el panel de administración basado en la web. Asumo que quieres una cuenta de correo como info@tu-dominio.com. En ese caso, debes introducir tu-dominio.com, sin subdominio. No pulses la barra espaciadora después de tu nombre de dominio. Creo que iRedMail copiará el carácter de espacio junto con su nombre de dominio, lo que puede provocar un fallo en la instalación.

A continuación, establece una contraseña para el administrador del dominio de correo.

Elija los componentes opcionales. Por defecto, se seleccionan 4 elementos. Si quieres utilizar el software de grupo SOGo (webmail, calendario, libreta de direcciones, ActiveSync), pulsa la tecla de flecha hacia abajo y la barra espaciadora para seleccionar. Pulsa Enter para ir a la siguiente pantalla.

Ahora puedes revisar tus configuraciones. Escribe “Y” para comenzar la instalación de todos los componentes del servidor de correo.

Al final de la instalación, elige y para utilizar las reglas de firewall proporcionadas por iRedMail y reinicia el firewall.

Ahora la instalación de iRedMail está completa. Se te notificará la URL del webmail, el panel de administración web y las credenciales de acceso. El archivo iRedMail.tips contiene información importante sobre tu servidor de iRedMail.

Reinicia tu servidor Ubuntu 20.04.

sudo shutdown -r now

Una vez que tu servidor vuelva a estar en línea, puedes visitar el panel de administración de la web.

https://mail.tu-dominio.com/iredadmin/

Nota: Ten en cuenta que en la URL anterior, el subdirectorio para acceder al panel de administración es /iredadmin/, no /iredmail/. Y debido a que estás utilizando un certificado TLS autofirmado, necesitas añadir la excepción de seguridad en su navegador web.

Paso 5: Instalación del certificado Let’s Encrypt TLS

Dado que el servidor de correo está utilizando un certificado TLS autofirmado, tanto los usuarios del cliente de correo de escritorio como los del cliente de webmail verán una advertencia. Para solucionar esto, puedes obtener e instalar un certificado TLS gratuito de Let’s Encrypt.

Obtención del certificado

En primer lugar, inicia sesión en tu servidor de nuevo a través de SSH y ejecuta el siguiente comando para instalar el cliente Let’s Encrypt (certbot) en Ubuntu 20.04.

sudo apt install certbot

iRedMail ya ha configurado los ajustes TLS en el host virtual Nginx por defecto, así que aquí recomiendo usar el plugin de webroot, en lugar del plugin de nginx, para obtener un certificado. Ejecute el siguiente comando. Reemplace el texto en azul con tus datos reales.

sudo certbot certonly --webroot --agree-tos --email tu@dominio.com -d mail.tu-dominio.com -w /var/www/html/

Cuando te pregunte si quieres recibir comunicaciones de la FEP, puedes elegir la opción “No”.

Si todo ha ido bien, verás el siguiente texto indicando que has obtenido con éxito un certificado TLS. Tu certificado y cadena se han guardado en el directorio /etc/letsencrypt/live/mail.tu-dominio.com/.

Fallo en la obtención del certificado TLS

Si certbot no pudo obtener el certificado TLS, tal vez se deba a que tus registros DNS no se han propagado a Internet. Dependiendo del registrador de dominios que utilices, tu registro DNS puede ser propagado instantáneamente, o puede tardar hasta 24 horas en propagarse. Puedes ir a https://dnsmap.io, introducir el nombre de host de tu servidor de correo (mail.tu-dominio.com) para comprobar la propagación de los DNS.

Si certbot no pudo obtener un certificado y ves el siguiente mensaje

Failed authorization procedure. mail.tecnolitas.com (http-01): urn:ietf:params:acme:error:connection :: The server could not connect to the client to verify the domain :: Fetching https://mail.tecnolitas.com/.well-known/acme-challenge/IZ7hMmRE4ZlGW7cXYoq2Lc_VrFzVFyfW6E0pzNlhiOA: Timeout during connect (likely firewall problem)

Puede ser que hayas establecido un registro AAAA para mail.tu-dominio.com, pero el servidor web Nginx no escucha en la dirección IPv6. Para solucionar este error, edita el archivo /etc/nginx/sites-enabled/00-default.conf

sudo nano /etc/nginx/sites-enabled/00-default.conf

Encuentra la siguiente línea.

#listen [::]:80;

Elimine el carácter # para habilitar IPv6 para este host virtual Nginx.

listen [::]:80;

Guarde y cierre el archivo. A continuación, edite el host virtual SSL /etc/nginx/sites-enabled/00-default-ssl.conf.

sudo nano /etc/nginx/sites-enabled/00-default-ssl.conf

Añade la siguiente línea.

listen [::]:443 ssl http2;

Guarda y cierra el archivo. A continuación, prueba la configuración de Nginx.

sudo nginx -t

Si la prueba es exitosa, recargua Nginx para que el cambio surta efecto.

sudo systemctl reload nginx

Vuelve a ejecutar el siguiente comando para obtener el certificado TLS. Sustituye el texto en azul por sus datos reales.

sudo certbot certonly --webroot --agree-tos --email tu@dominio.com -d mail.tu-dominio.com -w /var/www/html/

Ahora deberías poder obtener con éxito el certificado TLS.

Instalación del certificado en Nginx

Después de obtener un certificado TLS, vamos a configurar el servidor web Nginx para utilizarlo. Edita el archivo de la plantilla SSL.

sudo nano /etc/nginx/templates/ssl.tmpl

Encuentra las siguientes 2 líneas.

ssl_certificate /etc/ssl/certs/iRedMail.crt;
ssl_certificate_key /etc/ssl/private/iRedMail.key;

Sustitúyelas por:

ssl_certificate /etc/letsencrypt/live/mail.tu-dominio.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mail.tu-dominio.com/privkey.pem;

Guarda y cierra el archivo. A continuación, prueba la configuración de nginx y vuelve a cargar.

sudo nginx -t

sudo systemctl reload nginx

Vuelva a visitar el panel de administración de iRedMail, tu navegador web ya no le advertirá porque Nginx está utilizando ahora un certificado TLS válido.

Instalación del certificado TLS en Postfix y Dovecot

También necesitamos configurar el servidor SMTP de Postfix y el servidor IMAP de Dovecot para utilizar el certificado emitido por Let’s Encrypt para que el cliente de correo de escritorio no muestre la advertencia de seguridad. Edita el archivo de configuración principal de Postfix.

sudo nano /etc/postfix/main.cf

Encuentra las siguientes 3 líneas. (línea 95, 96, 97).

smtpd_tls_key_file = /etc/ssl/private/iRedMail.key
smtpd_tls_cert_file = /etc/ssl/certs/iRedMail.crt
smtpd_tls_CAfile = /etc/ssl/certs/iRedMail.crt

Replace them with:

smtpd_tls_key_file = /etc/letsencrypt/live/mail.tu-dominio.com/privkey.pem
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.tu-dominio.com/cert.pem
smtpd_tls_CAfile = /etc/letsencrypt/live/mail.tu-dominio.com/chain.pem

Guarda y cierra el archivo. A continuación, vuelve a cargar Postfix.

sudo systemctl reload postfix

A continuación, edita el archivo de configuración principal de Dovecot.

sudo nano /etc/dovecot/dovecot.conf

Modifiqua las dos líneas siguientes. (línea 47, 48)

ssl_cert = </etc/ssl/certs/iRedMail.crt
ssl_key = </etc/ssl/private/iRedMail.key

Sustitúyelos por:

ssl_cert = </etc/letsencrypt/live/mail.tu-dominio.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.tu-dominio.com/privkey.pem

Guarda y cierra el archivo. A continuación, vuelve a cargar dovecot.

sudo systemctl reload dovecot

A partir de ahora, los usuarios del correo de escritorio no verán las advertencias de seguridad.

Paso 6: Envío del correo electrónico de prueba

Accede al panel iredadmin con la cuenta de correo postmaster (postmaster@your-domain.com). En la pestaña Añadir, puedes añadir dominios o direcciones de correo electrónico adicionales.

Si ves el error “no hay dominio bajo control”, consulta este artículo.

Después de crear un usuario, puedes visitar la dirección de correo web de Roundcube e iniciar sesión con la nueva cuenta de usuario de correo.

https://mail.tu-dominio.com/mail/

Ahora puedes probar el envío y la recepción de correos electrónicos. Ten en cuenta que es posible que tengas que esperar unos minutos para recibir correos electrónicos porque iRedMail por defecto activa la lista gris, que es una forma de indicar a otros servidores SMTP emisores que lo intenten de nuevo en unos minutos. La siguiente línea en el archivo de registro de correo /var/log/mail.log indica que la lista gris está activada.

Recipient address rejected: Intentional policy rejection, please try again later;

Añadir espacio de intercambio

ClamAV se utiliza para analizar los virus en los mensajes de correo electrónico. ClamAV puede utilizar una buena cantidad de RAM. Si no hay suficiente RAM en tu servidor, ClamAV no funcionará correctamente, lo que impedirá que tu servidor de correo envíe correos electrónicos.

Puedes añadir un archivo de intercambio a tu servidor para aumentar el total de RAM en tu servidor. (Ten en cuenta que el uso de espacio swap en el servidor degradará el rendimiento del mismo. Si desea un mejor rendimiento, debería aumentar la RAM física en lugar de utilizar el espacio de intercambio).

Para añadir espacio de intercambio en el servidor, primero, utiliza el comando fallocate para crear un archivo. Por ejemplo, cree un archivo llamado swapfile con 1G de capacidad en el sistema de archivos raíz:

sudo fallocate -l 1G /swapfile

A continuación, asegúrate de que sólo ‘root’ puede leer y escribir en él.

sudo chmod 600 /swapfile

Formatea para este esacio:

sudo mkswap /swapfile

Output:

Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
no label, UUID=0aab5886-4dfb-40d4-920d-fb1115c67433

Habilitar el archivo de intercambio

sudo swapon /swapfile

Para montar el espacio de intercambio en el momento del arranque del sistema, edita el archivo /etc/fstab.

sudo nano /etc/fstab

Añada la siguiente línea al final de este archivo.

/swapfile    swap    swap     defaults    0   0

Guarda y cierra el archivo. Luego recarga systemd y reinicia ClamAV.

sudo systemctl daemon-reload

sudo systemctl restart clamav-daemon

Paso 7: Comprobar si el puerto 25 (de salida) está bloqueado

Tu ISP o proveedor de alojamiento no bloqueará las conexiones entrantes al puerto 25 de tu servidor de correo, lo que significa que puede recibir correos electrónicos de otros servidores de correo. Sin embargo, muchos ISP/proveedores de alojamiento bloquean las conexiones salientes al puerto 25 de otros servidores de correo, lo que significa que no puedes enviar correos electrónicos.

Si tu correo electrónico no llegó a tu otra dirección de correo electrónico, como Gmail, entonces ejecuta el siguiente comando en tu servidor de correo para comprobar si el puerto 25 (de salida) está bloqueado.

telnet gmail-smtp-in.l.google.com 25

Si no está bloqueado, verás mensajes como el siguiente, que indica que la conexión se ha establecido con éxito. (Sugerencia: escribe “quit” y pulsa “Enter” para cerrar la conexión).

Trying 74.125.68.26...
Connected to gmail-smtp-in.l.google.com.
Escape character is '^]'.
220 mx.google.com ESMTP y22si1641751pll.208 - gsmtp

Si el puerto 25 (de salida) está bloqueado, verás algo como

Trying 2607:f8b0:400e:c06::1a...
Trying 74.125.195.27...
telnet: Unable to connect to remote host: Connection timed out

En este caso, tu Postfix no puede enviar emails a otros servidores SMTP. Pide a tu ISP/proveedor de alojamiento que te lo abra. Si rechazan tu petición, necesitas configurar el reenvío SMTP para evitar el bloqueo del puerto 25.

¿Sigues sin poder enviar un correo electrónico?

Si el puerto 25 (de salida) no está bloqueado, pero sigues sin poder enviar correos electrónicos desde tu propio servidor de correo a tu otra dirección de correo electrónico como Gmail, entonces debes comprobar el registro de correo (/var/log/mail.log).

sudo nano /var/log/mail.log

Por ejemplo, algunas personas podrían ver las siguientes líneas en el archivo.

host gmail-smtp-in.l.google.com[2404:6800:4003:c03::1b] said: 550-5.7.1 [2a0d:7c40:3000:b8b::2] Our system has detected that 550-5.7.1 this message does not meet IPv6 sending guidelines regarding PTR 550-5.7.1 records and authentication. Please review 550-5.7.1 https://support.google.com/mail/?p=IPv6AuthError for more information

Esto significa que tu servidor de correo está usando IPv6 para enviar el correo electrónico, pero no has configurado los registros IPv6. Usted debe ir a su administrador de DNS, establecer el registro AAAA para mail.your-domain.com, entonces usted debe establecer el registro PTR para su dirección IPv6, que se discute en el paso 9.

Paso 8: Uso de clientes de correo en su ordenador o dispositivo móvil

Enciende tu cliente de correo electrónico de escritorio, como Mozilla Thunderbird, y añade una cuenta de correo.

  • En la sección de servidor entrante, selecciona el protocolo IMAP, introduzca mail.tu-dominio.com como nombre del servidor, elija el puerto 143 y STARTTLS. Elija la contraseña normal como método de autenticación.
  • En la sección de salida, seleccione el protocolo SMTP, introduzca mail.your-domain.com como nombre del servidor, elija el puerto 587 y STARTTLS. Elija una contraseña normal como método de autenticación.

Fail2ban Bloqueo de su propia dirección IP

Si cometiste un error y no pudiste iniciar sesión en el servidor de correo varias veces, entonces el servicio Fail2ban del servidor de correo podría bloquear tu dirección IP. Puedes añadir tu dirección IP a la lista blanca editando el archivo jail.local.

sudo nano /etc/fail2ban/jail.local

Añade tu propia dirección IP a la lista de ignorados como se indica a continuación. Sustituye 12.34.56.78 por tu dirección IP real.

ignoreip = 12.34.56.78 127.0.0.1 127.0.0.0/8 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16

Guarda y cierra el archivo. A continuación, reinicie Fail2ban.

sudo systemctl restart fail2ban

Paso 9: Mejorar la capacidad de entrega del correo electrónico

Para evitar que tus correos electrónicos sean marcados como spam, debes establecer registros PTR, SPF, DKIM y DMARC.

Registro PTR

Un registro puntero, o registro PTR, asigna una dirección IP a un FQDN (nombre de dominio completo). Es la contrapartida del registro A y se utiliza para la búsqueda inversa de DNS, lo que puede ayudar a bloquear a los spammers. Muchos servidores SMTP rechazan los correos electrónicos si no se encuentra un registro PTR para el servidor de correo remitente.

Para comprobar el registro PTR de una dirección IP, ejecuta este comando:

dig -x IP-address +short

o

host IP-address

El registro PTR no es gestionado por su registrador de dominios. Es administrado por la organización que le da una dirección IP. Como la dirección IP la obtienes de tu proveedor de hosting o de tu ISP, no de tu registrador de dominios, debes establecer el registro PTR para tu IP en el panel de control de tu proveedor de hosting, o preguntar a tu ISP. Su valor debe ser el nombre de host de su servidor de correo: mail.tu-dominio.com. Si su servidor de correo utiliza una dirección IPv6, asegúrese de añadir también un registro PTR para su dirección IPv6.

Para editar el registro DNS inverso de su VPS OVH o CONTABO o el que hayas elegido, ingrese al área de clientes de tu hosting, luego use el chat en vivo en la esquina inferior derecha, dígale al equipo de soporte que actualice el registro PTR de las direcciones IP de su servidor a mail.your-domain.com.

Registro SPF

El registro SPF (Sender Policy Framework) especifica qué hosts o direcciones IP pueden enviar correos electrónicos en nombre de un dominio. Sólo debes permitir que tu propio servidor de correo electrónico o el de tu proveedor de servicios de Internet envíen correos electrónicos para tu dominio. En su interfaz de gestión de DNS, cree un nuevo registro TXT como el siguiente.

Explicación:

  • TXT indica que se trata de un registro TXT.
  • Introduzca @ en el campo del nombre para representar el nombre del dominio principal.
  • v=spf1 indica que se trata de un registro SPF y la versión es SPF1.
  • mx significa que todos los hosts listados en los registros MX están autorizados a enviar correos electrónicos para su dominio y todos los demás hosts están desautorizados.
  • ~all indica que los correos electrónicos de tu dominio sólo deben proceder de los hosts especificados en el registro SPF. Los correos electrónicos procedentes de otros hosts se marcarán como falsos.

Para comprobar si su registro SPF se propaga a la Internet pública, puede utilizar la utilidad dig en su máquina Linux como se indica a continuación:

dig your-domain.com txt

La opción txt indica a dig que sólo queremos consultar los registros TXT.

Registro DKIM

DKIM (DomainKeys Identified Mail) utiliza una clave privada para firmar digitalmente los correos electrónicos enviados desde su dominio. Los servidores SMTP receptores verifican la firma utilizando la clave pública, que se publica en el registro DNS DKIM.

El script de iRedMail ha configurado automáticamente DKIM para su servidor. Lo único que queda por hacer es crear el registro DKIM en el gestor de DNS. Ejecute el siguiente comando para mostrar la clave pública DKIM.

sudo amavisd-new showkeys

La clave pública DKIM está en el paréntesis.

A continuación, en tu gestor de DNS, cree un registro TXT, introduzca dkim._domainkey en el campo de nombre. Copia todo lo que hay entre los paréntesis y pégualo en el campo de valor. Borra todas las comillas dobles y los saltos de línea.

Después de guardar los cambios, ejecuta el siguiente comando para comprobar si su registro DKIM es correcto.

sudo amavisd-new testkeys

Si el registro DKIM es correcto, la prueba pasará.

TESTING#1 tecnolitas.com: dkim._domainkey.tecnolitas.com => pass

Ten en cuenta que su registro DKIM puede necesitar algún tiempo para propagarse a Internet. Dependiendo del registrador de dominios que utilice, su registro DNS puede propagarse instantáneamente o puede tardar hasta 24 horas en hacerlo. Puede ir a https://www.dmarcanalyzer.com/dkim/dkim-check/, introducir dkim como selector e introducir su nombre de dominio para comprobar la propagación del registro DKIM.

Registro DMARC

DMARC son las siglas de Domain-based Message Authentication, Reporting and Conformance. DMARC puede ayudar a los servidores de correo electrónico receptores a identificar los correos legítimos y evitar que su nombre de dominio sea utilizado por la suplantación de identidad.

Para crear un registro DMARC, ve a tu gestor de DNS y añada un registro TXT. En el campo de nombre, introduce _dmarc. En el campo de valor, introduzca lo siguiente. (Debe crear la dirección de correo electrónico dmarc@tu-dominio.com).

v=DMARC1; p=none; pct=100; rua=mailto:dmarc@tu-dominio.com

El registro DMARC anterior es un punto de partida seguro. Si quiere leer la explicación completa de DMARC, consulte el siguiente artículo. Ten en cuenta que esto es opcional.

Paso 10: Prueba de puntuación y colocación del correo electrónico

Después de crear los registros PTR, SPF y DKIM, vaya a https://www.mail-tester.com. Verá una dirección de correo electrónico única. Envíe un correo electrónico desde su dominio a esta dirección y luego compruebe su puntuación. Como puedes ver, obtuve una puntuación perfecta. En el resultado de la prueba, debe comprobar si su registro PTR, SPF y DKIM es válido.

Mail-tester.com sólo puede mostrarte una puntuación del remitente. Hay otro servicio llamado GlockApps que te permite comprobar si tu correo electrónico ha llegado a la bandeja de entrada del destinatario o a la carpeta de spam, o si ha sido rechazado directamente. Es compatible con muchos proveedores de correo electrónico populares como Gmail, Outlook, Hotmail, YahooMail, iCloud mail, etc.

Solución de problemas

En primer lugar, por favor, utilice un VPS con al menos 4GB de RAM. Ejecutar iRedMail en un VPS de 1GB de RAM causará que la base de datos, SpamAssassin o ClamAV sean eliminados debido a un problema de falta de memoria. Si realmente quiere usar un VPS de 1GB de RAM, va a perder los correos electrónicos entrantes y tendrá otros resultados indeseables.

Si la interfaz web de iRedMail no es accesible, como un error de puerta de enlace 502, debe comprobar los registros de Nginx en el directorio /var/log/nginx/ para encontrar pistas. También puede comprobar el registro de correo /var/log/mail.log.

Compruebe si los distintos servicios están en funcionamiento.

systemctl status postfix

systemctl status dovecot

systemctl status nginx

systemctl status mariadb

systemctl status clamav-daemon

systemctl status amavis

Si has activado el cortafuegos, deberás abrir los siguientes puertos en el mismo.

HTTP port:  80
HTTPS port: 443
SMTP port:  25
Submission port: 587 (and 465 if you are going to use Microsoft Outlook mail client)
IMAP port:  143 and 993

Si desea utilizar el cortafuegos UFW, consulte mi guía aquí: Empezando con el cortafuegos UFW en Debian y Ubuntu.

Cómo renovar el certificado TLS

El certificado TLS emitido por Let’s Encrypt es válido sólo por 90 días y es importante que configure un trabajo Cron para renovar automáticamente el certificado. Puede ejecutar el siguiente comando para renovar el certificado.

sudo certbot renew -w /var/www/html/

Puede utilizar la opción –dry-run para probar el proceso de renovación, en lugar de hacer una renovación real.

sudo certbot renew -w /var/www/html/ --dry-run

Si ve el siguiente error al renovar el certificado TLS.

The client lacks sufficient authorization :: Invalid response

A continuación, debe crear el directorio oculto.

sudo mkdir -p /var/www/html/.well-known/acme-challenge

Y establece www-data como propietario del webroot.

sudo chown www-data:www-data /var/www/html/ -R

Además, edita el host virtual SSL /etc/nginx/sites-enabled/00-default-ssl.conf. Añade las siguientes líneas.

location ~ /.well-known/acme-challenge {
     root /var/www/html/;
     allow all;
}

Guarda y cierra el archivo. Pruebe la configuración de Nginx y vuelva a cargarla.

sudo nginx -t
sudo systemctl reload nginx

Crear un Cron Job

Ya te explique en otro artículo como funciona el programador de tareas Cron

Si la ejecución en seco tiene éxito, puedes crear un trabajo Cron para renovar automáticamente el certificado. Simplemente abra el archivo crontab del usuario root.

sudo crontab -e

A continuación, añade la siguiente línea al final del archivo.

@daily certbot renew -w /var/www/html/ --quiet && systemctl reload postfix dovecot nginx

Es necesario recargar Postfix, Dovecot y Nginx para que estos programas recojan el nuevo certificado y la clave privada.

En este punto ya tienes funcionando y perfectamente configurado tu nuevo servidor de correo, ahora puedes crear tantos dominios y buzones de correo como quieras y además tus correos no caerán en el buzón de spam de tus posibles clientes.

¡Que tengas un Ingenioso día!

¡que tengas un ingenioso día!

Contrata tu plan Ingenios@ de Sistemas por 5€ al mes y responderé a todas tus preguntas sobre tecnología en el menor tiempo posible. Pasa a formar parte de la comunidad Ingenios@s de Sistemas y disfruta de contenido exclusivo y aprende sobre sistemas Open Source, Blockchain, SmarContract, Web3, Inteligencia Artificial y Reaidad Virtual, súbete al tren de la Revolución 4.0

Si quieres estar al día y no perderte nada Suscribete al Podcast Ingenios@s de Sistemas, un episodio diario que te mantendrá informado y formado en esta vertiginosa carrera.

Deja un comentario

Share to...