Cómo configurar VSFTPD FTPS con SSL / TLS en Ubuntu 18.04

FTP, el acrónimo de File Transfer Protocol, se utiliza para transferir archivos entre la computadora y el servidor en una red informática determinada. El protocolo FTP utiliza una forma insegura de transferencia de datos y debe limitarse a la red en la que confía. En su lugar, deberíamos tener FTPS (Protocolo de transferencia de archivos con SSL) que use una conexión segura SSL entre los dos extremos o use SFTP (Protocolo de transferencia de archivos SSH / Protocolo de transferencia segura de archivos).

Este tutorial proporciona pasos detallados sobre cómo configurar un servidor vsftpd seguro con SSL / TLS en Ubuntu 18.04 y conectarse al servidor usando una terminal y herramientas GUI.

Instalar el servidor VSFTPD

Hay varios servidores FTP disponibles en Linux. Vamos a instalar vsftp. Para hacer eso en Ubuntu 18.04, escribimos el siguiente comando en la terminal:

sudo apt install vsftpd

Una vez que el vsftpd está instalado, su archivo de configuración predeterminado se encuentra en /etc/vsftpd.conf. Para realizar cambios con ese archivo y probar configuraciones personalizadas, primero creamos una copia de seguridad de este archivo. Para hacerlo, puede ejecutar:

sudo mv /etc/vsftpd.conf /etc/vsftpd.conf.bak

Luego creamos el archivo vsftpd.conf con el siguiente comando:

sudo vim /etc/vsftpd.conf

y agregue las siguientes líneas al archivo: vsftpsft

 listen=NO
 listen_ipv6=YES
 anonymous_enable=NO
 local_enable=YES
 write_enable=YES
 local_umask=022
 dirmessage_enable=YES
 use_localtime=YES
 xferlog_enable=YES
 connect_from_port_20=YES
 chroot_local_user=YES
 secure_chroot_dir=/var/run/vsftpd/empty
 pam_service_name=vsftpd
 pasv_enable=Yes
 pasv_min_port=10000
 pasv_max_port=11000
 user_sub_token=$USER
 local_root=/home/$USER/ftp
 userlist_enable=YES
 userlist_file=/etc/vsftpd.userlist
 userlist_deny=NO

Tenga en cuenta que estas son las configuraciones más comunes y puede cambiarlas según sus necesidades.

Ubuntu 18.04 viene con ufw (firewall sin complicaciones) preinstalado y habilitado. Puede verificar si ufw se está ejecutando en su máquina con este comando:

sudo service ufw status

Si se está ejecutando y va a dejarlo en ejecución, debe permitir el tráfico entrante para los puertos FTP (20, 21 para conexiones activas y 10000-10100 para las pasivas). Para hacerlo, puede ejecutar:

sudo ufw allow from any to any port 20,21,10000:11000 proto tcp

Si tiene éxito, la salida será como la siguiente:

Rules updated
Rules updated (v6)

Una vez realizados todos estos pasos, debemos reiniciar el servidor vsftpd con el siguiente comando:

sudo service vsftpd restart

Creando usuario para conectarse al servidor FTP

Una vez que el servidor vsftp está instalado y configurado de acuerdo con nuestras necesidades, no necesitamos crear un usuario (por ejemplo, ftpsuer) para conectarse al servidor ftp. Para hacerlo, puede ejecutar:

sudo useradd -m ftpuser

Cree una contraseña para el usuario recién creado con el siguiente comando:

sudo passwd ftpuser

Después, se le pedirá que ingrese una nueva contraseña de UNIX y vuelva a escribirla para que se apliquen los cambios. El resultado exitoso se ve así:

passwd: password updated successfully

Preparar el directorio de usuarios de FTP

Una de las acciones más importantes que se deben realizar para proteger la conexión FTP es restringir a los usuarios a su directorio personal para que no tengan acceso a otros directorios. Para hacerlo en vsftpd necesitamos habilitar chroot en el archivo de configuración, lo cual ya hicimos en la parte de configuraciones del artículo (chroot_local_user=YES). La forma de seguridad del directorio de vsftpd asume que el usuario no tiene acceso de escritura. Pero si estamos dando acceso FTP a usuarios existentes y ellos están usando shell para usar el servidor, es posible que necesiten tener acceso de escritura a su carpeta de inicio. Para evitar la falta de seguridad y también tener el acceso FTP adecuado para el usuario, creamos una carpeta ftp en el directorio de inicio del usuario y la agregamos a la configuración de vsftpd como raíz local cuando se conecta a través de FTP. También necesitamos cambiar la propiedad del directorio y eliminar el acceso de escritura. Para hacerlo, puede ejecutar:

sudo mkdir /home/ftpuser/ftp
sudo chown nobody:nogroup /home/ftpuser/ftp
sudo chmod a-w /home/ftpuser/ftp

luego agregue / cambie las siguientes líneas en el archivo de configuración vsftpd /etc/vsftpd.conf

user_sub_token=$USER 
local_root=/home/$USER/ftp

Una vez realizados estos pasos, debemos crear otra carpeta en /home/ftpuser/ftp y cede su propiedad al usuario

sudo mkdir /home/ftpuser/ftp/files
sudo chown ftpuser:ftpuser/home/ftpuser/ftp/files

Para probar que podemos ver archivos en el directorio de inicio del usuario después de conectarnos al servidor FTP, crearemos un archivo de prueba en ese directorio y agregaremos algo de texto en él. Para hacerlo, puede ejecutar:

