SMTP

SMTP (Simple Mail Transfer Protocol) o Protocolo Simple de Transferencia de Correo es el protocolo estándar de red de la capa de aplicación utilizado en Internet para el envío, transmisión y reenvío de correos electrónicos entre servidores de correo y sistemas de transferencia.

Opera habitualmente sobre el puerto estándar 25 para conexiones no cifradas o entre servidores, y utiliza los puertos seguros 465 (SMTPS) o 587 (STARTTLS) para la autenticación y el envío cifrado de mensajes desde los clientes de correo (como Outlook, Thunderbird o aplicaciones web) hacia el servidor saliente.

¿Cómo funciona el protocolo SMTP?

El funcionamiento de SMTP se basa en una arquitectura de comandos y respuestas de texto plano basada en sesiones TCP entre un Agente de Transferencia de Correo (MTA) de origen y uno de destino:

  • Establecimiento de sesión (HELO / EHLO): El cliente o servidor de origen se conecta al servidor SMTP de destino e inicia la comunicación identificándose mediante los comandos *HELO* o *EHLO*.
  • Transmisión de sobres (MAIL FROM / RCPT TO): Se especifica la dirección de correo electrónico del remitente (MAIL FROM) y los destinatarios previstos (RCPT TO) para validar la ruta de entrega.
  • Envío de datos (DATA): Mediante el comando *DATA*, se transfiere el contenido completo del mensaje, incluyendo las cabeceras (Asunto, De, Para) y el cuerpo del correo, finalizando el bloque con un punto solitario en una línea (.).

Comandos SMTP esenciales y códigos de respuesta

Comando SMTP Descripción de la Operación Código de Respuesta Típico
EHLO / HELO Inicia la sesión SMTP y saluda al servidor remoto anunciando las capacidades del cliente. 250 (OK / Aceptado)
MAIL FROM Define la dirección de correo electrónico del remitente original del mensaje. 250 (Remitente aceptado)
RCPT TO Especifica la dirección de correo del destinatario al que va dirigido el mensaje. 250 (Destinatario válido)
DATA Indica al servidor que a continuación se transmitirán las cabeceras y el cuerpo del mensaje. 354 (Iniciar entrada de datos)

Características principales:

  • Es un protocolo de envío y reenvío (push); está diseñado estrictamente para entregar el correo desde el remitente hasta el servidor de buzón final, pero no se emplea para que los usuarios lean o descarguen sus correos (para eso se utilizan protocolos de lectura como IMAP o POP3).
  • En su diseño original e histórico no contemplaba ningún sistema de cifrado ni autenticación de usuarios, lo que facilitaba enormemente el envío de correos falsificados (suplantación de identidad o *spoofing*).
  • Para solucionar las deficiencias de seguridad originales, hoy en día se apoya en mecanismos modernos de cifrado TLS (mediante STARTTLS) y protocolos de validación de dominios como SPF, DKIM y DMARC.
  • Muchos proveedores de servicios de Internet (ISPs) y redes corporativas bloquean por defecto el tráfico saliente en el puerto 25 para evitar que ordenadores infectados por *malware* envíen spam masivo de forma descontrolada.
  • Se integra estrechamente con sistemas de gestión de correo avanzados (como Postfix o Exim) en entornos de servidores Linux.

Analogía: Imagina el servicio postal tradicional o un servicio de mensajería urgente. Tú escribes una carta, pones el remite y la dirección de destino en el sobre, y la depositas en el buzón de salida o se la entregas al cartero (el cliente SMTP). El cartero y las agencias de transporte postales (los servidores SMTP intermedios) se encargan de clasificar, sellar y trasladar físicamente la carta de una oficina postal a otra hasta introducirla en el buzón físico del destinatario final.

Actividad práctica

Objetivo:

Simular una sesión de comunicación interactiva con un servidor SMTP utilizando comandos de texto plano mediante una conexión de red con Netcat.

