En este artículo te explicaremos acerca del funcionamiento del sistema de correos, qué actores y factores intervienen en el proceso de la entrega y cuál es el camino que recorren hasta ser entregados. Podrás interpretar headers y comprender por qué se dan los rebotes de correo.
Este es el esquema que representa su funcionamiento:
Glosario:
A continuación, definiremos la terminología que usaremos en la nota:
MUA: (Mail User Agent, Agente de Usuario de Correo): es el sistema que se encarga de recibir y de enviar emails usando los protocolos STMP (para el envío) y POP3 o IMAP (para la recepción).
Ejemplos: evolution, kmail, sylpheed o incluso squirrelmail (los webmails).
MTA: (Mail Transfer Agent, Agente de Transferencia de Correo): es el sistema que se encarga de tomar el email de un MUA o de un MTA y entregarlo a otro MTA o a un MDA, en caso de que el email pertenezca al dominio propio del MTA.
Ejemplos: postfix, qmail, exim, cyrus y courier.
MDA: (Mail Delivery Agent, Agente de Entrega de Correo): es un sistema que se encarga de la recepción del email por parte de un MTA, y lo almacena de la forma que tenga configurado. Los MDA pueden almacenar en disco, base de datos o llamar a otro programa para hacer el procesamiento de emails.
Ejemplos: procmail, maildrop, cyrus y courier que implementan también sus propios MDA.
MAA: (Mail Access Agent, Agente de Acceso de Correo): es el sistema que se encarga del acceso al correo almacenado. El protocolo más usado es POP3 (Post-Office Protocol version 3). Se encarga de hacer accesible los buzones a equipos remotos.
Ejemplos: dovecot, uw, qpopper, cyrus y courier que implementan también sus propios MAA.
Hay elementos que conforman la estructura interna de un mensaje, y son:
Dirección de Correo: Es una cadena de texto separada en dos partes por una arroba (@), donde la primera corresponde al nombre del usuario y la segunda, al dominio.
Cabeceras (headers): son metadatos presentes dentro de un mensaje de correo electrónico. Estas cabeceras proveen información acerca del remitente (From), destinatario (To y Cc), los MTA por los que ha pasado (Received), el asunto del mensaje (Subject), fecha (Date) y otra información necesaria para poder leer correctamente el cuerpo.
Cuerpo del mensaje: es el contenido del mail. Este cuerpo puede ser texto plano o un contenido formateado marcado por un Content-type específico. De esta forma, podemos enviar no solo un email en texto plano, sino también un email con texto enriquecido (HTML).
Mensaje: es el contenido enviado desde un punto hacia otro a través de los MTA. Este mensaje está escrito de una forma específica.
Buzón de correo: es donde el MDA almacena los mensajes recibidos para un usuario de correo. Cada usuario de correo tendrá su propio buzón.
Relay: ocurre cuando un mensaje recibido en un MTA no pertenece al dominio que lo controla, y debe enviarlo al MTA propiedad de ese dominio. Esta técnica se emplea de forma lícita por parte de los dominios propios a los que un usuario se conecta para enviar un email a otra persona de otro dominio.
También se emplea de forma ilícita por gente que quiere enviar spam sin ser detectada, aprovechando la mala configuración de ciertos servidores de correo que permiten de forma abierta enviar emails desde otros dominios hacia dominios no controlados por ellos.
Forward: es un tipo de reenvío donde puede modificarse el contenido del email original. Actualmente no muchos clientes de correo lo permiten pero, ingresando con tu usuario en el servidor, sería posible enviar un email recibido sin modificarlo, haciendo creer al receptor que el email fue enviado originalmente para él. La evidencia en este caso quedaria plasmada en la cabecera Received.
SPAM: Es un tipo de mensaje con contenido no deseado y no solicitado por el receptor. Es común que estos mensajes también contengan contenido ilícito.
Redirección o Alias: Se da cuando una dirección de correo electrónico es en realidad una dirección virtual que será redirigida a una aplicación, hacia otra dirección de email o incluso varias otras direcciones de email diferentes.
MTA: Protocolo SMTP
Cada sistema tiene su propio protocolo. El protocolo para el envío de los mensajes es el SMTP. Este protocolo es muy simple, y se basa en un intercambio de información.
A continuación, enviaremos un mensaje a través del protocolo telnet al servidor de gmail a mi cuenta de correo: example@gmail.com.
$ telnet gmail-smtp-in.l.google.com 25 Trying 108.177.119.26... Connected to gmail-smtp-in.l.google.com. Escape character is '^]'. 220 mx.google.com ESMTP m15-v6si1661584edp.114 - gsmtp HELO email 250 mx.google.com at your service MAIL FROM: mi@dominio.com 555 5.5.2 Syntax error. m15-v6si1661584edp.114 - gsmtp MAIL FROM: <mi@dominio.com> 250 2.1.0 OK m15-v6si1661584edp.114 - gsmtp RCPT TO: <...@gmail.com> 250 2.1.5 OK m15-v6si1661584edp.114 - gsmtp DATA 354 Go ahead m15-v6si1661584edp.114 - gsmtp Subject: prueba From: "Manuel Rubio" <mi@dominio.com> To: "Manuel Rubio" <example@gmail.com> Hello! . 250 2.0.0 OK 1540381563 m15-v6si1661584edp.114 - gsmtp QUIT 221 2.0.0 closing connection m15-v6si1661584edp.114 - gsmtp Connection closed by foreign host.
Un header tendrá el aspecto como el siguiente, en este caso corresponde al extraído de un mensaje en gmail:
Delivered-To: example@gmail.com Received: by 2002:a2e:2151:0:0:0:0:0 with SMTP id h78-v6csp482083ljh; Wed, 24 Oct 2018 04:46:03 -0700 (PDT) Received: from email ([217.111.X.X]) by mx.google.com with SMTP id m15-v6si1661584edp.114.2018.10.24.04.45.18 for <example@gmail.com>; Wed, 24 Oct 2018 04:46:02 -0700 (PDT) Date: Wed, 24 Oct 2018 04:46:02 -0700 (PDT) Message-Id: <5bd05b7a.1c69fb81.3cefc.5b19SMTPIN_ADDED_MISSING@mx.google.com>
Aclaramos que puede haber otras cabeceras agregadas por gmail para intentar autenticar el mensaje.
Protocolo MAA: IMAP y POP3
En cuanto a la sincronizacion de los emails por parte del cliente de correo, contamos con los protocolos POP3 e IMAP. Por un lado POP3 permite eliminar los mails del servidor para dejar copia únicamente en el cliente de correos. IMAP, por su parte, funciona potenciando una estructura de carpetas en el servidor para organizar los emails y obtener únicamente los emails necesarios para ser leídos. Mantiene el estado de lectura y otros datos.
Cuando disponemos de un único cliente de correos en nuestro ordenador y no tenemos intención de utilizar otros clientes en otros equipos o dispositivos, consideramos que POP3 es una buena opción.
Si nuestro servidor de correo tiene una cuota de espacio limitada, POP3 te ayudará a mantener siempre el buzón vacío, almacenando únicamente los emails no leídos. Esto potencia, además, el uso del ancho de banda.
Por otra parte, si lo que queremos es emplear sistemas de webmail y más de un cliente de correo, lo ideal seria mantener todos los emails en el servidor y emplearlos a través de IMAP. Este protocolo nos permite organizar los emails en carpetas dentro del servidor, al mismo tiempo que mantiene el estado de lectura de los emails.
Ciertos servidores también permiten el uso de carpetas compartidas a través de IMAP para diferentes usuarios.
DNS
Normalmente, un servicio de correo dispone de uno o varios servidores atendiendo el sistema, y pueden configurarse otros servidores a modo de relay para contener los emails en caso de caída de los principales. Estos servidores mantendrán los emails y serán redireccionados hacia los principales cuando vuelvan a estar operativos.
Una configuración típica de configuracion MX seria:
@ IN MX mail.midominio.com
Donde mail.midominio.com es un tipo de registro CNAME o A apuntando al host donde está configurado el correo. Tené en cuenta que el dominio midominio.com normalmente no suele estar disponible para poder apuntar al servicio de email.
En servidores como los de gmail podemos ver:
gmail.com. IN MX 5 gmail-smtp-in.l.google.com. gmail.com. IN MX 10 alt1.gmail-smtp-in.l.google.com. gmail.com. IN MX 20 alt2.gmail-smtp-in.l.google.com. gmail.com. IN MX 40 alt4.gmail-smtp-in.l.google.com. gmail.com. IN MX 30 alt3.gmail-smtp-in.l.google.com.
Ordenado por prioridad (la 4ª columna) vemos que nuestro sistema debe conectarse al MTA en la dirección de correo gmail-smtp-in.l.google.com cuando intente enviar un mensaje a una dirección de gmail.com.
Ejemplo sobre el funcionamiento:
Un usuario abre su MUA (evolution, kmail u outlook, por ejemplo) y escribe un email desde su buzón correo@miemail.com a un amigo, que tiene la dirección de correo el@suemail.com.
Su programa MUA se conecta con el MTA que está en el dominio miemail.com, este MTA comprueba que el remitente es suyo y el destinatario es de otro dominio, por lo que realiza un relay del email al MTA del dominio suemail.com.
El MTA del dominio suemail.com ve que el destinatario es propio, por lo que libera el email a su MDA.
El MDA comprueba el usuario a través de los alias y las reglas configuradas en el equipo, y libera el email en el buzón y carpeta que tiene configurados.
El destinatario se conecta a un webmail determinado, que hace de MUA para leer sus emails.
Los MUA se conectan a MAA para leer los emails vía POP3 o IMAP, y estos MAA acceden a los datos que han liberado los MDA, por lo que puede leer el mail que he enviado.
Algo importante a tener en cuenta es que podemos ver las cabeceras del mensaje completas. Aparecerán unas cabeceras redundantes que tienen por nombre Received; estas cabeceras se agregan a cada paso por un MUA, MTA y MDA.
SPAM
Debido al funcionamiento del protocolo SMTP (MTA), los antiguos programas que solo comprobaban el remitente y el destinatario se veían en el problema de que esos datos podían ser falseados sin problemas.
Para solventarlo, se han desarrollado sistemas antispam y sistemas de seguridad de conexión que aseguran que estos problemas no sucedan. Aún así, hay una batalla entre desarrolladores de sistemas de correo para realizar sistemas cada vez más seguros, y spammers para el desarrollo de sistemas que sorteen esta seguridad. Por ello, el uso de filtros es cada vez más común en los MTA, MDA e incluso los MUA.
Conclusiones
El sistema de correo esta compuesto por muchos elementos. En la actualidad, se añadieron otros que originariamente no se incluían, con el propósito de agregar seguridad. Esto ha hecho que muchas empresas deleguen sus sistemas de correo a otras cuyo negocio es, precisamente, el sistema de correo como Google o Microsoft.
Entender el protocolo puede ayudarnos a elegir mejor cada uno de los elementos y saber cuando fallan, para así poder localizar el problema o canalizarlo por el canal adecuado.
Si tenés dudas, podés escribirnos a soporte@baehost.com
Hasta la próxima!!