Introducción al correo electrónico con Postfix

per Victor Carceler darrera modificació 2021-04-06T18:03:14+02:00

El correo electrónico es uno de los servicios más utilizados de Internet. Es un servicio descentralizado que permite el intercambio de mensajes y ficheros adjuntos a lo largo y ancho de la red.

Algunos de los protocolos que se utilizan son:

Protocolo Descripción
SMTP

Simple Mail Transfer Protocol

Se utiliza para transmitir correo electrónico entre el MUA y MTA o entre MTA y MTA.

POP3

Post Office Protocol 3

Se utiliza para consultar el correo almacenado en el MDA. Utilizado con conexiones intermitentes para descargar el correo.

IMAP

Protocolo de acceso a mensajes de Internet

Se utiliza para consultar el correo almacenado en el MDA. Utilizado con conexiones permanentes.

Y algunos de los elementos que se utilizan son:

Elemento Descripción
MUA

Mail User Agent

Es el programa cliente que utiliza el usuario final para enviar y recibir correos. Puede ser una sencilla herramienta en la línea de comandos como mail proporcionado por mailutils. Una herramienta gráfica como Mozilla Thunderbird o una herramienta web como roundcube.

MTA

Mail Transfer Agent

Es el servidor de correo electrónico que recoge los correos que envían sus usuarios y los entrega a los MTA de los destinatarios.

Algunos MTA son: Sendmail, Postfix, Exim y Qmail.

MDA

Mail Delivery Agent

Es el componente que mantiene los buzones de los usuarios, para que sus MUAs se conecten y descarguen el correo recibido.

Un MDA muy utilizado es Dovecot y aquí tenemos una introducción a Dovecot.

¿Cómo funciona el correo electrónico?

Supongamos que un científico del Instituto Kurchátov quiere enviar un correo electrónico a un científico del CERN. Para simplificar llamaremos usuario-a al emisor y usuario-b al receptor, suponiendo que ambos utilizan el correo de la institución de la que forman parte sus direcciones de correo podrían ser usuario-a@nrcki.ru y usuario-b@home.cern.

De esta manera el proceso comienza cuando usuario-a@nrcki.ru utilizando un MUA (programa cliente en el ordenador, web o tal vez aplicación móvil) escribe un correo en el que pone como destinatario a usuario-b@home.cern.

El programa cliente no envía directamente el correo al destinatario, lo único que hace es transmitir con el protocolo SMTP el correo al MTA (servidor de correo) que se encarga del correo saliente en el dominio que utiliza el emisor. Es decir, en nuestro caso el programa cliente de usuario-a@nrcki.ru enviaría el correo al servidor SMTP que tuviera configurado como servidor para el correo saliente, tal vez esmtp3.rrcki.ru.

Antiguamente cualquier servidor de correo de Internet aceptaba correos de los programas clientes (aunque no fueran sus usuarios) y enviaba esos correos a los servidores destinatarios. Pero hoy en día esa configuración, conocida como open relay, no está aconsejada pues permite enviar correo indeseado (spam). Hoy en día los servidores de correo únicamente aceptan correos de los MUAs de sus propios usuarios.

Ahora viene un punto interesante, el servidor de correo esmtp3.rrcki.ru examina el correo y descubre que el destinatario es usuario-b@home.cern. ¿Quién se encarga del correo para el dominio home.cern? ¿Cómo averiguarlo?

Pues con una consulta al DNS para encontrar los servidores que recogen el correo para un dominio de Internet. Para este propósito se utilizan los registros MX que permiten indicar qué servidor (o servidores) se encarga de esta función.

Podemos utilizar la herramienta host para obtener los registros MX de home.cern del siguiente modo:

vcarceler@zvezda:~$ host -t MX home.cern
home.cern mail is handled by 20 cernmxgwlb.cern.ch.
vcarceler@zvezda:~$

En este caso hay un único servidor (cernmxgwlb.cern.ch) así que se intentará abrir una conexión SMTP para entregar el correo electrónico. Pero resulta habitual listar varios servidores MX para un dominio.

Por ejemplo, los servidores MX para el dominio wikipedia.org son:

vcarceler@zvezda:~$ host -t MX wikipedia.org
wikipedia.org mail is handled by 50 mx2001.wikimedia.org.
wikipedia.org mail is handled by 10 mx1001.wikimedia.org.
vcarceler@zvezda:~$

El servidor mx1001.wikimedia.org está anunciado con prioridad 10 y mx2001.wikimedia.org lo está con prioridad 50. Los números bajos son prioritarios, así siempre se intentará entregar el correo a mx1001.wikimedia.org y, si no está disponible, se intentará entregar el correo a mx2001.wikimedia.org.

Cuando el correo ha sido entregado en el servidor del destinatario allí aguarda a que conecte el MUA para consultar el correo. El correo que ha sido entregado a los usuarios estará guardado en sus buzones, que pueden estar en formato mbox o Maildir.

Al servidor que almacena los buzones de los usuarios y los ofrece con los protocolos POP3 y/o IMAP se le suele llamar MDA Mail Delivery Agent.

Cuando el destinatario conteste el correo los papeles se invertirán para transmitir la respuesta desde el CERN hasta el Instituto Kurchátov.

Instalación de Postfix

Como se ha visto el funcionamiento de un MTA depende del servicio DNS, así que se recomienda instalar Postfix una vez que estén debidamente configurados los registros MX en el servidor DNS.

Tratándose de una aplicación empaquetada en los repositorios de la distribución su instalación no puede ser más sencilla:

