Tema:
Hola a todos
Bueno, hoy en la mañana se me presentó un problema con las conexiones FTP. El panorama era el siguiente:
Utilizo un script de iptables que tiene como reglas por default el dropear todo, así:
[quote]iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P OUTPUR DROP[/quote]
Luego debo entonces abrir los puertos que necesito para poder comunicarme con el mundo.
Surgió la necesidad de abrir el ftp para que la gente pueda entrar a una página a descargar cierta información, entonces a abrir los puertos para el ftp. Hasta ahí el razonamiento iva muy bien, agregué la siguiente línea a mi script.
[quote]iptables -A FORWARD -s 192.168.0.0/24 -p tcp --dport 20:21 -j ACCEPT[/quote]
y verifiqué la existencia de esta:
[quote]iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT[/quote]
Eché a correr el script y muy contento procedí a realizar las pruebas del caso. Para mi sorpresa la cosa no anduvo. Habilité y deshabilité el modo pasivo y otras cosas con el cliente ftp pero nada que funcionaba. Solo lograba conectarme si daba un forward total a mi ip.
Revisando los logs del iptables, me di cuenta que siempre se dropeaban las conexiones a los puertos que no estaban especificados en el script. Googleando encontré que el problma se debía a que por default (o al menos en algunas distros funciona así) no se cargan ciertos módulos del kernel.
Estos módulos son el ip_conntrack, ip_conntrack_ftp y el ip_nat_ftp
Específicamente leí que el ip_conntrack era el módulo que se encargaba de chequear si ya existen conexiones existentes y entonces permitir la nueva conexión si se requiere. Así al hacer ftp, el puerto 21 se considera una conexión existente (ya que está declarado en mi script directamente) y una vez verificado la existencia de dicha conexión, iptables permite que se abra la nueva que requiere el ftp en cualquier puerto.
Para cargar los módulos lo hice con el comano modprobe ip_xxxxxx
Espero les sirva a alguien
Saludos
Juan Yépez
Comentarios
Pero modprobe
Pero modprobe te tocaria ejecutarlo cada vez que reinicies la máquina o en el mejor de los casos colocarlo en rc.local
Una solución más óptima seria modificar el archivo /etc/sysconfig/iptables-config ( al menos en Centos esa es la ruta)
IPTABLES_MODULES="ip_conntrack ip_conntrack_ftp ip_nat_ftp"
Por otro lado sabes que este es un problema común, hace un par de semanas nuestro ISP migró un equipo y se olvidaron de esto y como nosotros hacemos uso del FTP nos afectó porque se podian conectar a nuestro servidor FTP desde las sucursales pero al ejecutar un get, put o ls saltaba un error "Illegal PORT command", como ya me había pasado esto les pude indicar que era lo que les faltaba.
Hasta cuando seremos los pacíficos dueños de tanto absurdo.
"Transporta un puñado de tierra todos los días y construirás una montaña" - Confucio
floss.iknaxio.net
si man tambien me funciono al final me cargo los modulos
Flushing firewall rules: [ OK ]
Setting chains to policy ACCEPT: mangle filter nat [ OK ]
Unloading iptables modules: [ OK ]
Applying iptables firewall rules: [ OK ]
Loading additional iptables modules: ip_conntrack ip_conntrack_ftp ip_nat_ftp [ OK ]
eso me dice cuando reinicio iptables.
Gracias por el
Gracias por el tip.
Saludos
Juan Yépez
093681879
Saludos
Juan Yépez
0993681879
Dj - Discomovil Quito
El colocar el modprobe ya
El colocar el modprobe ya depende de cada persona como lo requiera hacer, lo único que quise explicar con este artículo era el por qué del problema. Yo lo que hice fue colocar el modprobe en el rc.local y crear un script para cuando me toca reiniciar el servicio por algún motivo (claro que es muy rara vez que debo hacerlo pero se debe prevenir).
Saludos
Juan Yépez
093681879
Saludos
Juan Yépez
0993681879
Dj - Discomovil Quito