FTP, el acrónimo de Protocolo de transferencia de archivos, 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 usar SFTP (Protocolo de transferencia de archivos SSH/Protocolo seguro de transferencia 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 mediante un terminal y herramientas GUI.
Instalar servidor VSFTPD
Hay varios servidores FTP disponibles en Linux. Vamos a instalar vsftp. Para hacerlo en Ubuntu 18.04 escribimos el siguiente comando en la terminal:
sudo apt install vsftpd
Una vez que 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 puedes 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 utilizadas 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 está funcionando y lo vas a dejar funcionando, debes permitir el tráfico entrante a los puertos FTP (20,21 para conexiones activas y 10000-10100 para conexiones pasivas). Para hacerlo puedes ejecutar:
sudo ufw allow from any to any port 20,21,10000:11000 proto tcp
Si tiene éxito, el resultado será como el siguiente:
Rules updated
Rules updated (v6)
Después de realizar 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 según nuestras necesidades, no necesitamos crear un usuario (por ejemplo, ftpsuer) para conectarnos al servidor ftp. Para hacerlo puedes 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 la nueva contraseña de UNIX y vuelva a escribirla para que se apliquen los cambios. La salida exitosa se parece a esta:
passwd: password updated successfully
Preparar directorio de usuario 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 de inicio 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 los usuarios existentes y 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 un 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 puedes 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 de vsftpd /etc/vsftpd.conf
user_sub_token=$USER
local_root=/home/$USER/ftp
Después de realizar estos pasos, debemos crear otra carpeta en /home/ftpuser/ftp
y asignar 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, vamos a crear un archivo de prueba en ese directorio y agregarle texto. Para hacerlo puedes 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 puedes 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 SÍ, 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 brindar 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 por 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 un 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]
Después de crear el certificado, debemos agregarlo al archivo de configuración vsftpd y habilitar SSL. Para ello, 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 solicitar 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 que se agreguen 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, debemos 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 la variable de ruta en la configuración de vsftpd donde se almacenan el certificado SSL y la clave privada.
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 la terminal
- utilizando un 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á tratando de 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 usar Filezilla para conectarnos a nuestro servidor FTP instalado en Linux. Para hacerlo, abra el cliente de 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 de 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 proteger 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.