echo "test file for vsftpd" | sudo tee /home/ftpuser/ftp/files/test.txt

Para permitir o denegar el acceso de usuarios específicos a vsftpd, podemos usar el archivo de lista de usuarios y agregar el registro apropiado en el archivo de configuración de vsftpd. Para hacerlo, puede ejecutar lo siguiente:

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

Si userlist_deny se establece en NO, solo los usuarios agregados al archivo pueden acceder al servidor FTP y si se establece en YES, los usuarios enumerados en el archivo no tendrán acceso al servidor FTP y otros tendrán acceso. Agregue nombres de usuario al archivo mencionado anteriormente con el siguiente comando:

echo "ftpuser" | sudo tee -a /etc/vsftpd.userlist

Configurar SSL para VSFTPD

Dado que los datos (incluso las credenciales) transferidos a través de FTP no están encriptados, podemos habilitar TLS / SSL para proporcionar otro nivel de seguridad a nuestro servidor FTP. Para crear un certificado usando openssl, ejecute lo siguiente:

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

donde -days 365 es para agregar el certificado durante un año y agregar el mismo valor para los indicadores -out, -keyout para ubicar la clave privada y el certificado en el mismo archivo. Se le pedirá que agregue toda la información necesaria para crear el certificado, como se muestra a continuación

Generating a 2048 bit RSA private key
.................+++
..............................................................................................+++
writing new private key to '/etc/ssl/private/vsftpd.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:AU
State or Province Name (full name) [Some-State]:SY
Locality Name (eg, city) []:Sydney
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Linoxide
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:ubuntu
Email Address []:[email protected]

Una vez creado el certificado, debemos agregarlo al archivo de configuración vsftpd y habilitar SSL. Para hacerlo, agregue la siguiente línea al archivo mencionado:

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

Después, debemos denegar las conexiones anónimas a través de SSL y requerir SSL para la transferencia de datos y el inicio de sesión. Para hacerlo, agregue las siguientes líneas a /etc/vsftpd.conf Archivo:

 allow_anon_ssl=NO
 force_local_data_ssl=YES
 force_local_logins_ssl=YES

Una vez agregadas las líneas anteriores, configuraremos el servidor para usar TLS, que es el sucesor preferido de SSL. Para hacerlo, agregue las siguientes líneas en el mismo archivo:

ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO

Después de todos los pasos, nuestro archivo de configuración vsftpd se verá así:

listen=NO
listen_ipv6=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
pasv_enable=Yes
pasv_min_port=10000
pasv_max_port=11000
user_sub_token=$USER
local_root=/home/$USER/ftp
userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO

Después de cualquier cambio en el archivo de configuración de vsftpd, necesitamos reiniciar el servicio con el siguiente comando:

sudo service vsftpd restart

También puede configurar vsftpd para usar el certificado letsencrypt para sftp, pero asegúrese de tener un dominio para validar. Puede agregar una variable de ruta en la configuración de vsftpd donde ssl cert y private es la clave almacenada.

rsa_cert_file=/ssl/letsencrypt/ftpdomain.com/chain-bundle.pem
rsa_private_key_file=/ssl/letsencrypt/ftpdomain.com/private-key.pem

Conectando al servidor FTP

Hay dos métodos para conectarse al servidor ftp:

  • usando terminal
  • usando el cliente FTP con GUI

Conectar usando terminal

Para conectarse al servidor ftp a través de la línea de comandos, escriba el siguiente comando en la terminal:

ftp ubuntu

Donde ubuntu es el nombre de host de la máquina donde está instalado el servidor ftp. Asegúrese de que se pueda acceder a la máquina del servidor ftp a través de su nombre de host desde la máquina que está intentando conectar.

Después de conectarse, se le pedirá que ingrese el nombre de usuario y la contraseña para conectarse al servidor ftp:

Connected to ubuntu.
220 (vsFTPd 3.0.3)
Name (ubuntu:ubuntu): ftpuser
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

Escribe ls para verificar si el archivo de prueba creado antes está allí:

ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
drwxr-xr-x 2 1001 1001 4096 May 21 13:39 files
226 Directory send OK.

Conéctese usando un cliente FTP con GUI

Vamos a utilizar Filezilla para conectarnos a nuestro servidor FTP instalado en Linux. Para hacerlo, abra el cliente Filezilla en su máquina e ingrese la dirección IP del servidor FTP, las credenciales de ftpuser para conectarse y presione el botón de conexión como se muestra en la captura de pantalla a continuación. Se le pedirá que agregue el certificado a confiable, después de lo cual podrá conectarse al servidor FTP.

Después de conectar podemos ver que el test.txt que creamos antes está ahí.

Lectura relacionada:

  • Cómo configurar el servidor SFTP MySecureShell en Ubuntu 18.04
  • 5 pasos para instalar y configurar ProFTPD en Debian 9 Stretch
  • 12 comandos lftp para administrar archivos con ejemplos

Como puede aprender del artículo, instalar el servidor vsftpd y conectarse a él es muy fácil y se puede hacer en unos pocos pasos. El punto principal aquí es asegurar el servidor ftp a través de su archivo de configuración, como hacer chroot al usuario en su directorio de inicio, deshabilitar el inicio de sesión anónimo y agregar umask local y permisos de lectura y escritura del usuario.