Hola,
On Mon, 8 Nov 2004 14:17:44 +0100, Eloy Mier
Bueno, ten en cuenta que si el servidor atendiese toda tu petición por el puerto 21 no podria atender a nadie mas, pues a ese puerto no podria conectar.
No me gusta polemizar, pero creo que estás un poco equivocado. Intentaré ser lo más breve posible (me ahorraré detalles). El protocolo FTP es un poco singular porque utiliza dos canales de comunicación, uno para comandos y otro para datos. Cuando un usuario (cliente) se conecta al servidor FTP, lo hace por el canal de comandos (puerto 21 del servidor, puerto > 1024 en el cliente), puerto que se mantiene abierto durante toda la conexión. En el momento en el que el cliente solicita algún dato (ls, put, get, etc.) tienen que ponerse de acuerdo en el nuevo canal a utilizar, lo hacen por el canal de comandos obviamente, aquí existen dos métodos. 1.- Método tradicional (activo): El cliente elige un puerto libre > 1024 e informa al servidor de este puerto para que sea él quien conecte desde su puerto 20 al puerto del cliente que ya lo tiene preparado para recibir datos (OJO puerto e IP) 2.- Método moderno (pasivo): El cliente pide al servidor que elija un puerto y el servidor informa del puerto (> 1024) donde abrirá el canal de datos, ahora es el cliente el que abre un nuevo puerto (>1024) para establecer la conexión el puerto indicado por el servidor. Según usemos un método u otro tendremos que configurar el firewall para que deje pasar los dos canales. El canal de comandos es obvio, pero el de datos genera bastantes problemas. En el método tradicional nos encontramos con el problema del NAT. Si el cliente está conectandose a través de una pasarela NAT resulta que la información que da al servidor FTP es un puerto de una IP privada, con lo que el servidor no llegará a conectar nunca. Por otro lado, el firewall del cliente normalmente no debería aceptar conexiones nuevas desde el "exterior" al "interior". En el método pasivo el firewall tiene que permitir una nueva conexión dinámica desde un puerto alto a otro alto, pero esto permitiría cualquier tipo de tráfico sea FTP o no. Para evitar estos problemas el firewall (en el método 1 el firewall del cliente y en el método 2 el del servidor FTP) debe saber que estas nuevas conexiones están relacionadas con el canal de comandos y para ello linux tiene los módulos ip_conntrack, ip_conntrack_ftp e ip_nat_ftp e 'iptables' tiene la opción RELATED en sus reglas.