Cómo instalar un servidor de correo electrónico con ISPConfig en Debian 10

Este Tutorial utiliza la configuración de un único servidor como ejemplo. ISPConfig 3.1 está instalado en Debian 10.0, Buster (ver el tutorial de instalación del Servidor Perfecto ISPConfig para la instalación real del servidor), el propósito de esta guía es mostrarte los pasos después de haber instalado el servidor inicial para configurar un sistema de correo que funcione para tu propio nombre de dominio. Actualicé ISPConfig a la versión 3.1.15 durante la prueba de este tutorial.

Qué se necesita

Para utilizar este Tutorial con éxito para un servidor de correo electrónico que funcione correctamente necesitas

  • un host donde instalar ISPConfig (y un Sistema Operativo)
  • Recomiendo 2 GB de memoria con 4 GB de swap, debería ser suficiente para el servidor de correo.
  • el host debe tener conexión a Internet con el puerto 25 abierto en ambos sentidos
  • el host debe tener una dirección IP fija
  • el host debe tener un registro A para su dirección IP (o AAAA si utiliza IPv6)
  • debes crear un registro MX para el servicio de nombres DNS del host
  • debes obtener el registro PTR del servicio de nombres DNS inverso del host que coincida con el FQDN del host

El requisito de memoria es para los filtros de SPAM. Puedes arreglártelas con 1 GB de memoria, incluso con los filtros de SPAM en funcionamiento, si cuentas con 4 GB de intercambio para evitar situaciones de falta de memoria.

Puertos abiertos

El servidor de correo debe tener abierto el puerto 25 tanto de entrada como de salida. Asegúrate de que tu host tiene ese puerto abierto antes de configurar el servidor de correo electrónico en ese host.

Hay formas de hacer que funcione el correo electrónico aunque el puerto 25 no esté abierto, pero implica enviar correos electrónicos a través de otro host que tenga el puerto 25 abierto. Puede que tenga más sentido instalar el servidor de correo electrónico en ese otro host y olvidarse por completo del primero en lo que respecta al correo electrónico.

Entradas del Servicio de Nombres DNS

El servidor de correo necesita un FQDN, Fully Qualified Domain name(Lee sobre ello en Wikipedia: FQDN). En este ejemplo, el nombre de dominio es taleman.ovh. Para demostrar que el nombre de host del servidor de correo no tiene por qué ser mail, utilizamos posti como nombre de host. Así que el FQDN es posti.taleman.ovh.

Este host está instalado en un sistema de proveedores de servicios, que ofrecen registro de dominios, servicio de nombres y servicio de nombres inverso. Los he utilizado.

La dirección IP es 178.33.154.66. Hice lo siguiente

  • registré el dominio taleman.ovh
  • añadí esta dirección IP como registro A al servicio de nombres DNS con el nombre posti.taleman.ovh
  • añadí un registro MX para el dominio taleman.ovh con el valor posti.taleman.ovh
  • añade el registro PTR del servicio de nombres inverso para esa dirección IP, apuntando a posti.taleman.ovh

El registro MX se crea para el dominio de correo electrónico. Así que lo creo para taleman.ovh, y apunta a posti.taleman.ovh, el servidor de correo electrónico que recibe el correo de ese dominio.

Servicio de nombres inverso

Lee sobre el servicio de nombres inverso en el tutorial Servicio de nombres. En este caso de ejemplo, el servicio de nombres inverso debe devolver posti.taleman.ovh.

Mi proveedor de servicios comprobó la existencia del registro A antes de poder añadir el PTR correspondiente, tuve un pequeño problema antes de darme cuenta de por qué falló la adición.

Probar el servicio de nombres

Es mejor probar el servicio de nombres ahora, ya que enviar y recibir correos electrónicos no funcionará si el servicio de nombres no está configurado correctamente. Si tu estación de trabajo es Windows en lugar de Linux o Unix, utiliza el comando nslookup en lugar de host.

$ host taleman.ovh
 taleman.ovh has address 188.165.143.5
 taleman.ovh mail is handled by 10 posti.taleman.ovh.

