Comprobador del rango de puertos pasivos FTP
Comprueba que el rango de puertos del modo pasivo de tu servidor FTP está abierto y es accesible a través de los cortafuegos. Imprescindible para diagnosticar errores como "unable to open data connection".
¿Qué es el modo pasivo?
En el modo pasivo de FTP (PASV), el servidor abre un puerto aleatorio de numeración alta para la transferencia de datos y le indica al cliente a qué puerto conectarse. Si un cortafuegos bloquea esos puertos, las transferencias de archivos fallan aunque la conexión de control en el puerto 21 funcione perfectamente.
Rangos de puertos pasivos habituales
| Rango | Lo usa |
|---|---|
| 49152–65535 | Rango dinámico/efímero de la IANA (predeterminado en muchos servidores) |
| 40000–40100 | Rango personalizado habitual (cPanel, Plesk) |
| 30000–31000 | Rango personalizado habitual (predeterminado en FileZilla Server) |
Modo activo frente a modo pasivo
FTP usa dos conexiones: una conexión de control en el puerto 21 para los comandos y una conexión de datos aparte para cada transferencia de archivo y cada listado de directorio. El modo decide qué lado abre esa segunda conexión.
| Modo activo (PORT) | Modo pasivo (PASV) | |
|---|---|---|
| Quién abre la conexión de datos | El servidor, de vuelta hacia el cliente | El cliente, hacia el servidor |
| Qué envía el cliente | PORT (o EPRT) con su propia dirección y su propio puerto | PASV (o EPSV) |
| Qué tiene que ser accesible | Un puerto en el cliente, que los routers domésticos y los cortafuegos de empresa bloquean | El rango de puertos pasivos del servidor |
| Quién lo usa | El ftp.exe integrado en Windows, scripts antiguos | Casi todos los clientes modernos, de forma predeterminada |
El modo pasivo solo necesita conexiones salientes desde el cliente: por eso funciona detrás de NAT y por eso los clientes modernos lo usan de forma predeterminada. El trabajo pasa al servidor: su cortafuegos tiene que dejar entrar a los clientes en todo el rango pasivo, no solo en el puerto 21.
Cómo leer la respuesta 227
El servidor responde a PASV con seis números, por ejemplo 227 Entering Passive Mode (203,0,113,10,195,80). Los cuatro primeros son la dirección IP a la que conectarse. Los dos últimos dan el puerto: 195 x 256 + 80 = 50000. Dos cosas suelen salir mal:
- El puerto está fuera del rango que permite el cortafuegos. Ajusta el rango pasivo del servidor al rango que has abierto, o abre el rango que el servidor usa de verdad.
- La dirección es privada, por ejemplo 192.168.1.10, porque el servidor está detrás de NAT y anuncia su dirección interna. Los clientes se quedan colgados en cada listado de directorio. Indícale al servidor su dirección pública con los ajustes de abajo; algunos clientes esquivan el problema reutilizando la dirección del servidor, pero la solución está en el servidor.
Con EPSV, la respuesta es 229 Entering Extended Passive Mode (|||50000|): solo el puerto, sin dirección, así que el problema de la dirección privada desaparece. Aun así, el puerto tiene que estar abierto.
Cómo configurar el rango pasivo en los servidores más comunes
- vsftpd: en vsftpd.conf,
pasv_min_port=40000,pasv_max_port=40100ypasv_addresscon la IP pública cuando el servidor está detrás de NAT. - ProFTPD:
PassivePorts 40000 40100, másMasqueradeAddresspara la dirección pública. - Pure-FTPd:
PassivePortRange 40000 40100yForcePassiveIP. - FileZilla Server: sus ajustes del modo pasivo admiten un rango de puertos personalizado y la IP pública que debe anunciar.
- IIS: a nivel de servidor, en Compatibilidad con firewall de FTP (FTP Firewall Support), el intervalo de puertos del canal de datos y la dirección IP externa del firewall. Puede que tengas que reiniciar el servicio FTP para que el nuevo rango surta efecto.
Después abre ese mismo rango para TCP en todo lo que haya delante del servidor (el cortafuegos del sistema operativo, un grupo de seguridad en la nube, el reenvío de puertos del router) y comprueba algunos puertos del rango con la herramienta de arriba.
Cómo interpretar el resultado
Abierto significa que se aceptó una conexión TCP a ese puerto desde Internet, así que nada la bloquea por el camino. Sin respuesta suele significar que un cortafuegos descartó el intento sin avisar. Cerrado significa que algo respondió con un rechazo, a menudo el propio servidor, porque muchos servidores FTP solo escuchan en un puerto pasivo un momento después de que un cliente envíe PASV.
Por eso, en un servidor sin actividad, que haya puertos cerrados en el rango es normal; la verdadera señal de alarma es un rango entero sin respuesta. La prueba definitiva es un listado de directorio en modo pasivo desde un cliente real: si el inicio de sesión funciona y luego el listado se queda colgado, lo que está bloqueado es la conexión de datos. El comprobador de conexión FTP verifica la primera mitad: que el servidor responde y acepta tu inicio de sesión.