Configurar el modo pasivo con Vsftpd

publicado por Carlos Torres el 29/01/2015 11:47

En el Modo pasivo de FTP, es el cliente quien establece la conexión al servidor a través del puerto TCP 21 y una vez establecida la conexión, el servidor abre un puerto aleatorio, por encima del 1024, al que se conectará posteriormente.

El Vsftpd permite permite activar el modo pasivo y establecer un rango de puertos aleatorios a ser usados con dicho modo.

Primero configuraremos en el fichero /etc/vsftpd/vsftpd.conf

#Bloque para el pasivo
pasv_enable=YES
pasv_min_port=10000
pasv_max_port=10100
pasv_addr_resolve=NO
pasv_address=X.X.X.X

La IP pasiva debe se la IP pública si se está usando un servidor con NAT en CentOS 6 (en algún caso he comprobado que hay que comentar esta línea, centOS 5).

Abrimos en este ejemplo el rango de puertos entre el 10000 y el 10100 (100 puertos). Ahora, lo que tenemos que hacer es aceptar ese rango en iptables para conexiones ya establecidas y relacionadas:

#FTP ACTIVO
$ iptables -I INPUT -p tcp --dport 21 -j ACCEPT
$ iptables -I INPUT -m state --state RELATED,ESTABLISHED -p tcp --dport 20 -j ACCEPT
#FTP PASIVO
$ iptables -I INPUT -m state --state ESTABLISHED,RELATED,NEW -p tcp --dport 10000:10100 -j ACCEPT

Además necesitamos cargar dos módulos de IPTABLES que sirven para seguir las conexiones FTP y llevar control sobre éstas. Son nf_conntrack_ftp e nf_nat_ftp, El primer es necesario siempre y el segundo se puede obviar si no se trabaja con NAT.

Se deben incluir en /etc/sysconf/iptables-config:

IPTABLES_MODULES="nf_conntrack_ftp nf_nat_ftp"

Comprobar si el módulo está cargado con:

$ lsmod | grep ip

Por supuesto, si el servidor está detrás de un firewall, éste deberá abrir los puertos comentados anteriormente.

AÑADIDO (25/3/2015):

Si tienes un kernel 2.6.19 or anterior, reeplaza nf_conntrack_ftp por ip_conntrack_ftp. Similarmente, reemplaza nf_nat_ftp por ip_nat_ftp.

$modprobe ip_conntrack_ftp
$modprobe ip_nat_ftp

Si queremos que sea persistente:

cd /etc/sysconfig/modules

Crear un fichero, por ejemplo ftp.modules

$cat ftp.modules

#!/bin/sh
MODULES="ip_conntrack_ftp ip_nat_ftp"
for i in $MODULES ; do
        modprobe $i >/dev/null 2>&1
done


Comentarios:

18/11/2015 08:19 por alumno ASIR
Buenísimo aporte, me viene genial para una práctica. :)

Añadir un comentario:

Nombre:

E-Mail:

Comentario: :

Enviar >>