Cómo configurar un servidor FTP con vSFTPd y TLS en Ubuntu 22.04

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 tiene licencia pública general de GNU. vSFTPd es uno de los demonios FTP más utilizados, es rápido y ligero en recursos del sistema, seguro gracias a la integración de PAM y SSL, y estable. vSFTPd se ha ganado la confianza por su madurez, siendo utilizado por grandes empresas como RedHat, SUSE, Debian, Gnome, KDE, etc.

vSFTPd puede ejecutarse con IPv6, y también admite la configuración de IP virtual y usuarios virtuales. Puede ejecutarse como demonio independiente o utilizando la operación inetd. En cuanto a la gestión de usuarios, vSFTPd ofrece una función que permite al usuario tener su propia configuración, como límites y reconfiguración por IP de origen, y también estrangulamiento del ancho de banda. También admite un módulo de autenticación enchufable (PAM) para los usuarios virtuales, y también proporciona integración de seguridad con SSL/TLS.

En este tutorial, te mostraré cómo configurar un servidor FTP con VSFTPD (Very Secure FTP Daemon) en el servidor Ubuntu 22.04. Este post incluye cómo asegurar el vSFTPd con certificados TLS/SSL.

Requisitos previos

Antes de empezar con esta guía, debes tener los siguientes requisitos

  • Un servidor Ubuntu 22.04.
  • Un usuario no root con privilegios de root/administrador.
  • Un cliente FTP instalado en la máquina local.

Instalación del paquete vSFTPd

El repositorio por defecto de Ubuntu proporciona varios demonio FTP, incluyendo el paquete vSFTPd. Esto facilita al administrador la instalación y configuración de un servidor FTP sin necesidad de ningún repositorio adicional o de terceros.

El primer paso aquí es instalar el vSFTPd en el servidor de Ubuntu. Pero antes de instalar el paquete, deberás actualizar y refrescar el índice de paquetes de tu sistema. Escribe el siguiente comando para actualizar y refrescar el repositorio de Ubuntu.

sudo apt update

Ahora instala el paquete vSFTPd con el siguiente comando. Introduce Y para confirmar la instalación y pulsa ENTER para continuar. Y comenzará la instalación de vSFTPd.

sudo apt install vsftpd

instalar vsftpd

Una vez finalizada la instalación de vSFTPd, ejecuta el siguiente comando para comprobar y verificar el servicio vSFTPd. Deberías ver que el servicio vSFTPd está«habilitado«, lo que significa que se ejecutará automáticamente al iniciar el sistema. Además, el estado actual del servicio vSFTPd es de ejecución.

sudo systemctl is-enabled vsftpd
sudo systemctl status vsftpd

iniciar vsftpd

Configurar el servidor VSFTPD

En esta sección, generarás los certificados SSL/TLS para habilitar vSFTPd sobre TLS. A continuación, empezarás a editar el archivo de configuración de vSFTPd «/etc/vsftpd.conf» para crear un servidor FTP seguro.

Ejecuta el siguiente comando openssl para generar el certificado SSL/TLS autofirmado para el servidor vSFTPd. Este comando te pedirá información sobre el certificado, asegúrate de introducir la información detallada. El certificado se almacenará en«/etc/ssl/private/vsftpd.pem«.

sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem

generar ssl autofirmado

A continuación, haz una copia de seguridad de la configuración por defecto de vsFTPd antes de editar el archivo mediante el siguiente comando.

sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig

Una vez copiado el archivo original, abre el archivo de configuración de vSFTPd «/etc/vsftpd.conf » utilizando el siguiente comando.

sudo nano /etc/vsftpd.conf

Asegúrate de que la opción «anonymous_enable» está ajustada a«NO» para desactivar el acceso anónimo al servidor FTP.

anonymous_enable=NO

Descomenta la opción » local_enable» para permitir que los usuarios accedan e inicien sesión en el servidor FTP. Esta opción debe estar activada cuando necesites configurar usuarios virtuales, lo que permitirá que una cuenta de usuario normal en el archivo /etc/passwd pueda iniciar sesión en el servidor FTP.