El resultado anterior muestra que el nombre de dominio sí tiene asociado un número IP (que en este caso es distinto del número IP del servidor de correo electrónico, pero eso no afecta a los correos), y hay un registro MX que apunta a posti.taleman.ovh. La parte «el correo es gestionado por» procede del registro MX. Este registro MX es necesario si el correo electrónico enviado a direcciones @taleman.ovh debe recibirse en posti.taleman.ovh.

A continuación, comprueba que la entrada del servicio de nombres para el FQDN del servidor de correo (en este caso posti.taleman.fi) es un registro A y apunta al número IP correcto.

$ dig posti.taleman.ovh |grep "ANSWER SECTION" --after-context=3 
;; ANSWER SECTION:
 posti.taleman.ovh. 3600 IN A 178.33.154.66 
;; Query time: 56 msec

Por último, comprueba que el servicio de nombres inverso resuelve el número IP al FQDN del servidor de correo.

$ host 178.33.154.66
 66.154.33.178.in-addr.arpa domain name pointer posti.taleman.ovh.

En lugar de comandos host y dig puedes utilizar páginas web que comprueban el servicio de nombres. Conozco intoDNS y MXToolbox.

Si no consigues que las pruebas anteriores tengan éxito, puedes probar este tutorial Configurar el servicio de nombres.

Instalación del SO

Yo uso Debian versión 10 Buster, así que sigo este tutorial:

https://www.howtoforge.com/tutorial/debian-10-buster-minimal-server/

Sustituye el número IP, el nombre de host y el nombre de dominio por tus valores.

Como escribo este tutorial en inglés, he elegido el inglés como idioma, pero Finlandia como país y United_Kingdom en_GB.UTF-8 como configuración regional.

root@posti:/tmp# cat /etc/debian_version 10.0
root@posti:~# locale
 LANG=en_GB.UTF-8
 LANGUAGE=en_GB:en
 LC_CTYPE="en_GB.UTF-8"
 LC_NUMERIC="en_GB.UTF-8"
 LC_TIME="en_GB.UTF-8"
 LC_COLLATE="en_GB.UTF-8"
 LC_MONETARY="en_GB.UTF-8"
 LC_MESSAGES="en_GB.UTF-8"
 LC_PAPER="en_GB.UTF-8"
 LC_NAME="en_GB.UTF-8"
 LC_ADDRESS="en_GB.UTF-8"
 LC_TELEPHONE="en_GB.UTF-8"
 LC_MEASUREMENT="en_GB.UTF-8"
 LC_IDENTIFICATION="en_GB.UTF-8"
 LC_ALL=
 root@posti:~# cat /etc/timezone
 Europe/Helsinki

Comprueba que has configurado correctamente el nombre de host. La configuración del sistema de correo que hace ISPConfig no va a funcionar si el nombre de host es incorrecto.

root@posti:~# hostname posti
 root@posti:~# hostname -f posti.taleman.ovh
 root@posti:~#

Instalar ISPConfig

Yo elijo instalar Apache como servidor web, así que para Debian Buster sigo esta Guía del Servidor Perfecto.

Instalé openssh-server en el host y configuré el inicio de sesión como root usando una clave ssh, así puedo hacer ssh al host como root directamente. Inicio de sesión sin contraseña con OpenSSH o Inicio de sesión seguro sin contraseña con SSH.

root@posti:/tmp# free -h

Resultado del comando libre

Prefiero los editores estilo Emacs a nano, así que ahora instalo jed para que editar archivos sea más agradable.

Tenía /etc/host y /etc/hostname correctamente configurados tras la instalación del sistema operativo, así que me limité a comprobar que eran correctos siguiendo la Guía del Servidor Perfecto. Presta atención al nombre de host y al FQDN, si los estropeas descubrirás al final que tu servidor de correo electrónico no funciona. Se puede reparar el daño, pero es más fácil hacerlo bien desde el principio.

