Si te has instalado un servidor FTP bajo Linux, y has configurado las iptables con política DROP, seguramente te has encontrado con un problema, cuando un cliente se conecta y entra en modo pasivo, no funciona ni "ls" ni "get" ni "put". Del mismo modo si utilizas un ordenador como firewall de tu red, te habrás encontrado con el problema del modo activo, cuando te conectas a un servidor FTP externo no puedes transferir datos... Seguidamente explico el porqué y como solucionarlo: Teoria activo/pasivoA grandes rasgos, cuando conectamos con un servidor FTP, se utilizan dos puertos: por defecto el 21 utilizado por la transferencia de comandos (control port), y el 20 (data port), que es por donde circulan los datos que pertenecen a los ficheros. En el modo activo, el cliente elige que puerto se utilizará por la transferencia de los archivos, entonces el servidor conecta al cliente desde el su puerto 20 hasta el X que permanece abierto en el cliente. En el modo pasivo es el servidor quien realiza la elección. El cliente con la palabra "PASV" pide al servidor este puerto, por donde serán enviados los datos relacionados con los archivos. Y es el cliente quien establece la conexió con el servidor. Modo Activo:CLIENTE [X] <---------- [20] SERVIDOR; X elegido por cliente Modo Pasivo:CLIENTE[20] ----------> [X] SERVIDOR; X elegido por servidor ¿Por que puede suponer esto un problema?
Si el cliente accede en modo activo, no hay problema, puesto que es el servidor quien crea la conexió. Pero el problema recae sobre nosotros cuando intentamos pasar a modo pasivo. El cliente es quien crea la conexió por el puerto que el servidor a elegido, pero como podemos suponer, todos los paquetes que llegan por un puerto diferente al 21, es rechazado por iptables.
En este caso, es el modo activo quien nos causa problemas a la hora de conectar como clientes a un servidor de fuera nuestra LAN. Pues es el servidor quien elige el puerto y establece conexió con el cliente, cuando el paquete llega al router, este lo echa directamente a la basura...
Solución
Aceptamos lass conexions de entrada que ya estan establecidas (ESTABLISHED) o relacionadas con alguna conexión (RELATED). Y las de salida nuevas (NEW), establecidas y relacionadas con alguna conexión. Con esto conseguimos que cuando se negocie el puerto para la transferencia de datos, como disponemos de la regla "RELATED", iptables aceptará las conexiones entrantes, ya que esta deriva de la primera conexión, la cua ha estado aceptada. Pero no acaba aqui la cosa, resulta que para poder utilizar la regla RELATED de iptables con ftp, necesitamos unos módulos. Tenemos que asegurarnos que los tenemos instalado y cargado.
|
|||||||||||