local_enable=YES

Descomenta la opción «write_enable» para permitir que los usuarios puedan escribir y subir archivos al servidor FTP.

write_enable=YES

Descomenta la opción «chroot_local_users» para habilitar la cárcel para cada usuario de FTP. Esto añadirá más seguridad a tu servidor FTP, ya que cada usuario FTP se situará automáticamente en su directorio de origen tras iniciar la sesión. Y un usuario no podrá acceder, ver o listar los archivos que pertenecen a otro usuario.

chroot_local_users=YES

Añade la siguiente configuración para habilitar usuarios virtuales en el servidor vSFTPd. La variable«$USER» se tomará de la variable de entorno del sistema, por lo que cada usuario FTP tendrá su propio directorio raíz y se situará automáticamente en el directorio«/home/nombredeusuario/chroot» tras iniciar la sesión.

user_sub_token=$USER
local_root=/home/$USER/chroot

Añade la siguiente configuración para establecer el puerto de alcance para la conexión de datos PASV del servidor vSFTPd.

pasv_min_port=40000
pasv_max_port=50000

Ahora añade la siguiente configuración para habilitar los usuarios virtuales en el servidor vSFTPd. Sólo los usuarios del archivo«/etc/vsftpd.userlist » podrán acceder al servidor FTP.

userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO

Cambia la configuración SSL/TLS por defecto del vSFTPd utilizando la configuración que aparece a continuación. Esto obligará a los usuarios de FTP a utilizar una conexión TLS segura tanto en el inicio de sesión como en la transferencia de datos, utilizando también sólo el TLSv1.

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

Guarda y cierra el archivo cuando hayas terminado.

A continuación, crea un nuevo archivo para la lista de usuarios de FTP utilizando el siguiente comando. Este archivo es necesario para definir los usuarios FTP.

touch /etc/vsftpd.userlist

Por último, ejecuta el siguiente comando para reiniciar el servicio vSFTPd y aplicar los nuevos cambios. A continuación, comprueba y verifica el servicio vSFTPd. Y deberías ver que el servicio vSFTPd se está ejecutando con una nueva configuración y con SSL/TLS activado encima.

sudo systemctl restart vsftpd
sudo systemctl status vsftpd

configurar vsftpd

Configurar el cortafuegos UFW

Una vez configurado el servidor vSFTPd, es el momento de añadir las reglas del cortafuegos UFW para tu servidor FTP. Debes añadir los puertos TCP de FTP «20» y «21» al cortafuegos, también el rango de puertos de conexión de datos PASV que has configurado es«40000:50000«.

Antes de añadir cualquier regla del cortafuegos, asegúrate de que el cortafuegos de UFW está activado. Puedes comprobar el estado del cortafuegos UFW utilizando el siguiente comando. Si obtienes la lista de reglas habilitadas, entonces tu cortafuegos está activo.

sudo ufw status

Si obtienes un mensaje de salida como«inactivo«, entonces tienes que habilitar el cortafuegos UFW utilizando el siguiente comando. Tendrás que añadir la regla de la aplicación«OpenSSH» y luego habilitar el cortafuegos UFW.

sudo ufw allow "OpenSSH"
sudo ufw enable

Ahora añade los puertos de servicio vSFTPd«20:21» y«40000:50000» utilizando el comando ufw que aparece a continuación.

sudo ufw allow 20:21/tcp
sudo ufw allow 40000:50000/tcp

Ejecuta el siguiente comando para recargar y verificar el estado del cortafuegos UFW. Y deberías obtener el puerto «20:21» y «40000:50000» añadidos al cortafuegos UFW.

sudo ufw reload
sudo ufw status

configurar ufw firewall

Añadir el usuario FTP

Llegados a este punto, has completado la configuración de un servidor FTP seguro utilizando vSFTPd con SSL/TLS activado y has asegurado tu sistema utilizando el cortafuegos UFW. Es el momento de configurar y crear un usuario FTP, que es una cuenta de usuario de Linux.

