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.