Servidor FTP, iptables y sucedáneos

Imagen de absoord
0 puntos

Muy buenas a todos.

Ante todo aclarar que el hecho de que escriba este post implica que he agotado todos los demás recursos: tropecientas webs, tutoriales, y sobre todo, no pregunto sin haberme comido bien el tarro... :-)

Mi problema es que estoy intentando montar un servidor FTP en ubuntu server 10.04 TLS, para lo cual he elegido proftpd. Lo he configurado, lo he adaptado a mis necesidades. Hasta ahí todo bien. Cuando conecto desde mi propia red (incluso usando la IP pública), no tengo problemas en subir/descargar cosas. El problema viene cuando alguien conecta a mi FTP desde una IP pública ajena a la red donde está el servidor. Pueden conectar, les reconoce login + contraseña, pero al elegir el método Pasivo (PASV), simplemente se queda colgado... y cae por timeout.

Sé que es un error común el tema de no abrir correctamente los puertos y he hecho todo lo que he encontrado por ahí para intentar subsanarlo, pero no hay manera. He abierto los puertos 20 y 21 en el router, he limitado los puertos pasivos de proftpd de 60000 a 65000, y mi iptables tiene esta pinta:

root@homeserv:/etc/init.d# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     tcp  --  anywhere             anywhere            tcp spt:ftp state ESTABLISHED
ACCEPT     tcp  --  anywhere             anywhere            tcp spt:ftp-data state RELATED,ESTABLISHED
ACCEPT     tcp  --  anywhere             anywhere            tcp spts:60000:65535 dpts:60000:65535 state RELATED,ESTABLISHED
LOG        all  --  anywhere             anywhere            LOG level warning

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
LOG        all  --  anywhere             anywhere            LOG level warning
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     tcp  --  homeserv             anywhere            tcp dpt:ftp

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ftp state NEW,ESTABLISHED
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ftp-data state ESTABLISHED
ACCEPT     tcp  --  anywhere             anywhere            tcp spts:60000:65535 dpts:60000:65535 state RELATED,ESTABLISHED

Incluso he abierto en el router los puertos 60000 a 65000, aunque en principio no hiciera falta.

He visto que es necesario incluso cargar los módulos de kernel ip_conntrack y ip_conntrack_ftp. Sin embargo, he visto que Ubuntu Server no activa dichos módulos con ese nombre, sino con nf_conntrack y nf_conntrack_ftp, me imagino que hacen referencia a lo mismo.

root@homeserv:/etc/init.d# lsmod | grep nf_conntrack
nf_conntrack_ftp        5381  1 nf_nat_ftp
nf_conntrack_ipv4      10346  10 iptable_nat,nf_nat
nf_conntrack           60943  6 nf_nat_ftp,xt_state,nf_conntrack_ftp,iptable_nat,nf_nat,nf_conntrack_ipv4
nf_defrag_ipv4          1073  1 nf_conntrack_ipv4

Aún con todo esto, usuario que intente conectar al FTP y especificar como método pasivo, conexión que se cuelga...

Os agradecería cualquier idea, porque llevo 2 días y la verdad es que una cosa que aparentemente es tan sencilla que se vuelve frustrante :-(

Mil gracias!

P.D.: Me faltó añadir, que el log del proftpd está limpio, no hay errores... de hecho, para comprobar que no fuese un fallo del programa, he probado con otros servidores FTP y ocurre exactamente lo mismo, de lo cual deduzco que el fallo no es del servidor FTP sino algo que se escapa en al configuración del servidor en sí.

Imagen de gernein
+1
0
-1

Intenta lo siguiente:
1) Especificarle a tu ProFTPd cuales seran los puertos para el modo pasivo:
PassivePorts start_port 60000 end_port 65000
2) Asegurate de que en tu iptables tengas incluida la regla para permitir estos puertos.
3) Por ultimo debes enseñarle al firewall permitir puertos en modo pasivo "RELATED" para tu FTP. En otras palabras, remover las opciones MasqueradeAddress y añadirle la sgte configuracion;

iptables -A FORWARD -i $INET -o $IDMZ -m state --state ESTABLISHED,RELATED -p tcp --sport $pti:$ptf --dport $pti:$ptf -j ACCEPT
iptables -A FORWARD -i $IDMZ -o $INET -m state --state ESTABLISHED,RELATED -p tcp --sport $pti:$ptf --dport $pti:$ptf -j ACCEPT

Espero te haya servidor.
Saludos

+1
0
-1