root@posti:/tmp# hostname
 posti
 root@posti:/tmp# hostname -f
 posti.taleman.ovh

Para el resto, me limito a seguir la Guía del Servidor Perfecto. Ten en cuenta que, en su mayor parte, puedes cortar y pegar los comandos de la guía en la línea de comandos.

No instalé Mailman, ya que no tengo previsto utilizar Mailman en este host. Del mismo modo, omití instalar BIND DNS Server, Webalizer, AWStats. Sí instalé Roundcube Webmail, ya que este host se convierte en un servidor de correo electrónico.

En el capítulo 18 (Instalar la herramienta de administración de bases de datos PHPMyAdmin) utilicé el comando

/usr/bin/apg -m 32 -x 32

para generar el secreto blowfish de 32 caracteres.

Uso del sistema

Crear dominio de correo electrónico y buzones

Ahora me conecto como admin a ISPConfig y

  • Añadir nuevo cliente
  • Añadir nuevo Dominio (¡Dominio de correo electrónico!), y rellenar el formulario
  • Añadir nuevo Buzón

Crea las claves y el registro DKIM pulsando los botones en el orden numerado en la imagen. Puedes leer sobre DKIM en Wikipedia.

Crear dominio de correo en ISPConfig

Figura 1: Crear dominio de Correo

Después espera dos minutos o hasta que desaparezca la bola roja con el número en la parte superior del Panel de ISPConfig.

Como primera prueba, inicia sesión en Roundcube Webmail con el buzón creado anteriormente y envía un correo electrónico a esa misma dirección. ISPConfig envía un mensaje de Bienvenida a cada buzón creado, por lo que ya debería haber un mensaje allí. Utiliza el botón Redactar y escribe un breve mensaje de prueba.

Inicio de sesión en RoundCube

Figura 2: Webmail de Roundcube

Enviar correo electrónico en Roundcube

Figura3: Envío desde Roundcube

El mensaje debería aparecer pronto en el buzón.

Después prueba a enviar un correo a algún otro buzón que tengas y podrás comprobar si el correo llega allí. La siguiente prueba puedes hacerla enviando desde otro lugar al buzón creado anteriormente.

Ten en cuenta que si has activado las listas grises para el buzón, el correo enviado desde fuera de tu servidor no llegará inmediatamente al buzón. Sin embargo, deberías ver en el registro de correo las entradas del intento de entrega inmediatamente, para que veas que el correo puede llegar a tu servidor. La entrada greylisting en el archivo /var/log/mail.log tiene este aspecto:

Aug 29 19:08:42 posti postfix/smtpd[16911]: NOQUEUE: reject: 
  RCPT from mta-out1.inet.fi[62.71.2.194]: 450 4.2.0 
  <[email protected]>: Recipient address rejected: Greylisted, 
  see http://postgrey.schweikert.ch/help/taleman.ovh.html; 
  from=<****@*****.***> to=<[email protected]> proto=ESMTP 
  helo=<******.****.***>

Puedes monitorizar el registro de correo en una ventana de terminal como ésta, por ejemplo:

tail -f /var/log/mail.log

O utilizando estos comandos, si sólo te interesan las entradas de la lista gris:

tail -f /var/log/mail.log | grep Greylisted

o

grep Greylisted /var/log/mail.log

Las listas grises sólo retrasan el primer correo electrónico del mismo remitente al mismo destinatario. Una vez recibido ese primer correo, los siguientes llegan sin retraso adicional.

En mi caso, todo funcionó a la primera. Esto demuestra que la Guía del Servidor Perfecto ISPConfig funciona de verdad.

Conectar cliente de correo

Usando Thunderbird como cliente de correo de ejemplo. Otras aplicaciones cliente de correo funcionan de forma similar.

ISPConfig hace que el nombre de la cuenta sea la dirección de correo electrónico.

Configuración de la cuenta Thunderbird

Figura 4: Configuración de la cuenta Thunderbird

Configuración del servidor Thunderbird

Figura 5: Configuración del servidor Thunderbird