Tareas:

  1. Abre tu terminal de comandos en Linux y comprueba si dispones de la utilidad de red Netcat instalada.
  2. Establece una conexión de prueba interactiva mediante TCP con un servidor de correo SMTP en el puerto estándar ejecutando:
    nc mail.ejemplo.com 25
  3. Saluda al servidor introduciendo el comando de inicialización de sesión extendido:
    EHLO miequipo.local
  4. Define el remitente y el destinatario de la prueba escribiendo los comandos:
    MAIL FROM:<remitente@ejemplo.com>
    RCPT TO:<destinatario@ejemplo.com>
  5. Introduce el comando DATA, redacta un asunto y un cuerpo de mensaje corto, y finaliza la transmisión escribiendo un punto solitario . en una línea nueva.

Preguntas de reflexión:

  1. ¿Qué diferencia conceptual clave existe entre el protocolo SMTP y los protocolos de lectura de correo como IMAP o POP3?
  2. ¿Por qué el diseño original del protocolo SMTP carecía de medidas de seguridad y cómo se ha solucionado este problema en la actualidad?
  3. ¿Qué función desempeñan los registros DNS auxiliares como SPF, DKIM y DMARC a la hora de proteger la autenticidad de los correos enviados por SMTP?
  4. ¿Por qué razón los proveedores de internet (ISPs) suelen bloquear o restringir el tráfico saliente en el puerto 25 en las redes domésticas?
  5. ¿Qué significa un código de respuesta SMTP que comienza por el dígito 5xx (por ejemplo, *550 Relaying Denied*) en comparación con un código que comienza por 2xx?
Haz clic aquí para ver las soluciones y explicaciones

1. ¿Qué diferencia conceptual clave existe entre el protocolo SMTP y los protocolos de lectura de correo como IMAP o POP3?

El protocolo SMTP (*Simple Mail Transfer Protocol*) está diseñado exclusivamente para el envío y transporte de correos electrónicos entre servidores y clientes de salida. Por el contrario, los protocolos IMAP y POP3 se utilizan exclusivamente para la recepción, descarga y gestión de los mensajes almacenados en los buzones del servidor de correo por parte de los clientes finales.


2. ¿Por qué el diseño original del protocolo SMTP carecía de medidas de seguridad y cómo se ha solucionado este problema en la actualidad?

El protocolo SMTP fue diseñado en una época temprana de Internet basada en la confianza mutua entre redes académicas, por lo que transmitía los datos y las credenciales en texto plano sin cifrar. En la actualidad, este problema se ha solucionado incorporando extensiones como STARTTLS para cifrar las comunicaciones en tránsito, y obligando al uso de autenticación previa (SASL) antes de permitir el reenvío de correos.


3. ¿Qué función desempeñan los registros DNS auxiliares como SPF, DKIM y DMARC a la hora de proteger la autenticidad de los correos enviados por SMTP?

SPF permite definir qué servidores están autorizados a enviar correo en nombre de un dominio; DKIM añade una firma criptográfica para verificar que el mensaje no ha sido alterado en el trayecto; y DMARC utiliza los dos anteriores para establecer políticas claras sobre cómo debe actuar el servidor receptor ante correos sospechosos o fraudulentos (phishing y suplantación de identidad).


4. ¿Por qué razón los proveedores de internet (ISPs) suelen bloquear o restringir el tráfico saliente en el puerto 25 en las redes domésticas?

Para evitar que ordenadores o dispositivos domésticos infectados con malware (*bots*) envíen correo basura (*spam*) masivo de forma directa a Internet sin pasar por los servidores de correo legítimos del proveedor.


5. ¿Qué significa un código de respuesta SMTP que comienza por el dígito 5xx (por ejemplo, *550 Relaying Denied*) en comparación con un código que comienza por 2xx?

Un código que comienza por 2xx indica una respuesta positiva de éxito (la orden se ha completado correctamente, como un correo enviado con éxito). Por el contrario, un código que comienza por 5xx indica un error permanente o denegación definitiva (la transacción no se puede realizar porque el buzón no existe o las políticas de seguridad rechazan el mensaje).