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:
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:
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.
Indicamos «Siempre configar en el certificado en futuras sesiones» y marcamos sobre OK
Al hacer esto ya podemos empezamos a trabajar:
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