Seguridad de la conexión STARTTLS significa que la conexión comienza desprotegida y luego cambia a cifrada si ambas partes admiten el cifrado. SSL/TSL significa que la sesión está encriptada desde el principio. SSL/TSL probablemente sea ligeramente más seguro, así que prueba si tu cliente funciona con eso.

Servidor de correo saliente Thunderbird

Figura 6: Configuración del servidor saliente de Thunderbird

Utilizar SPF

Lee sobre el Marco de Política del Remitente en Wikipedia. Originalmente SPF significaba Remitente Permitido Desde, lo que es bueno para recordar lo que significa. Después de leer sobre SPF, puedes crear el registro tú mismo, comprobar si tu proveedor de servicios de nombres puede generar el registro SPF o utilizando los buscadores de Internet con

SPF wizard

encuentra un sitio web que cree el registro SPF del servicio de nombres por ti. A continuación, corta y pega el registro en tu servicio de nombres. Añade un registro TXT, o puede que en algún sistema DNS añadas un registro SPF.

Comprueba cómo se ve el SPF en el servicio de nombres, así

$ dig taleman.ovh -t TXT | grep spf
 taleman.ovh. 3000 IN TXT "v=spf1 mx ~all"

O así:

$ dig +short taleman.ovh TXT
 "v=spf1 mx ~all"
 "1|www.taleman.ovh"

Utilizar DKIM

Lee sobre DomainKeys Identified Mail en Wikipedia. ISPConfig creó las claves DKIM por ti cuando creaste el dominio de correo electrónico (si te acordaste de marcar la casilla DKIM). Corta y pega el registro DNS que es la clave pública en tu servicio de nombres como registro TXT. Es posible que tu proveedor de servicios de nombres ofrezca una herramienta para facilitar la creación del registro DKIM. Mantén en secreto la clave privada DKIM.

Comprueba cómo se ve el DKIM en el servicio de nombres, así:

$ host -t txt default._domainkey.taleman.ovh.
 default._domainkey.taleman.ovh descriptive text "v=DKIM1;h=sha256;s=*;p=MIIB(I cut long string shorter)0rp" "sTGLXyK(cut shorter)B;t=s;"

Si fue ISPConfig quien creó las claves DKIM, la clave privada está copiada en el lugar correcto en la configuración de amavis.

Hay un sitio web mail-tester. com que es útil para comprobar que SPF y DKIM funcionan. Ve a ese sitio web, te da una dirección de correo electrónico y envías un correo allí desde tu servidor. Luego espera un minuto y vuelve a comprobar el sitio web.

Crear certificados

ISPConfig puede crear certificados autofirmados, estos se crean durante la instalación de ISPConfig a menos que elijas no crearlos. Aunque hayas creado esos certificados autofirmados, es una buena idea crear certificados adecuados en los que confíen los navegadores, los programas de correo electrónico y otros servidores de correo electrónico.

Hay un buen tutorial: Asegurar ISPConfig con un Certificado SSL Let’s Encrypt gratuito

Siguiendo ese tutorial, me di cuenta de que el sitio web creado mostraba la página web por defecto de Debian, hasta que creé el certificado LE para el sitio web. También el Panel de ISPConfig estaba torcido, creo que porque tenía el certificado autofirmado y ahora este nuevo certificado o ningún certificado. Esto se solucionó actualizando las páginas en el navegador.

Una vez configurados los certificados, introduce la dirección https del servidor en el navegador. Si haces clic con el otro botón del ratón en el icono situado a la izquierda de la barra de direcciones del navegador, aparecerá información sobre el certificado.

Ve a la pestaña Sistema del Panel ISPConfig, Interfaz Configuración Principal y pestaña Correo. Allí configura

Use SSL/TLS encrypted connection for SMTP

en SSL.

Es posible comprobar el certificado con las herramientas de los sitios web, utiliza los motores de búsqueda de Internet con

ssl testing

como palabras de búsqueda. Esas herramientas suelen probar el sitio web, cuando pruebes los certificados que tiene el servidor de correo electrónico, busca con

