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".

Rangos predefinidos:

¿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.

La conexión de control en el puerto 21 atraviesa el cortafuegos, pero la segunda conexión de datos al puerto 50000 queda bloqueada; la respuesta 227 del servidor codifica el puerto como 195 x 256 + 80
No es la conexión de control la que falla, y la respuesta 227 te dice qué puerto abrir.

Rangos de puertos pasivos habituales

Rango Lo usa
49152–65535Rango dinámico/efímero de la IANA (predeterminado en muchos servidores)
40000–40100Rango personalizado habitual (cPanel, Plesk)
30000–31000Rango 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 datosEl servidor, de vuelta hacia el clienteEl cliente, hacia el servidor
Qué envía el clientePORT (o EPRT) con su propia dirección y su propio puertoPASV (o EPSV)
Qué tiene que ser accesibleUn puerto en el cliente, que los routers domésticos y los cortafuegos de empresa bloqueanEl rango de puertos pasivos del servidor
Quién lo usaEl ftp.exe integrado en Windows, scripts antiguosCasi 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=40100 y pasv_address con la IP pública cuando el servidor está detrás de NAT.
  • ProFTPD: PassivePorts 40000 40100, más MasqueradeAddress para la dirección pública.
  • Pure-FTPd: PassivePortRange 40000 40100 y ForcePassiveIP.
  • 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.