ip_conntrack para manejo de ftp

Imagen de jcyepez

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

Imagen de iknaxio

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

El colocar el modprobe ya

Imagen de jcyepez

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