El puerto FTP principal es el 21, usado para el canal de control (comandos y respuestas entre cliente y servidor). El puerto 20 se usa para la transferencia de datos en modo activo. FTP (File Transfer Protocol) es el protocolo diseñado en 1971 para transferir archivos entre sistemas conectados a internet. En 2026, FTP puro en los puertos 20 y 21 transmite credenciales y datos en texto plano y no debe usarse en producción. Las alternativas seguras son SFTP (SSH File Transfer Protocol, puerto 22) y FTPS (FTP sobre TLS, puerto 990 para SSL implícito o 21 con STARTTLS). Esta guía cubre los puertos de todos los protocolos de transferencia de archivos, la arquitectura de doble canal de FTP, la diferencia entre modo activo y pasivo, y cómo configurar un servidor FTP seguro.
Los puertos de FTP y sus variantes: tabla de referencia completa
FTP y sus variantes usan puertos distintos según el protocolo y el modo de conexión. Esta tabla es la referencia completa para 2026:
| Protocolo | Puerto | Función | Cifrado | Recomendado |
|---|---|---|---|---|
| FTP control | 21 | Canal de control: comandos del cliente y respuestas del servidor | Ninguno — texto plano | No en producción |
| FTP datos (modo activo) | 20 | Canal de datos en modo activo: el servidor inicia la conexión al cliente | Ninguno — texto plano | No en producción |
| FTP datos (modo pasivo) | 1024-65535 (efímero) | Canal de datos en modo pasivo: el cliente inicia la conexión al servidor | Ninguno — texto plano | No en producción |
| FTPS implícito | 990 | FTP sobre TLS desde el primer byte (cifrado implícito) | TLS completo | Aceptable si no puedes usar SFTP |
| FTPS explícito (STARTTLS) | 21 | FTP con STARTTLS: empieza sin cifrar y actualiza a TLS | TLS negociado | Aceptable como alternativa |
| SFTP | 22 | Protocolo de transferencia de archivos sobre SSH (no es FTP sobre SSL) | Cifrado completo SSH | Sí, es el estándar recomendado |
| SCP | 22 | Copia segura de archivos sobre SSH | Cifrado completo SSH | Sí, para copias rápidas |
La arquitectura de doble canal de FTP: por qué existe y qué problemas crea
FTP es uno de los pocos protocolos de internet que usa dos conexiones TCP separadas para funcionar: un canal de control y un canal de datos. Esta arquitectura fue diseñada en 1971 cuando las redes eran lentas y poco fiables, y separar el control de los datos ofrecía ventajas de eficiencia. En 2026, esta arquitectura crea más problemas de los que resuelve, especialmente con firewalls y NAT.
El canal de control (puerto 21)
El canal de control se establece en el puerto 21 del servidor y permanece abierto durante toda la sesión FTP. Por este canal fluyen los comandos del cliente (LOGIN, LIST, RETR, STOR, etc.) y las respuestas del servidor (códigos de respuesta de 3 dígitos, similares a los códigos HTTP). Este canal por sí solo no transfiere ningún archivo: solo gestiona la sesión.
El canal de datos: activo vs pasivo
Para cada transferencia de archivos o listado de directorio, FTP establece una segunda conexión TCP separada: el canal de datos. El comportamiento de este canal es donde radica la principal diferencia entre el modo activo y el modo pasivo:
Modo activo (puerto 20): el servidor inicia la conexión de datos
En modo activo, el proceso de establecimiento del canal de datos es:
- El cliente le dice al servidor su dirección IP y el puerto donde está escuchando (con el comando PORT).
- El servidor inicia una conexión desde su puerto 20 hacia la IP y puerto indicados por el cliente.
- Se establece el canal de datos y comienza la transferencia.
El problema: el servidor inicia una conexión entrante hacia el cliente. Los firewalls modernos y el NAT de los routers domésticos bloquean por defecto las conexiones entrantes no solicitadas. El resultado es que el modo activo falla casi siempre cuando el cliente está detrás de un firewall o router NAT, que es la situación de prácticamente todos los usuarios en 2026.
Modo pasivo (PASV): el cliente inicia la conexión de datos
El modo pasivo fue diseñado precisamente para resolver el problema del modo activo con firewalls:
- El cliente solicita al servidor que entre en modo pasivo con el comando PASV (o EPSV para IPv6).
- El servidor elige un puerto aleatorio en el rango de puertos efímeros (normalmente 1024-65535, aunque el administrador puede configurar un rango más estrecho) y le comunica al cliente la IP y el puerto elegido.
- El cliente inicia una conexión desde su lado hacia ese puerto del servidor.
- Se establece el canal de datos y comienza la transferencia.
En modo pasivo, el cliente siempre inicia las conexiones (tanto la de control al puerto 21 como la de datos al puerto pasivo). Esto es compatible con firewalls y NAT porque las conexiones salientes del cliente siempre son permitidas. El servidor necesita tener abierto en el firewall el rango de puertos pasivos configurado.
| Aspecto | Modo activo | Modo pasivo (PASV) |
|---|---|---|
| Quién inicia la conexión de datos | El servidor: conecta desde el puerto 20 al cliente | El cliente: conecta a un puerto aleatorio del servidor |
| Puerto de datos en el servidor | Siempre el puerto 20 | Puerto aleatorio en el rango configurado (ej: 40000-50000) |
| Compatibilidad con firewalls del cliente | Mala: la conexión entrante del servidor es bloqueada | Buena: el cliente solo hace conexiones salientes |
| Puertos que debe abrir el servidor | Puerto 20 saliente | El rango de puertos pasivos configurado (ej: 40000-50000) |
| Recomendado en 2026 | No: incompatible con la mayoría de configuraciones de red modernas | Sí: funciona con firewalls y NAT |
Regla práctica: configura siempre tu cliente FTP en modo pasivo (PASV). Es la configuración por defecto en todos los clientes FTP modernos (FileZilla, WinSCP, Cyberduck) y funciona con prácticamente cualquier configuración de red del cliente. El modo activo solo tiene sentido en entornos de red controlados donde el cliente no tiene firewall ni NAT, lo que es muy infrecuente en 2026.
Por qué FTP puro es inseguro: lo que transmite en texto plano
FTP fue diseñado en 1971, cuando internet era una red experimental universitaria y la seguridad no era una preocupación. Transmite todo sin cifrado:
- Las credenciales de autenticación: tu nombre de usuario y contraseña viajan en texto plano en los comandos USER y PASS. Cualquier persona que capture el tráfico de red verá exactamente:
USER tuusuarioyPASS tucontrasena. - El contenido de todos los archivos transferidos: si subes o descargas un archivo de configuración con contraseñas de base de datos, esas contraseñas son visibles en el tráfico de red.
- Los listados de directorio: la estructura de tu servidor y los nombres de todos los archivos son visibles.
- Los comandos de gestión de archivos: renombrar, eliminar, crear directorios: todo es visible.
Usando la herramienta de captura de paquetes Wireshark en una red WiFi pública, capturar una sesión FTP completa (incluyendo credenciales y contenido de archivos) es trivial y no requiere ningún conocimiento técnico avanzado. En 2026, usar FTP puro en internet equivale a pegar tu contraseña en un papel y pegarlo en la ventana de una cafetería pública.
SFTP: por qué es la alternativa correcta y no "FTP seguro"
La confusión más frecuente en el mundo de la transferencia de archivos es pensar que SFTP es "FTP seguro" o "FTP sobre SSH". No lo es. SFTP (SSH File Transfer Protocol) es un protocolo completamente independiente que no tiene nada que ver con FTP desde el punto de vista técnico, excepto que cumple la misma función (gestionar y transferir archivos remotamente).
| Aspecto | FTP | SFTP |
|---|---|---|
| Origen | RFC 959, 1985 | Desarrollado como subsistema de OpenSSH, estandarizado como parte de SSH2 |
| Protocolo base | TCP directamente, sin cifrado | Protocolo independiente que se ejecuta sobre el canal SSH cifrado |
| Puertos | 21 (control) + 20 o efímeros (datos) | 22 (solo uno, el mismo que SSH) |
| Canales | Dos: control y datos (arquitectura compleja) | Uno: todo sobre el mismo canal SSH |
| Cifrado | Ninguno | Cifrado completo con los algoritmos de SSH (AES-256, ChaCha20) |
| Autenticación | Usuario y contraseña en texto plano | Usuario/contraseña cifrados o clave pública (más seguro) |
| Compatibilidad con firewalls | Compleja: requiere abrir múltiples puertos | Simple: solo necesita el puerto 22 |
| Operaciones disponibles | Transferencia básica de archivos | Transferencia + listado + renombrar + eliminar + permisos + links simbólicos |
| "Es FTP sobre SSL" | No aplica | No: SFTP no usa SSL/TLS ni tiene nada que ver con FTP técnicamente |
La razón por la que SFTP es la alternativa correcta a FTP en 2026 es la combinación de simplicidad y seguridad: usa exactamente el mismo puerto y la misma autenticación que SSH, así que si ya tienes SSH configurado en tu servidor, SFTP funciona automáticamente sin ninguna configuración adicional.
Configurar un servidor FTP seguro en Linux: vsftpd
Si necesitas mantener FTP por razones de compatibilidad con sistemas o clientes que no soportan SFTP, vsftpd (Very Secure FTP Daemon) es el servidor FTP más usado en servidores Linux en 2026, conocido por su seguridad y rendimiento.
Instalación de vsftpd en Ubuntu/Debian
# Instalar vsftpd:
sudo apt update
sudo apt install vsftpd -y
# Verificar que está funcionando:
sudo systemctl status vsftpd
# Hacer una copia de seguridad de la configuración original:
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bakConfiguración segura de vsftpd
# /etc/vsftpd.conf — configuración recomendada para producción:
# Configuración básica de seguridad:
anonymous_enable=NO # Desactivar acceso anónimo (crítico)
local_enable=YES # Permitir usuarios locales del sistema
write_enable=YES # Permitir escritura (subir archivos)
local_umask=022 # Permisos por defecto para archivos subidos
# Cifrado TLS (FTPS explícito en el puerto 21):
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES # Forzar TLS en el canal de datos
force_local_logins_ssl=YES # Forzar TLS en el canal de control (credenciales)
ssl_tlsv1=NO # Desactivar TLS 1.0 (obsoleto)
ssl_sslv2=NO # Desactivar SSL 2 (obsoleto)
ssl_sslv3=NO # Desactivar SSL 3 (obsoleto)
ssl_tlsv1_1=NO # Desactivar TLS 1.1 (obsoleto)
ssl_tlsv1_2=YES # Activar TLS 1.2
ssl_tlsv1_3=YES # Activar TLS 1.3 (si lo soporta la versión de vsftpd)
require_ssl_reuse=NO # Necesario para compatibilidad con FileZilla
# Rutas del certificado SSL (Let's Encrypt):
rsa_cert_file=/etc/letsencrypt/live/tudominio.com/fullchain.pem
rsa_private_key_file=/etc/letsencrypt/live/tudominio.com/privkey.pem
# Modo pasivo (necesario para clientes detrás de firewall/NAT):
pasv_enable=YES
pasv_min_port=40000 # Puerto mínimo del rango pasivo
pasv_max_port=50000 # Puerto máximo del rango pasivo
pasv_address=195.234.56.78 # IP pública del servidor (necesaria si hay NAT)
# Jaula chroot (limitar a los usuarios a su directorio home):
chroot_local_user=YES
allow_writeable_chroot=YES
chroot_list_enable=NO
# Mensajes de bienvenida:
ftpd_banner=Servidor FTP de sys4net. Acceso solo para usuarios autorizados.
# Registro de actividad:
xferlog_enable=YES
xferlog_std_format=YES
log_ftp_protocol=YES
# Aplicar los cambios:
sudo systemctl restart vsftpdCrear usuarios FTP con acceso limitado a su directorio
# Crear un usuario del sistema solo para FTP, sin acceso a shell:
sudo useradd -m -d /var/www/html/tudominio -s /sbin/nologin ftpusuario
sudo passwd ftpusuario
# Verificar que el directorio existe y tiene los permisos correctos:
sudo chown root:root /var/www/html/tudominio # El chroot root debe ser propiedad de root
sudo chmod 755 /var/www/html/tudominio
# Crear un subdirectorio donde el usuario sí puede escribir:
sudo mkdir /var/www/html/tudominio/archivos
sudo chown ftpusuario:ftpusuario /var/www/html/tudominio/archivos
sudo chmod 755 /var/www/html/tudominio/archivosAbrir los puertos de FTP en el firewall
# En Ubuntu/Debian con UFW:
# Puerto de control FTP:
sudo ufw allow 21/tcp
# Puerto FTPS implícito:
sudo ufw allow 990/tcp
# Rango de puertos pasivos configurado en vsftpd:
sudo ufw allow 40000:50000/tcp
# Verificar las reglas activas:
sudo ufw status
# En CentOS/AlmaLinux con firewalld:
sudo firewall-cmd --permanent --add-service=ftp
sudo firewall-cmd --permanent --add-port=40000-50000/tcp
sudo firewall-cmd --reload
sudo firewall-cmd --list-allConfigurar el módulo de seguimiento de conexiones FTP en el kernel
# En Linux, el módulo nf_conntrack_ftp del kernel ayuda a gestionar
# el seguimiento de las conexiones de datos FTP en el firewall:
# Cargar el módulo para la sesión actual:
sudo modprobe nf_conntrack_ftp
# Hacerlo persistente (cargar en cada arranque):
echo "nf_conntrack_ftp" | sudo tee -a /etc/modules-load.d/ftp.conf
# Verificar que está cargado:
lsmod | grep nf_conntrack_ftpConfigurar FTP en Plesk
En los servidores de sys4net con Plesk, el servidor FTP ya está preconfigurado y disponible para todos los dominios. No necesitas instalar ni configurar vsftpd manualmente. La gestión se realiza desde el panel de Plesk:
Crear un usuario FTP para un dominio en Plesk
- Accede a Plesk y ve a Websites y Dominios.
- Selecciona el dominio para el que quieres crear el acceso FTP.
- Haz clic en Acceso FTP.
- Haz clic en Añadir cuenta FTP.
- Introduce el nombre de usuario FTP y la contraseña.
- Selecciona el directorio de inicio (raíz del dominio por defecto).
- Haz clic en Aceptar.
Ver la configuración del servidor FTP en Plesk
En Plesk, el servidor FTP predeterminado es ProFTPD con soporte TLS. Los datos de conexión para cualquier dominio son:
| Campo | Valor |
|---|---|
| Servidor FTP | tudominio.com o la IP del servidor |
| Puerto | 21 (FTP con STARTTLS) o 990 (FTPS implícito) |
| Modo de cifrado | Requiere FTP explícito sobre TLS (STARTTLS) o FTP implícito (990) |
| Modo de transferencia | Pasivo (recomendado) |
| Usuario | El usuario FTP creado en Plesk |
| Contraseña | La contraseña del usuario FTP |
Diagnóstico de problemas de conexión FTP
El cliente FTP conecta pero no puede listar archivos o transferir
Este es el problema más frecuente con FTP. Si el canal de control (puerto 21) conecta pero las transferencias fallan, casi siempre es un problema del canal de datos:
# Síntoma en FileZilla:
# Estado: Conectado
# Comando: LIST
# Respuesta: 425 Could not open data connection to port XXXXX: Connection timed out
# o:
# Respuesta: 227 Entering Passive Mode (IP,PUERTO)
# Error: Could not connect to server
# Diagnóstico:
# 1. Verifica que el cliente está en modo pasivo (en FileZilla: Editar > Configuración > FTP > Modo de transferencia: Pasivo)
# 2. Verifica que el rango de puertos pasivos está abierto en el firewall del servidor:
sudo ufw status | grep "40000" # Debe mostrar el rango abierto
# 3. Verifica que vsftpd tiene configurado el pasv_address correctamente:
grep "pasv_address" /etc/vsftpd.conf
# Debe ser la IP pública del servidor, no la IP privada
# 4. Verifica desde otro servidor que el rango pasivo es accesible:
nc -zv 195.234.56.78 40000 # Prueba el primer puerto del rango
nc -zv 195.234.56.78 50000 # Prueba el último puerto del rangoError "530 Login incorrect" al conectar por FTP
# Verificar que el usuario existe en el sistema:
id ftpusuario
getent passwd ftpusuario
# Verificar que el usuario no está bloqueado:
sudo passwd -S ftpusuario
# El segundo campo debe ser "P" (password set), no "L" (locked)
# Verificar que el shell del usuario está permitido en /etc/shells:
cat /etc/shells
# Si el usuario tiene /sbin/nologin, vsftpd necesita que ese shell esté en /etc/shells:
echo "/sbin/nologin" | sudo tee -a /etc/shells
# Ver los logs de vsftpd para ver el error exacto:
sudo tail -50 /var/log/vsftpd.logEl certificado TLS de FTP genera error en el cliente
# Verificar el certificado TLS del servidor FTP:
openssl s_client -connect tudominio.com:21 -starttls ftp 2>/dev/null | openssl x509 -noout -dates -subject
# Para FTPS implícito (puerto 990):
openssl s_client -connect tudominio.com:990 2>/dev/null | openssl x509 -noout -dates -subject
# Si el certificado está caducado, renovarlo (en Plesk o con Certbot)
# y actualizar la ruta en vsftpd.confComparativa de clientes FTP/SFTP y sus configuraciones
Configuración de FileZilla para SFTP (recomendado)
# Configuración de FileZilla para SFTP con clave pública:
# Editar > Gestor de sitios > Nuevo sitio
# Protocolo: SFTP - SSH File Transfer Protocol
# Servidor: tudominio.com o IP del servidor
# Puerto: 22
# Modo de acceso: Archivo de claves
# Usuario: tu-usuario-ssh
# Archivo de claves: ruta a tu clave privada (~/.ssh/id_ed25519)
# Para autenticación por contraseña:
# Modo de acceso: Normal
# Usuario: tu-usuario-ssh
# Contraseña: tu-contraseña-sshConfiguración de FileZilla para FTPS (FTP sobre TLS)
# Configuración de FileZilla para FTPS explícito (puerto 21 con STARTTLS):
# Editar > Gestor de sitios > Nuevo sitio
# Protocolo: FTP - Protocolo de transferencia de archivos
# Servidor: tudominio.com
# Puerto: 21
# Cifrado: Requiere FTP explícito sobre TLS (STARTTLS)
# Modo de acceso: Normal
# Usuario: tu-usuario-ftp
# Contraseña: tu-contraseña-ftp
# Para FTPS implícito (puerto 990):
# Puerto: 990
# Cifrado: Requiere FTP implícito sobre TLSMigrar de FTP a SFTP: pasos prácticos
Si actualmente usas FTP puro y quieres migrar a SFTP, el proceso es más sencillo de lo que parece porque SFTP usa SSH, que probablemente ya está activo en tu servidor:
- Verifica que SSH está activo en el servidor:
sudo systemctl status sshd. Si está activo, SFTP ya funciona automáticamente. - Crea un usuario del sistema para el acceso SFTP (o usa el usuario existente):
sudo useradd -m -s /bin/bash sftpusuario - Configura la jaula chroot para SFTP en
/etc/ssh/sshd_configsi quieres limitar al usuario a su directorio:
# Añadir al final de /etc/ssh/sshd_config:
# Jaula chroot para usuarios del grupo sftponly:
Match Group sftponly
ChrootDirectory /var/www/html/%u
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
# Crear el grupo y añadir el usuario:
sudo groupadd sftponly
sudo usermod -aG sftponly sftpusuario
# Aplicar los cambios:
sudo sshd -t # Verificar configuración
sudo systemctl reload sshd
# 4. Prueba la conexión SFTP:
sftp sftpusuario@tudominio.com- Actualiza la configuración de tu cliente (FileZilla, WinSCP, etc.) para usar SFTP en el puerto 22 en lugar de FTP en el puerto 21.
- Verifica que el firewall tiene abierto el puerto 22:
sudo ufw allow 22/tcp(probablemente ya está abierto si accedes por SSH).
Seguridad adicional: limitar el acceso FTP por IP
# En vsftpd, limitar el acceso a IPs específicas mediante TCP Wrappers:
# En /etc/hosts.allow:
vsftpd: 195.234.56.78, 195.234.56.79 # Solo estas IPs pueden conectar por FTP
# En /etc/hosts.deny:
vsftpd: ALL # Denegar el resto
# Alternativa con el firewall UFW (más moderno):
# Permitir FTP solo desde una IP específica:
sudo ufw allow from 195.234.56.78 to any port 21
sudo ufw allow from 195.234.56.78 to any port 40000:50000
# Denegar FTP desde cualquier otra IP:
sudo ufw deny 21/tcp
sudo ufw deny 40000:50000/tcpPreguntas frecuentes sobre el puerto FTP
¿Por qué el cliente FTP puede conectarse pero no ver los archivos del directorio?
Si el cliente FTP conecta correctamente (el canal de control en el puerto 21 funciona) pero no puede listar el contenido del directorio ni transferir archivos, el problema casi siempre está en el canal de datos del modo pasivo. Las causas más frecuentes son: el rango de puertos pasivos no está abierto en el firewall del servidor, la opción pasv_address en vsftpd no tiene la IP pública correcta del servidor (especialmente en servidores detrás de NAT), o el cliente no está configurado en modo pasivo. Verifica los tres puntos en ese orden y el problema se resolverá en el 99% de los casos.
¿Cuál es la diferencia entre FTP, FTPS y SFTP?
FTP es el protocolo original de 1985 que transmite todo en texto plano: credenciales y datos sin ningún cifrado. FTPS es FTP con una capa de cifrado TLS añadida: usa los mismos puertos (21 para STARTTLS, 990 para SSL implícito) y la misma arquitectura de doble canal que FTP, pero el tráfico está cifrado. SFTP es un protocolo completamente diferente: no tiene ninguna relación técnica con FTP a pesar del nombre, se ejecuta sobre SSH en el puerto 22 y cifra todo el tráfico de forma nativa. En 2026, SFTP es la opción recomendada por su simplicidad (un solo puerto, usa la misma autenticación que SSH) y seguridad.
¿Puedo usar el mismo puerto 22 para SSH y SFTP simultáneamente?
Sí. SFTP es un subsistema de SSH que se ejecuta sobre el mismo canal SSH en el puerto 22. No hay conflicto ni necesidad de configuración adicional: cuando el servidor SSH acepta una conexión, detecta automáticamente si el cliente quiere una sesión de shell (SSH normal) o una sesión SFTP. El puerto 22 gestiona ambos tipos de conexión simultáneamente y de forma transparente. Si un usuario tiene permisos de SSH en el servidor, automáticamente tiene acceso SFTP en el mismo puerto.
¿Por qué el modo activo de FTP falla con firewalls modernos?
En modo activo, el servidor FTP inicia una conexión desde su puerto 20 hacia el cliente (el cliente le dice al servidor su IP y puerto con el comando PORT). Los firewalls modernos y el NAT de routers bloquean por defecto todas las conexiones entrantes no solicitadas. Desde el punto de vista del firewall del cliente, la conexión del servidor en el modo activo aparece como una conexión entrante no solicitada y la bloquea. El modo pasivo resuelve este problema porque es el cliente quien siempre inicia todas las conexiones, tanto la de control como la de datos, y las conexiones salientes están permitidas por los firewalls.
¿Cuántos puertos necesito abrir en el firewall para FTP pasivo?
Para FTP en modo pasivo necesitas abrir en el firewall del servidor: el puerto 21 (TCP) para el canal de control, y el rango de puertos pasivos que hayas configurado en vsftpd (por ejemplo, 40000-50000). No es necesario abrir el puerto 20 para el modo pasivo. Para FTPS implícito, también el puerto 990. El rango de puertos pasivos puede ser tan estrecho como necesites: si tu servidor no tiene mucho tráfico FTP concurrente, un rango de 100 puertos (40000-40100) es más que suficiente y minimiza la superficie de ataque.
¿Es seguro exponer el puerto FTP (21) a internet?
FTP puro (sin TLS) en el puerto 21 nunca es seguro en internet: las credenciales viajan en texto plano. FTPS (FTP con TLS) en el puerto 21 es aceptablemente seguro si se configura correctamente, pero es más complejo de gestionar que SFTP. Si necesitas exponer un servicio de transferencia de archivos a internet, la recomendación es usar SFTP en el puerto 22 (o en un puerto alternativo): una sola conexión cifrada, un solo puerto que gestionar, y la misma autenticación que SSH. Si por compatibilidad necesitas FTP, usa siempre FTPS con TLS obligatorio y un certificado SSL válido.