Un desarrollador pasó horas depurando por qué su aplicación no podía enviar email. El código era correcto. Las credenciales eran válidas. El servicio de email estaba funcionando. ¿El problema? Intentaba conectarse por el puerto 25, que su proveedor de nube bloqueaba por defecto. Cambiar al puerto 587 lo arregló todo al instante.
Email usa puertos diferentes para fines distintos, y las diferencias importan más de lo que crees. Usar el puerto equivocado puede significar conexiones bloqueadas, vulnerabilidades de seguridad o fallos de entrega. Entender qué puerto usar en cada caso ahorra tiempo de depuración y mejora tu infraestructura de email.
Puerto 25: el puerto SMTP original
El puerto 25 es el puerto SMTP tradicional, definido en la especificación original del protocolo. Se usa para la transferencia de email de servidor a servidor—cuando un servidor de correo entrega email a otro.
Cuando tu servidor de correo necesita entregar un email a gmail.com, se conecta a los servidores de Gmail en el puerto 25. Así es como el email ha fluido entre servidores desde los inicios del correo en internet.
Sin embargo, el puerto 25 tiene problemas para el uso moderno. Fue diseñado antes de que el spam fuera una gran preocupación, y se ha abusado mucho de él. Muchos ISP y proveedores de nube bloquean las conexiones salientes al puerto 25 desde sus redes para evitar que máquinas comprometidas envíen spam directamente.
Si ejecutas un servidor de correo que necesita recibir email de otros servidores, debes aceptar conexiones en el puerto 25. Es donde se conectarán otros servidores. Pero para enviar email desde aplicaciones, el puerto 25 suele ser la opción incorrecta—es probable que esté bloqueado y, incluso si no lo está, no requiere autenticación por defecto.
Puerto 587: el puerto de envío (submission)
El puerto 587 es el puerto designado para el envío de email—cuando un cliente de correo o una aplicación envía un mensaje a un servidor de correo para su entrega. Se diseñó específicamente para separar el envío de clientes de la transferencia entre servidores.
A diferencia del puerto 25, el 587 requiere autenticación. No puedes simplemente conectarte y enviar; debes probar que estás autorizado. Esto dificulta mucho el abuso por parte de spammers y es mucho más seguro para usos legítimos.
El puerto 587 usa STARTTLS para el cifrado. La conexión empieza sin cifrar y luego se actualiza a TLS tras el handshake inicial. A esto se le llama "TLS explícito" o "TLS oportunista". Los servidores modernos exigen la actualización; la fase sin cifrar es solo por compatibilidad con el flujo del protocolo.
Para aplicaciones que envían email a través de un servicio de email o un relay SMTP, el puerto 587 suele ser la opción correcta. Está diseñado para este propósito, requiere autenticación, admite cifrado y normalmente no está bloqueado por los proveedores de red.
Puerto 465: TLS implícito
El puerto 465 tiene una historia complicada. Se asignó brevemente para SMTPS (SMTP sobre SSL) en los años 90, luego se desaprobó, y recientemente se reestandarizó para envío con "TLS implícito".
Con TLS implícito, la conexión está cifrada desde el primer byte. No hay un handshake sin cifrar seguido de una actualización—te conectas con TLS de inmediato. Esto es, en teoría, más seguro que STARTTLS, que tiene una breve ventana sin cifrar que podría explotarse.
Los servicios de email modernos admiten cada vez más el puerto 465 para envío. Si tu proveedor de email lo ofrece, y tu cliente o librería lo soporta, el puerto 465 es una opción sólida. El cifrado inmediato proporciona una seguridad ligeramente mejor que el enfoque STARTTLS del puerto 587.
La confusión histórica en torno al puerto 465 hace que alguna documentación antigua diga evitarlo. Ese consejo está desactualizado. El puerto se ha reestandarizado y ahora es una opción legítima y recomendada para el envío de email.
Puerto 2525: la alternativa
El puerto 2525 no es un estándar oficial—es una convención que surgió porque los puertos 25, 465 y 587 a veces están bloqueados o restringidos.
Algunos ISP bloquean el puerto 25 para prevenir el spam. Algunos firewalls corporativos restringen los puertos de email. Algunos proveedores de nube limitan qué puertos puedes usar. Cuando los puertos estándar no funcionan, el 2525 a menudo sí.
Los servicios de email suelen ofrecer el puerto 2525 como puerto de envío alternativo. Funciona exactamente igual que el 587—mismo protocolo, misma autenticación, el mismo cifrado STARTTLS—solo que con un número de puerto distinto.
Si tienes problemas para conectarte en los puertos estándar, prueba el 2525. Está ampliamente soportado por los servicios de email y rara vez está bloqueado. No es "mejor" que 587 o 465; es solo una vía de escape cuando esos no funcionan.
Elegir el puerto correcto
Para distintos escenarios, tienen sentido distintos puertos.
Para envío de email de aplicaciones (enviando a través de un servicio de email), usa el puerto 587 o 465. Ambos requieren autenticación y admiten cifrado. El puerto 587 con STARTTLS es el más universalmente soportado. El puerto 465 con TLS implícito es ligeramente más seguro. Si ambos están bloqueados, prueba 2525.
Para transferencia de servidor a servidor (si ejecutas tu propio servidor de correo), necesitas aceptar conexiones en el puerto 25. Otros servidores se conectarán ahí para entregarte email. También podrías enviar por el puerto 25 a otros servidores, aunque muchos servidores de correo ahora prefieren conexiones cifradas.
Para recibir email en tu propio servidor, escucha en el puerto 25 para conexiones entrantes de servidor a servidor. También puedes escuchar en 587 y/o 465 para envío autenticado desde tus propios usuarios y aplicaciones.
Nunca uses el puerto 25 para envío no autenticado desde aplicaciones. Incluso si funciona, es un riesgo de seguridad y probablemente cause problemas de entregabilidad.
Consideraciones de seguridad
La elección del puerto afecta a la seguridad de varias maneras.
Los requisitos de autenticación difieren según el puerto. Tradicionalmente, el puerto 25 no requiere autenticación (aunque los servidores modernos a menudo sí). Los puertos 587 y 465 requieren autenticación por diseño. Usa siempre puertos autenticados para el envío.
Los enfoques de cifrado varían. El puerto 587 usa STARTTLS (actualización a cifrado). El puerto 465 usa TLS implícito (cifrado desde el inicio). El puerto 25 puede soportar STARTTLS pero no lo exige. Por seguridad, usa siempre puertos que impongan cifrado.
La exposición de red importa. Si ejecutas un servidor de correo, el puerto 25 debe estar abierto a internet para recibir email. Los puertos 587 y 465 pueden restringirse a clientes conocidos o VPN si no necesitas acceso público para envío.
Las reglas de firewall deben reflejar estas diferencias. Permite el puerto 25 entrante para recibir email. Permite los puertos 587/465 para envío, quizá con restricciones adicionales. Bloquea el puerto 25 saliente en sistemas que no deberían enviar email directamente.
Problemas comunes con los puertos
Surgen varios problemas comunes alrededor de los puertos de email.
Los puertos bloqueados son el problema más frecuente. Los proveedores de nube a menudo bloquean el puerto 25 por defecto. Las redes corporativas pueden restringir los puertos de email. Los ISP a veces bloquean conexiones residenciales para enviar email. Cuando las conexiones fallan, prueba puertos alternativos.
Usar el puerto equivocado para el propósito causa confusión. Intentar enviar (submit) email en el puerto 25 puede funcionar pero carece de la autenticación adecuada. Intentar recibir email de servidor a servidor en el puerto 587 no funcionará—otros servidores esperan el puerto 25.
Los desajustes de configuración TLS ocurren cuando el cliente espera un modo de cifrado y el servidor ofrece otro. El puerto 587 espera STARTTLS; el puerto 465 espera TLS inmediato. Usar el modo equivocado para el puerto provoca fallos de conexión.
Reglas de firewall demasiado restrictivas bloquean email legítimo. Demasiado permisivas, y te expones a abusos. Lograr el equilibrio correcto requiere entender qué puertos cumplen qué propósitos.
Probar la conectividad de puertos
Antes de depurar problemas complejos de email, verifica la conectividad básica de los puertos.
Telnet o netcat pueden probar si un puerto es alcanzable. "telnet mail.example.com 587" intenta una conexión. Si conecta, el puerto está abierto. Si expira o se rechaza, algo lo está bloqueando.
OpenSSL puede probar conexiones cifradas. "openssl s_client -connect mail.example.com:465" prueba TLS implícito. "openssl s_client -starttls smtp -connect mail.example.com:587" prueba STARTTLS.
Las herramientas en línea pueden probar desde fuera de tu red. Si las conexiones funcionan desde herramientas externas pero no desde tu aplicación, probablemente el problema sean las restricciones salientes de tu red.
La documentación del servicio de email especifica qué puertos soportan y recomiendan. Revisa su documentación en lugar de adivinar—cada servicio tiene configuraciones distintas.
Frequently asked questions
¿Qué puerto debo usar para enviar email desde mi aplicación?
El puerto 587 con STARTTLS es la opción con mayor soporte. El puerto 465 con TLS implícito también es buena opción si tu servicio de email lo admite. Si ambos están bloqueados, prueba el puerto 2525.
¿Por qué el puerto 25 está bloqueado en mi servidor en la nube?
Los proveedores de nube bloquean el puerto 25 por defecto para prevenir el spam. Los servidores comprometidos suelen intentar enviar spam directamente. Normalmente puedes solicitar acceso al puerto 25 si tienes una necesidad legítima, pero para el email de aplicaciones usa el puerto 587.
¿Es seguro usar el puerto 465?
Sí. A pesar de su historia complicada, el puerto 465 está ahora reestandarizado para envío con TLS implícito. Es, probablemente, más seguro que el puerto 587 porque el cifrado empieza de inmediato en lugar de después de una actualización STARTTLS.
¿Necesito abrir varios puertos para email?
Depende de tu configuración. Para recibir email en tu propio servidor, necesitas tener abierto el puerto 25. Para envío, puedes ofrecer 587 y/o 465. Para enviar a través de un servicio de email, solo necesitas acceso saliente a sus puertos.