GNU/Linux >> Tutoriales Linux >  >> Ubuntu

Cómo instalar y configurar un servidor FTP (vsftpd) con SSL/TLS en Ubuntu 20.04

FTP o File Transfer Protocol es un protocolo muy antiguo y conocido para transferir archivos entre un cliente y un servidor. También es un protocolo inseguro, pero solo si se usa sin TLS. En este tutorial, configuraremos vsftpd para TLS, lo que nos permite usar FTP de forma segura. FTP ha sido reemplazado a menudo por protocolos más seguros como SFTP o SCP en estos días.

Sin embargo, si necesita usar FTP con su servidor, vsftpd (Very Secure FTP Daemon) es la elección perfecta.

En este tutorial, aprenderemos cómo instalar y configurar un servidor FTP usando vsftpd en un servidor basado en Ubuntu 20.04. También aprenderemos cómo asegurar la conexión usando el protocolo SSL/TLS.

Requisitos

  • Un servidor Ubuntu 20.04 con un usuario no root que tiene privilegios sudo.

Paso 1:instalar vsftpd

El primer paso es instalar vsftpd.

$ sudo apt update
$ sudo apt install vsftpd

A continuación, debemos hacer una copia de seguridad del archivo de configuración original para poder comenzar con una configuración nueva.

$ sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig

Paso 2:configurar el cortafuegos

En este paso, configuraremos el firewall UFW para permitir el acceso a los puertos FTP.

Primero, verifiquemos el estado del firewall.

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

Como podemos ver, hasta ahora solo se permiten puertos SSH. Abramos los puertos 20 (puerto de comando FTP), 21 (puerto de datos FTP), 990 para cuando usemos TLS y los puertos 35000-40000 para el rango de puertos pasivos que podamos necesitar en el futuro.

$ sudo ufw allow 20:21/tcp
$ sudo ufw allow 990/tcp
$ sudo ufw allow 35000:40000/tcp
$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
990/tcp                    ALLOW       Anywhere
20:21/tcp                  ALLOW       Anywhere
35000:40000/tcp            ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
20:21/tcp (v6)             ALLOW       Anywhere (v6)
990/tcp (v6)               ALLOW       Anywhere (v6)
35000:40000/tcp (v6)       ALLOW       Anywhere (v6)

Paso 3:Configuración de vsftpd

Ahora repasaremos algunas configuraciones importantes para que vsftpd funcione.

Comience abriendo el archivo de configuración.

$ sudo nano /etc/vsftpd.conf

1. Acceso FTP

En este tutorial, permitiremos el acceso FTP solo a los usuarios locales y deshabilitaremos cualquier acceso anónimo. Para hacer esto, asegúrese de que las siguientes líneas existan y sean las siguientes.

anonymous_enable=NO
local_enable=YES

2. Habilitación de cargas de archivos

El propósito singular más importante de FTP aquí es poder escribir en el servidor. Descomente la siguiente línea para habilitar la carga de archivos eliminando # frente a él.

write_enable=YES

3. Cárcel de Chroot

FTP funciona mejor cuando un usuario está restringido a un directorio determinado. vsftpd logra eso usando chroot jails. Cuando chroot está habilitado para usuarios locales, están restringidos a sus directorios de inicio de forma predeterminada. Para lograr esto, descomente la siguiente línea.

chroot_local_user=YES

Para evitar cualquier vulnerabilidad de seguridad, chroot cuando está habilitado no funcionará siempre que el directorio al que los usuarios estén restringidos sea escribible.

Para sortear esta limitación, tenemos dos métodos para permitir la carga de archivos cuando chroot está habilitado.

  1. Método 1 - Este método funciona mediante el uso de un directorio diferente para cargas FTP. Para este tutorial, crearemos un ftp directorio dentro de la casa del usuario para servir como chroot y un segundo directorio de escritura upload por subir los archivos. Para lograr esto, agregue las siguientes líneas al final del archivo.

    user_sub_token=$USER
    local_root=/home/$USER/ftp
    
  2. Método 2 - El segundo método es simplemente otorgar acceso de escritura al directorio de inicio como un todo. Agregue la siguiente línea para lograr esto.

    allow_writeable_chroot=YES
    

4. FTP Pasivo

vsftpd puede usar cualquier puerto para conexiones FTP pasivas. Podemos especificar un rango para el número de puerto mínimo y máximo que vsftpd puede usar. Estos son los puertos que configuramos antes en nuestro cortafuegos UFW.

Agregue las siguientes líneas para permitir conexiones FTP pasivas.

pasv_min_port=35000
pasv_max_port=40000

5. Restricción de usuarios

Para permitir que solo ciertos usuarios inicien sesión en el servidor FTP, agregue las siguientes líneas en la parte inferior.

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