ssl testing mail server

Plugins Roundcube de ISPConfig

Estos plugins son útiles para los usuarios de webmail. Permiten cambiar la contraseña del correo electrónico en Roundcube, por ejemplo. Algunos otros ajustes también se pueden modificar en Roundcube. Todos ellos se pueden modificar en el panel de ISPConfig, pero algunos usuarios de correo electrónico pueden no querer utilizar el panel.

Instalé los Plugins ISPConfig Rouncube usando el Tutorial ISPConfig 3 Roundcube Plugin en Debian 9. El tutorial funcionó exactamente en Debian 10 Buster, excepto que ahora ispconfig3_account/config/config.inc.php tiene una línea más:

$config['soap_validate_cert'] = true;

Esto puede permanecer en el valor true, ya que el certificado está correctamente configurado y probado en el capítulo anterior de este tutorial. Sin embargo, si el host no tiene un certificado válido, cambia esta configuración a false.

Tuve un problema. Algunos elementos de la sección Cuenta mostraban un mensaje de error.

An error occurred.
Soap Error: The login is not allowed from <host ip-number>

Lo solucioné marcando el Acceso Remoto y escribiendo posti.taleman.ovh para el usuario rcmail-remote que creé siguiendo el Tutorial. Parece que el tutorial se equivoca al decir que no es necesario marcar «Acceso Remoto». Ahora me parece que es necesario tanto para configuraciones de un solo servidor como para configuraciones multiservidor ISPConfig con un servidor de correo electrónico separado.

Uso adicional

Ahora puedes crear otro dominio de correo electrónico. Recuerda crear un registro MX para ese dominio, y apuntarlo a tu servidor de correo electrónico. Puedes utilizar el mismo servidor de correo electrónico para todos los dominios de correo electrónico que crees. Así es como suele hacerse, ya que sería un derroche crear un servidor de correo electrónico distinto para cada dominio de correo electrónico.

Solución de problemas

Siguiendo este tutorial, mi servidor de correo electrónico recién configurado funciona. Si el tuyo no funciona, comprueba que has seguido este tutorial y no te has saltado algún paso.

La lectura del Foro ha demostrado que las formas más comunes de que un servidor de correo electrónico no funcione son la configuración incorrecta de hostname y hostname -f y/o errores en el archivo /etc/postfix/main.cf.

Si sospechas que hay problemas con el servicio de nombres DNS, compruébalos con ISPConfig -tutorial. Hay herramientas web que comprueban DNS, como intodns.com, dnschecker.com, mxtoolbox.com.

Si los correos electrónicos no se reciben o no se envían, es postfix el que hace esas funciones y se registran en /var/log/mail.log. Por tanto

tail -f /var/log/mail.log | grep postfix to see what happens when mail is being received or sent.

Si tienes problemas de conexión con el cliente de correo electrónico (Thunderbird, por ejemplo) úsalo para ver qué ocurre:

tail -f /var/log/mail.log | grep dovecot

En caso de que un correo electrónico en particular sea problemático, puedes encontrar las entradas del registro de correo utilizando el ID de ese correo. Por ejemplo

Sep 23 14:19:34 posti postfix/smtps/smtpd[10260]: A9F2880C76:
client=dsl-tkubng21-58c1ce-191.dhcp.inet.fi[99.99.99.99],
sasl_method=PLAIN, [email protected]

El ID de ese correo electrónico es A9F2880C76. Puedes encontrar las entradas de registro de ese correo electrónico utilizando

# grep A9F2880C76 /var/log/mail.log

El comando mailq muestra los correos electrónicos que están en la cola diferida de postfix. Es decir, aquellos correos que aún no han sido entregados. Es normal que haya algunas entradas recientes, ya que los correos no siempre se entregan inmediatamente. Puedes ver el contenido de esos correos utilizando el ID de la cola, así:

# postcat /var/spool/postfix/deferred/A/A9F2880C76

Howtoforge tiene Foros ISPConfig, pide consejo allí.

También te podría gustar...