Configurando un FTP pasivo

Parecía que no, pero al final ha vuelto a pasar … finales del 2013 y todavia seguimos utilizando protocolos inseguros para la transmisión de datos. Este caso ha sido curioso. Nadie ha tocado nada en años y, de repente ha dejado de funcionar.


El caso es que el bueno del servidor ftp estaba configurado para funcionar en modo activo y así había estado al menos durante los últimos 6 años, y nadie se había quejado hasta hace unos días. De repente algo debió de pasar en el universo y la gente que utilizaba clientes ftp en modo activo pasaron a pasivo y/o viceversa…porque sino no entiendo como han podido empezar a llegar incidencias.

Después de explicar unas cuantas veces la diferencia entre FTP activo y FTP pasivo y viendo que es como el que oye llover, al bueno de mi compañero se le ocurrió configurarlo en modo pasivo también, mientras que yo añadía las reglas en el firewall.

Para hacerlo (es un vsftpd sobre una CentOS)

xferlog_file=/var/log/vsftpd.log
local_enable=YES
pasv_address=xx.xx.xx.xx (la ip publica con la que publicas el ftp, esto es importante, sino los clientes se intentan conectar a la ip privada de la maquina)
local_umask=022
pam_service_name=vsftpd
userlist_enable=YES
userlist_file=/etc/vsftpd/user_list
chmod_enable=NO
#chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
write_enable=YES
dirlist_enable=YES
force_dot_files=NO
pasv_enable=YES
pasv_max_port=7000
pasv_min_port=6000
connect_from_port_20=YES
listen=YES
vsftpd_log_file=/var/log/vsftpd.log
xferlog_enable=YES
xferlog_std_format=YES
max_per_ip=5

Y luego añadimos las reglas en el firewall..

(abrimos 20 y 21)
-A PREROUTING -p tcp -m tcp -d xx.xx.xx.xx –dport 20:21 -j DNAT –to-destination yy.yy.yy.yy:20-21
(abrimos el rango que hemos definido en el ftp para la conexion pasiva)
-A PREROUTING -p tcp -m tcp -d xx.xx.xx.xx –dport 6000:7000 -j DNAT –to-destination yy.yy.yy.yy:6000-7000

(Conexiones de vuelta permitidas, esto no es lo seguro, habria que definir los puertos…se queda pendiente para la próxima)
-A POSTROUTING -p tcp -m tcp -s yy.yy.yy.yy -o eth4 -j SNAT –to-source xx.xx.xx.xx

xx.xx.xx.xx la ip publica
yy.yy.yy.yy la ip privada

Aplicamos… y listo. Ahora funciona para cualquier tipo de conexión.