Con esta opción habilitada, debemos especificar qué usuarios deberían poder usar FTP y agregar sus nombres de usuario en /etc/vsftpd.userlist archivo.

Reinicie vsftpd para habilitar la configuración.

$ sudo systemctl restart vsftpd

Paso 4:configuración del directorio de usuarios

A los efectos de este tutorial, crearemos una nueva cuenta de usuario para transacciones FTP. Si ya tiene una cuenta de usuario para este propósito, puede omitir el paso 1. Además, si ha configurado allow_writeable_chroot=YES en el archivo de configuración anterior, puede omitir el paso 3.

Paso 1:Agregar un nuevo usuario.

$ sudo adduser testuser

Establece una contraseña segura y omite todas las demás indicaciones.

Paso 2:agregue el usuario a la lista de usuarios FTP permitidos.

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

Paso 3:crear FTP y directorio de archivos

Este paso es si desea un directorio diferente como raíz FTP y otro diferente para cargar archivos para sortear la limitación de chroot jail.

Cree la carpeta FTP.

$ sudo mkdir /home/testuser/ftp

Establecer su propiedad.

$ sudo chown nobody:nogroup /home/testuser/ftp

Elimina los permisos de escritura.

$ sudo chmod a-w /home/testuser/ftp

Verifique los permisos antes de continuar.

$ sudo ls -al /home/testuser/ftp
total 8
dr-xr-xr-x 2 nobody   nogroup  4096 Jun  7 13:08 .
drwxr-xr-x 3 testuser testuser 4096 Jun  7 13:08 ..

Ahora vamos a crear el directorio de escritura real para los archivos.

$ sudo mkdir /home/testuser/ftp/upload
$ sudo chown testuser:testuser /home/testuser/ftp/upload

Pruebe los permisos.

$ sudo ls -al /home/testuser/ftp
total 12
dr-xr-xr-x 3 nobody   nogroup  4096 Jun  7 13:10 .
drwxr-xr-x 3 testuser testuser 4096 Jun  7 13:08 ..
drwxr-xr-x 2 testuser testuser 4096 Jun  7 13:10 upload

Finalmente, agreguemos un test.txt archivo a utilizar para la prueba.

$ echo "vsftpd test file" | sudo tee /home/testuser/ftp/upload/test.txt

Paso 5:prueba de acceso FTP

Nuestro servidor FTP es completamente funcional en este momento. Podemos hacer una pequeña prueba antes de continuar.

Intentemos iniciar sesión como un usuario anónimo.

$ ftp -p 136.244.105.99
Connected to 136.244.105.99.
220 (vsFTPd 3.0.3)
Name (136.244.105.99:default): anonymous
530 Permission denied.
ftp: Login failed.
ftp>

Cierra la conexión.

ftp> bye

Funciona según lo previsto, es decir, no se permiten usuarios anónimos.

Intentemos conectarnos como cualquier otro usuario de Sudo. No debería conectarse tan bien.

$ ftp -p 136.244.105.99
Connected to 136.244.105.99.
220 (vsFTPd 3.0.3)
Name (136.244.105.99:default): sudo_user
530 Permission denied.
ftp: Login failed.
ftp>

Cierra la conexión.

ftp> bye

Intentemos finalmente conectarnos como testuser que creamos para FTP.

$ ftp -p 136.244.105.99
Connected to 136.244.105.99.
220 (vsFTPd 3.0.3)
Name (136.244.105.99:default): testuser
331 Please specify the password.
Password: your_user's_password
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

Pasemos a upload directorio y use el get comando para transferir el archivo de prueba a nuestra máquina local.

ftp> cd upload
250 Directory successfully changed.
ftp> get test.txt
227 Entering Passive Mode (136,244,105,99,165,42).
150 Opening BINARY mode data connection for test.txt (17 bytes).
226 Transfer complete.
16 bytes received in 0.0101 seconds (164.3719 kB/s)
ftp>

A continuación, subamos el archivo con un nuevo nombre usando el put comando para probar los permisos de escritura.

ftp> put test.txt upload.txt
227 Entering Passive Mode (136,244,105,99,163,102).
150 Ok to send data.
226 Transfer complete.
17 bytes sent in 0.000894 seconds (518.7988 kB/s)

Cierra la conexión.

ftp> bye

Paso 6:Protección de transmisiones mediante SSL/TLS

Para encriptar las transmisiones FTP, necesitamos tener un Certificado SSL y configurar vsftpd para usarlo.

Si ya tiene un dominio o subdominio que apunta a su servidor FTP, puede crear un certificado SSL gratuito de Let's Encrypt y usarlo.

A los efectos de nuestro tutorial, utilizaremos un certificado SSL autofirmado. Para crear uno, use el openssl comando.

El siguiente comando creará una clave privada de 2048 bits y un certificado válido por 1 año. Tanto el certificado como la clave se guardarán en el mismo archivo.

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

Puede omitir las indicaciones que siguen o completar los valores a su gusto.

Ahora que nuestro certificado está creado, es hora de abrir de nuevo el archivo de configuración de vsftpd.

$ sudo nano /etc/vsftpd.conf

Encuentre las siguientes líneas y coméntelas poniendo un hash delante de ellas de la siguiente manera.

# rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
# rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key

Ahora, agregue las siguientes líneas.

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

Además, cambie el valor de ssl_enable a YES .

ssl_enable=YES

Agreguemos algunas configuraciones más para mejorar la seguridad SSL.

allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
require_ssl_reuse=NO
ssl_ciphers=HIGH

La mayoría de estos ajustes se explican por sí mismos. Estos deshabilitan SSL para usuarios anónimos y requieren SSL tanto para la transferencia de datos como para los inicios de sesión. También deshabilitamos los protocolos SSL inseguros y nos apegaremos a TLSv1.0. Y finalmente, hemos deshabilitado la reutilización de SSL y requerimos suites de cifrado de alto cifrado.

Reinicie el servidor para que la configuración surta efecto.

$ sudo systemctl restart vsftpd

Ahora, no podrá usar FTP a través de la línea de comandos. Deberá conectarse mediante un cliente que admita TLS.

Paso 7:prueba de TLS con FileZilla

Para nuestro tutorial, probaremos la capacidad de TLS usando Filezilla.

Cuando abra Filezilla, haga clic en el ícono del Administrador del sitio justo encima de la palabra Host en la fila superior.

Una nueva ventana se abrirá. Haga clic en Nuevo sitio botón en la esquina inferior derecha.

Verá un nuevo icono con el nombre Nuevo sitio . Puede cambiarle el nombre usando Cambiar nombre botón.

Complete el campo Host con la dirección IP de su servidor. Dado que nuestro puerto FTP es 21, que es el puerto predeterminado para FTP, puede dejar el puerto campo vacío. Para la opción Cifrado, seleccione Requerir FTP explícito sobre TLS del menú desplegable.

Complete su nombre de usuario y contraseña de FTP con los que creamos anteriormente. Haz clic en Conectar botón para continuar.

Tras una conexión exitosa, verá un certificado de servidor similar al siguiente.

Puede marcar la opción Confiar siempre en este certificado en futuras sesiones. para que no se le pregunte cada vez que inicie sesión. Haga clic en Aceptar para proceder.

Ahora puede realizar operaciones FTP normales.

Paso 8:deshabilitar el acceso al shell

Este paso es completamente opcional. De forma predeterminada, al crear un usuario FTP, si no se especifica explícitamente, el usuario tendrá acceso SSH al servidor.

Debe deshabilitar el acceso de shell al usuario de FTP para mejorar la seguridad. Para deshabilitarlo, necesitamos crear un nuevo shell que imprimirá un mensaje diciendo que la cuenta de usuario está limitada solo al acceso FTP.

Crea el /bin/ftponly shell y hacerlo ejecutable.

$ echo -e '#!/bin/sh\necho "This account is limited to FTP access only."' | sudo tee -a  /bin/ftponly
$ sudo chmod a+x /bin/ftponly

Agregue el nuevo shell a la lista de shells válidos en /etc/shells archivo.

$ echo "/bin/ftponly" | sudo tee -a /etc/shells

Cambie el shell de usuario a /bin/ftponly .

$ sudo usermod newftpuser -s /bin/ftponly

Puede usar el mismo comando para cambiar el shell de todos los usuarios a los que desea dar acceso FTP.

Conclusión

Esto concluye nuestro tutorial donde instalamos y configuramos vsftpd para instalar un servidor FTP en un servidor basado en Ubuntu 20.04. También configuramos nuestra conexión FTP para que funcione con SSL/TLS.

Si tiene alguna pregunta, hágala en los comentarios a continuación.


Ubuntu
  1. Cómo instalar un servidor FTP en CentOS 7 con VSFTPD

  2. Cómo instalar un servidor FTP en Ubuntu con vsftpd

  3. Cómo instalar y configurar un servidor NFS en Ubuntu 20.04

  4. Cómo instalar el servidor FTP vsftpd y asegurarlo con TLS en Debian 11

  5. Instale Vsftpd con SSL/TLS en Ubuntu 20.04

Instale Vsftpd con SSL/TLS en Ubuntu 20.04

Cómo instalar el servidor FTP vsftpd con TLS en Debian 10

Cómo instalar el servidor VsFTPD con TLS en Ubuntu 18.04 LTS

Cómo instalar y configurar Apache con Let's Encrypt TLS/SSL en Ubuntu 20.04

Cómo instalar y configurar el servidor FTP VSFTPD en Ubuntu

Cómo instalar y configurar VSFTPD en Ubuntu 14.04