Vsftpd o demonio FTP muy seguro (por sus siglas en inglés: very secure FTP daemon), es un servidor FTP para sistemas basados en Unix, incluido Linux. El programa fue creado para tener una protección muy robusta contra las posibles vulnerabilidades de FTP y soporta IPv6 y SSL.
FTP es inherentemente inseguro. Si usted debe usar FTP, considere el uso de FTP sobre SSL/TLS. De otro modo, lo mejor es usar SFTP, una alternativa seguro de FTP.
Esta guía está escrita para un usuario no root. Los comandos que requieren privilegios elevados están precedidos por sudo
. Si usted inició sesión como usuario root obvie el uso del prefijo sudo
.
Puede instalar vsftpd rápidamente en su servidor virtual privado ejecutando el siguiente comando en su shell o terminal:
sudo apt-get install vsftpd
Una vez que el archivo termine de descargarse, tendrá VSFTP en su servidor. De forma general, vsftpd estará ya configurado con una cantidad razonable de seguridad. Sin embargo, provee acceso a usuarios anónimos en su VPS.
Una vez que vsftpd está instalado, puede ajustar la configuración.
Abra el archivo de configuración:
sudo nano /etc/vsftpd.conf
La modificación más relevante que debe hacer es cambiar el parámetro Anonymous_enable
de YES
a NO
:
anonymous_enable=NO
Antes de este cambio, vsftpd permitía que usuarios anónimos y no identificados accedieran a los archivos en su servidor. Esto es útil si usted está buscando distribuir su información ampliamente, pero se considera un riesgo serio de seguridad en la mayoría de los casos.
Después de eso, quite el comentario en la línea de la opción local_enable
cambiando el valor a YES
. Adicionalmente, permita que el usuario puede escribir en el directorio quitando el comentario (almohadilla o numeral #
) de la opcion write_enable
y dejándolo con el valor YES
:
local_enable=YES
write_enable=YES
Termine quitando el comentario en el parámetro chrootlocaluser
. Cuando esta línea se cambia a Yes
, todos los usuarios locales serán encerrados dentro de su propio chroot
y se negará el acceso a cualquier otra parte del servidor.
chrootlocaluser=YES
Guarde y salga del archivo.
Debido a una actualización reciente de vsftpd, este programa está "rechazando la ejecución con root escribible dentro del chroot". Una forma práctica de abordar este problema es siguiendo los próximos pasos:
Cree un nuevo directorio dentro del directorio home
del usuario:
mkdir /home/usuario/files
Recuerde remplazar usuario
por el nombre de usuario real.
Cambie el propietario del archivo a root:
chown root:root /home/usuario
Haga todos los cambios necesarios dentro del subdirectorio files
.
Finalmente, reinicie el servicio vsftpd:
sudo service vsftpd restart
Una vez que haya instalado y configurado el servidor a su gusto, puede acceder a éste.
Puede llegar a su servidor FTP desde su navegador ingresando ftp://
seguido del nombre de dominio (o dirección IP) en su barra de direcciones e iniciando sesión con las credenciales apropiadas. Tenga en mente que solo será capaz de acceder al directorio home
del usuario.
ftp://ejemplo.com
Otra alternativa es llegar al servidor FTP en la línea de comandos de su servidor virtual escribiendo:
ftp ejemplo.com
Cuando termine, simplemente utilice el comando exit
de FTP para salir del shell FTP.
A continuación un ejemplo de la interfaz mostrada en el navegador:
Si no puede acceder a su servidor a través de FTP puede que tenga reglas configuradas en su firewall que impiden el acceso.
Para que el servidor pueda transferir datos necesita un canal. El puerto 21 sirve para el establecimiento y control de la conexión FTP. El puerto 20 es el encargado propiamente de la transferencia de datos. Para habilitar la transferencia de datos en su herramienta favorita (software de su preferencia, línea de comandos o navegador), debe abrir dichos puertos y cargar un par de módulos para que las conexiones FTP no sean rechazadas. Siga los siguientes pasos sugeridos.
Cargue los siguientes módulos:
modprobe ipnatftp
modprobe ipconntrackftp
De forma muy general, el primer módulo modifica los paquetes para los computadores detrás de un firewall que ejecuta NAT y el segundo módulo permite que el firewall identifique los paquetes relacionados con ftp.
El siguiente paso es habilitar las conexiones entrantes y salientes en el puerto 21:
iptables -A INPUT -p tcp -m tcp --dport 21 -m conntrack --ctstate ESTABLISHED,NEW -j ACCEPT -m comment --comment "Permitir conexiones ftp en el puerto 21"
iptables -A OUTPUT -p tcp -m tcp --dport 21 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT -m comment --comment "Permitir conexiones ftp en el puerto 21"
Luego permita las conexiones entrantes y salientes en el puerto 20:
iptables -A INPUT -p tcp -m tcp --dport 20 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT -m comment --comment "Permitir conexiones ftp en el puerto 20"
iptables -A OUTPUT -p tcp -m tcp --dport 20 -m conntrack --ctstate ESTABLISHED -j ACCEPT -m comment --comment "Permitir conexiones ftp en el puerto 20"
Finalmente permita el tráfico de entrada pasiva FTP
iptables -A INPUT -p tcp -m tcp --sport 1024: --dport 1024: -m conntrack --ctstate ESTABLISHED -j ACCEPT -m comment --comment "Permitir conexiones entrantes pasivas"
iptables -A OUTPUT -p tcp -m tcp --sport 1024: --dport 1024: -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT -m comment --comment "Permitir conexiones entrantes pasivas"
Los pasos anteriores son sugerencias generales, sin embargo, hay otras maneras de lograr el mismo objetivo. Lo exhortamos a investigar acerca de la configuración de reglas de firewall a través de iptables
.