Un servidor FTP seguro con vsftpd en Rocky Linux 8

Aprendemos a instalar y configurar un servidor FTP sobre Rocky Linux, con el servicio vsftpd. Aunque el protocolo FTP es inseguro, sobre todo si no se configura correctamente, es uno de los protocolos de transferencia de archivos más popular. Este funciona sobre la capa de aplicación y utiliza TCP. Con el producto del que hablamos hoy vamos a poder utilizar FTP de forma más segura.

El producto vsftpd, del inglés “Very Secure FTP Daemon”, esto es, el servicio seguro de FTP, se encarga de establecer una conexión segura con el servidor FTP mediante la creación de un túnel seguro que cifra los datos, tanto de ida como de vuelta. De esta manera lo pondremos más complicado a las miradas indiscretas y a los amigos de lo ajeno.

Para realizar esta entrada me he servido de un VPS en mi proveedor de confianza Clouding.io, ubicado en mi ciudad, Barcelona.

Vsftpd más al detalle

Se trata de un servidor FTP típico de sistemas UNIX y like-UNIX, como GNU/Linux. Por lo que también se puede encontrar en distribuciones como Solaris o HP-UX. Tiene una buena cantidad de opciones:

  • Grandes requisitos de seguridad
  • Límites de ancho de banda
  • Buena escalabilidad
  • La posibilidad de crear usuarios virtuales
  • Soporte IPnG
  • Rendimiento mejor que el promedio
  • La posibilidad de asignar IP virtaules
  • Alta velocidad

En este producto prima sobre todo la alta seguridad. Lo consigue, entre otras cosas, porque funciona en modo chroot, esto es, enjaula al usuario y a sus ficheros, para aislarlo del resto del sistema e impedirle poder acceder a programas y archivos fuera de este. Si el servidor FTP se ve comprometido, el atacante potencial estará aislado del resto del sistema.

Instalación vsftpd en Rocky Linux 8

Su instalación es muy sencilla, ya que los paquetes ya se encuentran disponibles en los repositorios principales:

dnf update
dnf install vsftpd

Para muestra un botón:

Muestra instalación vsftpd

Una vez hecho esto, encendemos el servicio y lo añadimos al arranque:

systemctl start vsftpd
systemctl enable vsftpd –now
systemctl status vsftpd

Con el resultado:

Comprobamos estado del servicio

Crear un usuario y directorio

Vamos a crear primero el usuario del servicio, y le asignamos un directorio de trabajo:

useradd -m -c "Usuario para vsftpd" -d "/home/ftpusuario" ftpusuario

Ahora creamos la carpeta para el servicio y le asignamos permisos:

mkdir -p /home/ftpusuario/carpeta_ftp
chmod -R 750 /home/ftpusuario/carpeta_ftp
chown ftpusuario: /home/ftpusuario/carpeta_ftp

Creamos una contraseña para el usuario:

passwd ftpusuario

Añadimos el usuario al fichero de usuario de usuarios del servicio:

echo ftpusuario >> /etc/vsftpd/user_list

Configuración de vsftpd

En el siguiente paso, vamos a realizar algunas configuraciones en el archivo de configuración de vsftpd, para permitir que los usuarios puedan acceder al servidor FTP. Para ello debemos abrir el fichero de configuración en «/etc/vsftpd/vsftpd.conf» y editarlo.

Primero, permitimos el acceso a los usuarios locales y luego bloqueamos a los usuarios anónimos:

anonymous_enable = NO
local_enable = YES

Otorgamos permisos al usuario para ejecutar algunos comandos de FTP, como descargar, cargar eliminar, además de agregar archivos:

write_enable = YES

Restringimos el acceso de los usuarios solo a su directorio de inicio:

chroot_local_user = YES

Otorgamos a los usuarios permiso de escritura en sus directorios de inicio:

allow_writeable_chroot=YES

Declaramos unos puertos personalizados para habilitar conexiones FTP pasivas:

pasv_min_port=31500
pasv_max_port=32500

Permitimos que solo los usuarios declarados en el archivo user_list accedan al servidor FTP y luego bloqueamos los anónimos:

userlist_file=/etc/vsftpd/user_list
userlist_deny=NO

Guardamos, salimos y reiniciamos el servicio:

systemctl restart vsftpd

Comprobamos que afectivamente el servicio está escuchando por el puerto 21:

COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
vsftpd  102905 root    3u  IPv6 264262      0t0  TCP *:ftp (LISTEN

Configuración de SSL/TLS en vsftpd

Por último, vamos a generar un archivo de certificado SSL y luego configurarlo en el servidor. De esto ya te hablé en una entrada, en ese caso de cómo habilitar HTTPS en un servidor web. Es una medida que nos permitirá garantizar la seguridad y el cifrado de la transferencia de archivos entre el servidor FTP y el sistema del usuario.

Solicitamos el certificado ejecutando el siguiente comando:

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

Aparecerán una serie de mensajes que debemos contestar, una vez finalizado ya tendremos nuestros certificados creados.

Una vez hecho esto, editamos el fichero de configuración, y añadimos:

rsa_cert_file=/etc/vsftpd/vsftpd.pem
rsa_private_key_file=/etc/vsftpd.pem
ssl_enable=YES

Al realizar los cambios, guardamos y salimos.

Reiniciamos el servicio:

systemctl restart vsftpd

Configurar el cortafuegos para vsftpd

Si tenemos configurado el cortafuegos, con firewalld, debemos habilitar los puertos correspondientes:

firewall-cmd --permanent --add-port=20-21/tcp
firewall-cmd --permanent --add-port=31500-32500/tcp

Y recargamos:

firewall-cmd --reload

Probando el acceso al servidor

Para realizar las pruebas de acceso al servidor FTP, voy a utilizar FileZilla, del que ya te hablé.

Lo primero que haremos es añadir la IP del servidor, el usuario y la contraseña. El puerto dejaremos el por defecto, que es el 21. Una vez echa la conexión, se nos informará de los datos de la conexión, sobre todo el tema de los certificados SSL.

Certificado del servidor FTP

Indicamos «Siempre configar en el certificado en futuras sesiones» y marcamos sobre OK

Al hacer esto ya podemos empezamos a trabajar:

Ejemplo trabajo de vsftpd con FileZilla

Y esto es todo. Espero que esta entrada os pueda servir de ayuda en algún momento.

Quizás os puedan interesar estas entradas relacionadas:

Montar un servidor FTP desde 0, con PROFTPD

Cómo instalar Proftpd con soporte MySQL

LFTP, transferencia de archivos desde la consola de comandos

Crear un servidor hosting seguro con Debian, LAMP y SFTP