apt update
apt install postfix

Durante la instalación Postfix mostrará algunas opciones de configuración:

postfix-info-opciones.png

Como se puede ver en el diálogo que muestra información sobre las diferentes opciones de configuración se puede optar por:

  • No realizar ninguna configuración y mantener los ficheros que tuviera la máquina.
  • Configurar Postfix como un servidor de internet, es decir uno que envía y recibe correo utilizando SMTP. Esta es la opción que nos interesa.

A continuación se puede seleccionar la opción de instalación:

postfix-options-select.png

Y finalmente es necesario indicar el dominio del que se encargará el MTA. En este caso, como ejemplo se ha configurado el dominio dominio1.test así que las direcciones de los usuarios serán <usuario>@dominio1.test.

Una vez instalado se podrá encontrar:

  • La configuración en el directorio /etc/postfix. El fichero de configuración principal será /etc/postfix/main.cf.
  • El fichero de registro /var/log/mail.log.

Prueba de correo local con GNU Mailutils

Es posible comprobar el funcionamiento del MTA utilizando el MUA mail que forma parte del paquete mailutils. Una vez instalado el paquete mailutils será posible dar de alta dos usuarios (usuario1 y usuario2) utilizando el comando adduser.

De esta manera el primer usuario podrá enviar un correo al segundo:

root@smtp:/etc/postfix# su - usuario1
usuario1@smtp:~$ mail usuario2
Cc:
Subject: Un correo de usuario1 para usuario2.
Hola, usuario2

Esta es una prueba.

(Para terminar hay que pulsar CTRL+D y para abortar CTRL+C)
usuario1@smtp:~$

Tan pronto como se envía el correo electrónico se puede registrar el fichero /var/log/mail.log para comprobar que postfix lo ha recogido y lo ha dejado en el buzón del usuario2.

root@smtp:/etc/postfix# cat /var/log/mail.log 
Mar 6 08:52:43 smtp postfix/postfix-script[4872]: starting the Postfix mail system
Mar 6 08:52:43 smtp postfix/master[4874]: daemon started -- version 3.4.13, configuration /etc/postfix
Mar 6 10:47:42 smtp postfix/pickup[1141]: B6BCC18D42: uid=1001 from=<usuario1@smtp.lxd>
Mar 6 10:47:42 smtp postfix/cleanup[1634]: B6BCC18D42: message-id=<20210306104742.B6BCC18D42@smtp.lxd>
Mar 6 10:47:42 smtp postfix/qmgr[1142]: B6BCC18D42: from=<usuario1@smtp.lxd>, size=438, nrcpt=1 (queue active)
Mar 6 10:47:42 smtp postfix/local[1636]: B6BCC18D42: to=<usuario2@smtp.lxd>, relay=local, delay=0.03, delays=0.02/0.01/0/0, dsn=2.0.0, status=sent (delivered to mailbox)
Mar 6 10:47:42 smtp postfix/qmgr[1142]: B6BCC18D42: removed
root@smtp:/etc/postfix#

El usuario2 puede utilizar mail para leer el correo:

root@smtp:/etc/postfix# su - usuario2
usuario2@smtp:~$ mail
"/var/mail/usuario2": 1 message 1 new
>N   1 usuario1@smtp.lxd  Sat Mar  6 10:47  17/522   Un correo de usuario1 para usuario2.
? 1
Return-Path: <usuario1@smtp.lxd>
X-Original-To: usuario2@smtp.lxd
Delivered-To: usuario2@smtp.lxd
Received: by smtp.lxd (Postfix, from userid 1001)
	id B6BCC18D42; Sat,  6 Mar 2021 10:47:42 +0000 (UTC)
To: <usuario2@smtp.lxd>
Subject: Un correo de usuario1 para usuario2.
X-Mailer: mail (GNU Mailutils 3.7)
Message-Id: <20210306104742.B6BCC18D42@smtp.lxd>
Date: Sat,  6 Mar 2021 10:47:42 +0000 (UTC)
From: usuario1@smtp.lxd

Hola, usuario2

Esta es una prueba.

(Para terminar hay que pulsar CTRL+D y para abortar CTRL+C)
? quit
Saved 1 message in /home/usuario2/mbox
Held 0 messages in /var/mail/usuario2
usuario2@smtp:~$

En este proceso se puede comprobar:

  • Que postfix deja los correos entregados en el buzón en formato mbox /var/mail/usuario2
  • Que mail utiliza como buzón, también en formato mbox, el fichero /home/usuario2/mbox

Pero es posible cambiar la configuración tanto de postfix como de mailutils para que utilicen buzones Maildir: Cambio de mbox a Maildir en Postfix y mailutils.

Otros clientes de correo electrónico.

Aunque el MUA mail tiene muchas opciones y resulta muy práctico en los scripts probablemente no sea la opción preferida para la mayoría de los usuarios de correo electrónico. Estos usuarios estarán habituados a utilizar una interfaz gráfica como la de Thunderbird en el ordenador, K-9 Mail en sus dispositivos móviles o Roundcube en cualquier navegador.

La puerta hacia todas estas aplicaciones es un servidor Dovecot que pueda atender a los MUAs de los usuarios utilizando POP3 y/o IMAP.

Se puede leer una introducción a Dovecot que demuestra cómo utilizarlo con Thunderbird en: Inroducción a Dovecot.

También se puede leer sobre un Roundcube en: Un MUA web: Roundcube.

Más información: