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. La salida exitosa se parece a esta:
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 cifrados, 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 []:test@email.com
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
expediente:
allow_anon_ssl=NO force_local_data_ssl=YES force_local_logins_ssl=YES
Una vez que se agregan 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 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
Dónde 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:
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.