Cómo instalar un servidor FTP seguro con vsftpd en Debian 12
vSFTPd o Very Secure FTP Daemon es un software de servidor FTP gratuito y de código abierto. Es un demonio FTP para sistemas operativos tipo Unix y está licenciado bajo la Licencia Pública General de GNU. vSFTPd es uno de los demonios FTP más utilizados, es rápido y ligero en cuanto a recursos del sistema, seguro gracias a la integración de PAM y SSL, y estable. vSFTPd se ha ganado la confianza de grandes empresas como RedHat, SUSE, Debian, Gnome, KDE, etc. debido a su sofisticación.
vSFTPd puede funcionar con IPv6 y admite configuraciones de IP y usuarios virtuales. Puede ejecutarse como demonio independiente o a través de inetd. Para la gestión de usuarios, vSFTPd ofrece una función que permite a los usuarios establecer su propia configuración, como restricciones de IP por fuente, reconfigurabilidad y estrangulamiento del ancho de banda. Además, vSFTPd admite un módulo de autenticación plug-in (PAM) para usuarios virtuales y también proporciona integración de seguridad con SSL/TLS.
En este tutorial, aprenderás a configurar y crear un servidor FTP seguro con vsftpd en un servidor Debian 12. En esta guía también aprenderás a asegurar la instalación de tu servidor FTP mediante UFW (Uncomplicated Firewall) y a conectarte al servidor FTP utilizando el cliente FTP FileZilla.
Requisitos previos
Antes de continuar, asegúrate de que tienes lo siguiente:
- Un servidor Debian 12.
- Un usuario no root con privilegios de administrador sudo.
- El paquete openssl está instalado en tu servidor.
Instalación de vsftpd
El vsftpd es una implementación del protocolo FTP para sistemas operativos UNIX y Linux. El paquete vsftpd está disponible en la mayoría de las distribuciones de Linux, incluida Debian. Ahora instalarás vsftpd mediante APT y verificarás el servicio vsftpd para asegurarte de que se está ejecutando.
Antes de instalar el paquete vsftpd, ejecuta el siguiente comando para actualizar tu repositorio Debian.
sudo apt update
Ahora instala el paquete vsftpd utilizando el siguiente comando apt install.
sudo apt install vsftpd
Confirma la instalación escribiendo y y pulsa ENTER.
Una vez instalado vsftpd, el servicio vsftpd se ejecutará automáticamente y quedará habilitado. Verifica el servicio vsftpd utilizando el siguiente comando.
sudo systemctl is-enabled vsftpd sudo systemctl status vsftpd
La siguiente salida confirma que el servicio vsftpd se está ejecutando y está habilitado. Además, el servicio vsftpd se ejecutará automáticamente al arrancar el sistema.
Configurar vsftpd
En el siguiente paso, configurarás y crearás un servidor FTP seguro con vsftpd. Generarás certificados SSL/TLS y modificarás la configuración por defecto de vsftpd /etc/vsftpd.conf.
En primer lugar, ejecuta el siguiente comando openssl para generar nuevos certificados TLS que se utilizarán para la instalación de tu servidor vsftpd.
sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
Introduce tus datos cuando se te solicite. Una vez finalizado el proceso, tus certificados TLS estarán disponibles en /etc/ssl/private/vsftpd.pem.
Ahora ejecuta el siguiente comando para crear un nuevo archivo /etc/vsftpd.userlist para almacenar los usuarios FTP.
touch /etc/vsftpd.userlist
Después, ejecuta el siguiente comando para hacer una copia de seguridad de la configuración de vsftpd. A continuación, abre la configuración de vsftpd /etc/vsftpd.conf utilizando el editor nano.
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig sudo nano /etc/vsftpd.conf
Desactiva el acceso anónimo a tu servidor vsftpd cambiando la opción anonymous_enable a NO.
anonymous_enable=NO
Permite que los usuarios locales del archivo /etc/passwd y los usuarios PAM inicien sesión en el servidor vsftpd cambiando la opción local_enable a YES.
local_enable=YES
Permite a los usuarios FTP subir archivos al servidor vsftpd cambiando la opción write_enable a YES.
write_enable=YES
Ahora habilita chroot o jail para los usuarios FTP añadiendo las siguientes opciones. Esto encerrará al usuario FTP en el directorio /home/$USER/chroot. Por ejemplo, el usuario FTP bob quedará bloqueado en el directorio /home/bob/chroot.
chroot_local_user=YES user_sub_token=$USER local_root=/home/$USER/chroot
A continuación, añade la siguiente configuración para establecer usuarios virtuales vsftpd. Cualquier usuario dentro del archivo /etc/vsftpd.userlist podrá acceder al servidor vsftpd.
userlist_enable=YES userlist_file=/etc/vsftpd.userlist userlist_deny=NO
Añade las siguientes líneas para asegurar tu servidor vsftpd con certificados SSL/TLS. Esto forzará que el inicio de sesión del usuario y la conexión de transferencia de datos utilicen conexiones seguras.
rsa_cert_file=/etc/ssl/private/vsftpd.pem rsa_private_key_file=/etc/ssl/private/vsftpd.pem ssl_enable=YES force_local_data_ssl=YES force_local_logins_ssl=YES ssl_tlsv1=YES ssl_sslv2=NO ssl_sslv3=NO require_ssl_reuse=NO ssl_ciphers=HIGH
Ahora añade la siguiente configuración para establecer las conexiones en modo pasivo utilizando puertos entre 20000 y 25000.
pasv_min_port=20000 pasv_max_port=25000
Guarda y sal del archivo cuando hayas terminado.
Ahora ejecuta el siguiente comando systemctl para reiniciar el servicio vsftpd y aplicar los cambios que has realizado.
sudo systemctl restart vsftpd
Con esto, tu servidor vsftpd ya está funcionando con las nuevas configuraciones.
Configurar el cortafuegos
En el siguiente paso, instalarás UFW (Uncomplicated Firewall) en tu servidor Debian y asegurarás con él la instalación de tu servidor FTP. Instalarás UFW mediante APT, abrirás el puerto 20:21/tcp del servidor FTP y el puerto 20000:25000/tcp de conexión de datos en modo pasivo.
Instala UFW utilizando el siguiente comando apt. Escribe y para proceder a la instalación.
sudo apt install ufw
Una vez instalado UFW, ejecuta los siguientes comandos ufw para abrir el puerto para el servicio OpenSSH, los puertos 20:21 del servidor vsftpd y la conexión FTP de modo pasivo entre los puertos 20000 y 25000.
sudo ufw allow OpenSSH sudo ufw allow 20:21/tcp sudo ufw allow 20000:25000/tcp
A continuación, ejecuta el siguiente comando ufw para iniciar y habilitar la UFW.
sudo ufw enable
Escribe para confirmar y la UFW debería estar ejecutándose y habilitada en tu sistema Debian.
Comprueba el estado detallado de UFW utilizando el comando que aparece a continuación.
sudo ufw status
La salida activa confirma que UFW se está ejecutando y está habilitado. Además, se añade el servicio OpenSSH y algunos puertos para el servidor vsftpd 20:21/tcp y 20000:25000/tcp.
Configurar usuarios virtuales FTP
Llegados a este punto, ya has terminado la configuración del servidor vsftpd, ahora vas a crear un nuevo usuario FTP que se utilizará para iniciar sesión en el servidor FTP y cargar archivos en él.
Ejecuta el siguiente comando para crear un nuevo archivo /bin/ftponly. A continuación, hazlo ejecutable mediante el comando chmod que aparece a continuación. El archivo /bin/ftponly se utilizará como shell por defecto para los usuarios de FTP.
echo -e '#!/bin/sh\necho "Shell for FTP users only."' | sudo tee -a /bin/ftponly sudo chmod a+x /bin/ftponly
Añade el archivo /bin/ftponly a /etc/shells para asegurarte de que es un shell válido.
sudo echo "/bin/ftponly" >> /etc/shells
Ahora crea un nuevo usuario FTP bob y configura la contraseña ejecutando el siguiente comando. Introduce tu contraseña y repítelo.
sudo useradd -m -s /bin/ftponly bob sudo passwd bob
Después, ejecuta el siguiente comando para crear un nuevo directorio chroot /home/bob/chroot para el usuario bob. Además, te asegurarás de que el directorio chroot /home/bob/chroot tiene la propiedad adecuada.
sudo -u bob mkdir -p /home/bob/chroot sudo chown -R bob: /home/bob/chroot
A continuación, ejecuta el siguiente comando para crear otros directorios nuevos data y upload que se utilizarán para almacenar los datos del usuario FTP. Asegúrate de configurar correctamente la propiedad de esos directorios.
sudo -u bob mkdir -p /home/bob/chroot/{data,upload} sudo chown -R bob: /home/bob/chroot/{data,upload}
Ahora ejecuta el siguiente comando para cambiar el permiso del directorio /home/bob/chroot a 550 y de los directorios data y upload a 750.
sudo chmod 550 /home/bob/chroot sudo chmod 750 /home/bob/chroot/{data,upload}
Ahora que has creado un nuevo usuario, ejecuta el comando siguiente para añadir el usuario bob al archivo /etc/vsftpd.userlist.
echo "bob" >> /etc/vsftpd.userlist
Por último, ejecuta el siguiente comando para reiniciar el servicio vsftpd y aplicar los cambios. Tras ejecutar el comando, tu usuario FTP bob estará listo.
sudo systemctl restart vsftpd
Subir archivos al servidor FTP
Para verificar la instalación de tu servidor vsftpd, te conectarás al servidor FTP con el nuevo usuario que has creado mediante el software cliente FTP. A continuación, también subirás nuevos archivos para asegurarte de que la instalación se ha realizado correctamente.
Descarga e instala el cliente FTP para tu máquina local. Puedes utilizar FileZilla, que se puede instalar en Windows, Linux y MacOS. Una vez instalado FileZilla, ábrelo para conectarte a tu servidor FTP seguro.
Introduce la dirección IP de tu servidor FTP, y el nombre de usuario y la contraseña de tu usuario FTP. A continuación, haz clic en Conexión rápida para confirmar.
Selecciona la opción Confiar siempre en este certificado en futuras sesiones y haz clic en Aceptar para confirmar.
Una vez conectado a tu servidor FTP, deberías ver dos directorios de datos y de subida disponibles en tu servidor FTP. Puedes subir archivos a ambos directorios datos y subir, pero no puedes subir archivos fuera de esos directorios protegidos mediante chroot.
Puedes arrastrar y soltar tus archivos para subirlos al servidor FTP.
Conclusión
Para terminar, has creado con éxito un servidor FTP seguro con vsftpd en un servidor Debian 12. También has asegurado la instalación de tu servidor FTP mediante UFW (Uncomplicated Firewall) y has aprendido a crear usuarios FTP. Ahora puedes utilizar el servidor FTP como la principal transferencia de datos entre tu máquina local y tu servidor, También puedes encontrar otro software cliente FTP con tus preferencias.