Si configuras un usuario FTP con el shell«/bin/false» o«/usr/sbin/nologin«, tu usuario FTP no podrá acceder al servidor FTP. Esto se debe a que el servicio vSFTPd utiliza el servicio PAM por defecto y los usuarios FTP necesitan un shell válido.

Así que ahora ejecuta el siguiente comando para crear un shell ficticio para los usuarios de FTP«/bin/ftpdummy«.

echo -e '#!/bin/sh\necho "Shell for FTP users only."' | sudo tee -a  /bin/ftpdummy
sudo chmod a+x /bin/ftpdummy

Añade el nuevo shell «/bin/ftpdummy» al archivo de configuración «/etc/shells». Y ahora estás preparado para crear nuevos usuarios FTP.

sudo echo "/bin/ftpdummy" >> /etc/shells

configuración dummyshell

En esta demostración, utilizaremos el usuario con el nombre«alice» como usuario FTP. Ahora ejecuta el siguiente comando para crear un nuevo usuario llamado«alice» y con el shell por defecto «/bin/ftpdummy». A continuación, configura la contraseña del nuevo usuario, asegúrate de utilizar una contraseña fuerte.

sudo useradd -m -s /bin/ftpdummy alice
sudo passwd alice

crear un nuevo usuario

A continuación, crea un nuevo directorio«chroot» bajo el directorio principal del usuario utilizando el siguiente comando. Cuando el usuario «alice» se conecte al servidor FTP, el directorio «chroot» será el directorio principal por defecto.

mkdir -p /home/alice/chroot

Bajo el directorio «chroot«, crea otro directorio llamado «data» y «upload». Ambos directorios se utilizarán para que los usuarios de FTP suban sus archivos.

mkdir -p /home/alice/chroot/{data,upload}

Ahora ejecuta el siguiente comando para cambiar el permiso y la propiedad correctos del directorio de datos del FTP. El directorio«chroot» debe tener el permiso«550«, pero los directorios«data» y«upload» deben tener el permiso«750» para que el usuario pueda escribir/subir archivos en él.

sudo chown -R alice: /home/alice/chroot
sudo chmod 550 /home/alice/chroot
sudo chown -R alice: /home/alice/chroot/{data,upload}
sudo chmod 750 /home/alice/chroot/{data,upload}

A continuación, añade el usuario«alice» al archivo de la lista de usuarios de vSFTPd «/etc/vsftpd.userlist» mediante el siguiente comando. A continuación, puedes reiniciar el servicio vSFTPd para aplicar los nuevos cambios. Tu nuevo usuario FTP está listo.

echo "alice" >> /etc/vsftpd.userlist
sudo systemctl restart vsftpd

configurar el directorio chroot y de datos

Conectarse al servidor FTP

Has completado la instalación y configuración del Servidor FTP utilizando el vSFTPd en el servidor Ubuntu. Ahora vamos a comprobar y verificar entrando en el Servidor FTP.

Asegúrate de que tienes instalada la aplicación Cliente FTP en tu máquina local. En esta demostración, utilizaremos «FileZilla», un cliente FTP gratuito y de código abierto que se puede instalar en Linux, Windows y macOS.

Abre tu software de cliente FTP e introduce los datos de la dirección host/IP, el nombre de usuario y la contraseña de tu servidor FTP. A continuación, haz clic en el botón«Conexión rápida«.

Ahora se te pedirá que aceptes el certificado autofirmado del servidor FTP. Selecciona la opción«Confiar... » y haz clic en «Aceptar«.

certificados de confianza

Después de conectarte, entrarás en el directorio principal de la cárcel chroot y tendrás dos directorios«data» y«upload«. No podrás subir archivos al directorio de la jaula chroot, pero podrás subir archivos a los directorios«data» y«upload».

pruebas de carga de archivos

¡Enhorabuena! A partir de este post, has creado con éxito el servidor FTP con vSFTPD en el servidor Ubuntu 22.04.

También te podría gustar...