Configuración del firewall de Windows para admitir FTP pasivo

Ya de regreso por España aprovecho para comentar un truquillo que he aprendido estos días sobre como configurar el cortafuegos para que admita FTP pasivo. Resulta que en una máquina instalamos un servidor FTP, el cual admite los modos de trabajo Activo y Pasivo.

En el modo Activo los clientes se conectan al puerto 21 del servidor FTP usando un puerto cualquiera no privilegiado. Tras hacerlo el cliente se pone a escuchar peticiones a través del puerto inmediatamente superior al que ha usado para la conexión, recibiendo datos a través del puerto 20 del servidor  (es decir el 21 es un puerto para comandos y el 20 el puerto para datos). El problema de esto es que si el cliente se encuentra a su vez detrás de un cortafuegos la conexión no será posible y fallará.

En el modo Pasivo todas las conexiones son del cliente al servidor, por lo que no hay problemas con los cortafuegos en el lado cliente, y es el modo más habitual de funcionar.

Puedes econtrar todos los detalles en el artículo clásico sobre este tema de Slacksite.

El problema en el caso de las conexiones pasivas es que el cortafuegos en el servidor debe permitir conexiones externas a través de ciertos puertos a los que se pueden conectar los clientes.  Normalmente es muy fácil averiguar qué puertos utiliza tu servidor concreto mirando la configuración gráfica del mismo. En el caso del servidor FTP que viene con IIS en Windows Server, por ejemplo, el rango es muy amplio pues según he podido ver en la documentación, éste puede ser cualquier puerto libre comprendido entre el 1024 y el 65535. Si tienes que abrir todos esos puertos mejor desconecta el cortafuegos :-) Existe una forma de limitarlo y restringir el rango de puertos en el FTP de IIS. En este artículo de los blogs de MSDN se explica cómo conseguirlo en todas las versiones de IIS.

En nuestro caso el servidor era de otra casa (el de IIS es muy limitado), y nuestro rango de puertos que se podían utilizar para conexiones FTP pasivas era el comprendido entre los puertos 2048 y 2348.

vale. Abrir estos puertos TCP en el cortafuegos de Windows es muy sencillo, pero es que son más de 300 ¿voy a tener que hacerlo a mano?.

Pues por suerte no es necesario, nasta con que abras una línea de comandos y escribas lo siguente:

FOR /L %I IN (2048,1,2348) DO netsh firewall add portopening TCP %I "FTP pasivo "%I

¡Listo! Con esto conseguirás crear en un peqriquete todos los puertos abiertos que necesites. Sustituye los números después del IN (entre paréntesis) por el ranog de puertos que necesites en tu caso.

¿Y si me confundo y quiero eliminarlos?

Pues más o menos lo mismo. Sólo tendrías que hacer esto:

FOR /L %I IN (2048,1,2348) DO netsh firewall delete portopening TCP %I

Problema resuelto.

Espero que te sea de utilidad si se te da el caso.

Comparte este post:

Comentarios

# Iván González said:

Hola titán!

Una recomendación a partir de Windows Vista y Windows Server 2008 es usar "netsh advfirewall firewall add" en lugar de "netsh firewall add". Puedes verlo aquí: support.microsoft.com/.../947709

Todo esto es muy útil en Windows Server 2008 Core.

Wednesday, March 25, 2009 1:26 PM
# José M. Alarcón Aguín said:

Gracias por el apunte Iván.

A ver cuando quedamos!

Wednesday, March 25, 2009 2:24 PM
# Andy said:

En mi programa de FTP (filezilla) el modo activo es el que permite indicar un rango de puertos y el modo pasivo el que usa los puertos 20 y 21.

No obstante he probado con el rango de puertos sugerido para el modo "activo" y mapeando esos puertos en el firewall usando el bucle sugerido y no he conseguido que me funcione.

Sé que el "problema" lo tengo en el firewall del servidor pero antes con windows xp y el mismo cliente ftp me funcionaba sin tener que desactivar el firewall del servidor pero ahora con windows 6.1 (más conocido como seven) no me funciona.

Monday, October 19, 2009 9:15 AM
# Vicma28 said:

hola,

yo tenia un problema similar:

trabajo con IIS 7.0

y Filezilla como cliente.

para solucionarlo hice lo siguiente:

En exception del firewall agrege el puerto 20 y 21 y en el cliente de filezilla en la conexion ya configurada hay una pestana que se llama opciones de transferencia activa el modo activo y ya me puede conectar. espero y te sirva

Tuesday, October 20, 2009 9:38 PM
# Leandro said:

@Andy FTP pasivo no usa el puerto TCP 20, eso lo hace el FTP activo. Dejo un link a un post que escribí sobre el tema que quizá te sirva como aclaración:

www.netstorming.com.ar/.../ftp-activo-vs-pasivo

Sunday, January 10, 2010 10:20 PM
# SharkW said:

Hola a todos,

Recientemente mi servidor cambió el FTP del normal al FTPES-FTP Over Explicit TLS/SSL. Y para que funcione, solo FileZilla puede conectarse... pues bien, yo bajé Filezilla, y configuré todo según lo explicado por los del servidor, pero no he logrado conectarme.. los puertos del Router están todos abiertos... pero no es posible. En el log de FileZilla llega hasta aquí

"15:35:38 Trace: CControlSocket::ResetOperation(66)

15:35:38 Error: Could not connect to server"

No se que pueda ser, y la verdad ya me preocupa.

Si me pueden ayudar o colaborar de alguna forma se los agradezco.

S.O.: VISTA

Friday, March 12, 2010 9:39 PM