Configuración de un servidor FTP seguro usando SSL/TLS en Ubuntu


En este tutorial, describiremos cómo proteger un servidor FTP (VSFTPD significa “Very Secure FTP Daemon”) usando SSL/TLS en Ubuntu 16.04/16.10.

Si está buscando configurar un servidor FTP seguro para distribuciones basadas en CentOS, puede leer: Proteger un servidor FTP usando SSL/TLS en CentOS

Después de seguir los distintos pasos de esta guía, habremos aprendido los fundamentos de habilitar los servicios de cifrado en un servidor FTP para que las transferencias de datos seguras sean cruciales.

  1. Debe instalar y configurar un servidor FTP en Ubuntu

Antes de continuar, asegúrese de que todos los comandos de este artículo se ejecutarán como cuenta privilegiada root o sudo.

Paso 1: Generación de certificado SSL/TLS para FTP en Ubuntu

1. Comenzaremos creando un subdirectorio en:/etc/ssl/para almacenar el certificado SSL/TLS y los archivos clave si no existe:

$ sudo mkdir /etc/ssl/private

2. Ahora, generemos el certificado y la clave en un solo archivo, ejecutando el siguiente comando.

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

El comando anterior le pedirá que responda las preguntas a continuación, no olvide ingresar los valores que correspondan a su escenario.

Country Name (2 letter code) [XX]:IN
State or Province Name (full name) []:Lower Parel
Locality Name (eg, city) [Default City]:Mumbai
Organization Name (eg, company) [Default Company Ltd]:TecMint.com
Organizational Unit Name (eg, section) []:Linux and Open Source
Common Name (eg, your name or your server's hostname) []:tecmint
Email Address []:[email protected]

Paso 2: Configurar VSFTPD para usar SSL/TLS en Ubuntu

3. Antes de realizar cualquier configuración VSFTPD, para aquellos que tienen el firewall UFW habilitado, deben abrir los puertos 990 y 40000-50000 para permitir que las conexiones TLS y el rango de puertos de los puertos pasivos se establezcan en el archivo de configuración VSFTPD respectivamente:

$ sudo ufw allow 990/tcp
$ sudo ufw allow 40000:50000/tcp
$ sudo ufw status

4. Ahora, abra el archivo de configuración VSFTPD y defina los detalles de SSL en él:

$ sudo vi /etc/vsftpd/vsftpd.conf
OR
$ sudo nano /etc/vsftpd/vsftpd.conf

Luego, agregue o ubique la opción ssl_enable y establezca su valor en YES para activar el uso de SSL, nuevamente, debido a que TLS es más seguro que SSL, restringiremos VSFTPD para usar TLS en su lugar, habilitando el Opción ssl_tlsv1 :

ssl_enable=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO

5. A continuación, comente las líneas siguientes utilizando el carácter # de la siguiente manera:

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

Luego, agregue las líneas a continuación para definir la ubicación del certificado SSL y el archivo de clave:

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

6. Ahora, también tenemos que evitar que los usuarios anónimos usen SSL, luego obligar a todos los inicios de sesión no anónimos a usar una conexión SSL segura para la transferencia de datos y enviar la contraseña durante el inicio de sesión:

allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES

7. Además, podemos usar las siguientes opciones para agregar más funciones de seguridad en el servidor FTP. Con la opción require_ssl_reuse u003d YES , todas las conexiones de datos SSL son necesarias para exhibir la reutilización de sesiones SSL; demostrando que conocen el mismo secreto maestro que el canal de control. Entonces, deberíamos deshabilitarlo.

require_ssl_reuse=NO

Además, podemos establecer qué cifrados SSL permitirá VSFTPD para conexiones SSL cifradas con la opción ssl_ciphers . Esto ayudará a frustrar los esfuerzos de los atacantes que intentan forzar un cifrado específico en el que posiblemente hayan descubierto vulnerabilidades en:

ssl_ciphers=HIGH

8. Luego, definamos el rango de puertos (puerto mínimo y máximo) de los puertos pasivos.

pasv_min_port=40000
pasv_max_port=50000

9. Para habilitar la depuración SSL, lo que significa que los diagnósticos de conexión openSSL se registran en el archivo de registro VSFTPD, podemos usar la opción debug_ssl :

debug_ssl=YES

Finalmente guarde el archivo y ciérrelo. Luego reinicie el servicio VSFTPD:

$ systemctl restart vsftpd

Paso 3: verificar FTP con conexiones SSL/TLS en Ubuntu

10. Después de realizar todas las configuraciones anteriores, pruebe si VSFTPD ahora está usando conexiones SSL/TLS intentando usar FTP desde la línea de comando como se muestra a continuación.

En el resultado a continuación, hay un mensaje de error que nos indica que VSFTPD solo puede permitir que los usuarios (no anónimos) inicien sesión desde clientes seguros que admitan servicios de cifrado.

$ ftp 192.168.56.10
Connected to 192.168.56.10  (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : ravi
530 Non-anonymous sessions must use encryption.
Login failed.
421 Service not available, remote server has closed connection
ftp>

La línea de comando no es compatible con los servicios de cifrado, por lo que se produce el error anterior. Por lo tanto, para conectarse de forma segura a un servidor FTP con servicios de cifrado habilitados, necesitamos un cliente FTP que admita conexiones SSL/TLS de forma predeterminada, como FileZilla.

Paso 4: Instale FileZilla en clientes para conectarse FTP de forma segura

FileZilla es un cliente FTP multiplataforma potente y ampliamente utilizado que admite FTP sobre SSL/TLS y más. Para instalar FileZilla en una máquina cliente Linux, use el siguiente comando.

--------- On Debian/Ubuntu ---------
$ sudo apt-get install filezilla   

--------- On CentOS/RHEL/Fedora --------- 
# yum install epel-release filezilla

--------- On Fedora 22+ --------- 
$ sudo dnf install filezilla

12. Una vez que se complete la instalación, ábralo y vaya a Archivo u003d> Administrador de sitios o (presione Ctrl + S) para obtener la interfaz del Administrador del sitio a continuación.

13. Ahora, defina el nombre del host/sitio, agregue la dirección IP, defina el protocolo que se usará, el cifrado y el tipo de inicio de sesión como se muestra en la siguiente captura de pantalla (use los valores que se apliquen a su escenario):

Haga clic en el botón Nuevo sitio para configurar una nueva conexión de sitio/host.

Host:  192.168.56.10
Protocol:  FTP – File Transfer Protocol
Encryption:  Require explicit FTP over   #recommended 
Logon Type: Ask for password	        #recommended 
User: username

14. Luego haga clic en Conectar desde la interfaz anterior para ingresar la contraseña, y luego verifique el certificado que se está utilizando para la conexión SSL/TLS, y haga clic en Aceptar una vez más para conectarse al servidor FTP:

15. Ahora, debería haber iniciado sesión correctamente en el servidor FTP a través de una conexión TLS, consulte la sección de estado de la conexión para obtener más información de la interfaz a continuación.

16. Por último, transfieramos archivos desde la máquina local al servidor FTP en la carpeta de archivos, eche un vistazo al extremo inferior de la interfaz de FileZilla para ver informes sobre transferencias de archivos.

¡Eso es todo! Recuerde siempre que instalar un servidor FTP sin habilitar los servicios de cifrado tiene ciertas implicaciones de seguridad. Como explicamos en este tutorial, puede configurar un servidor FTP para usar conexiones SSL/TLS para implementar la seguridad en Ubuntu 16.04/16.10.

Si tiene algún problema al configurar SSL/TLS en el servidor FTP, use el formulario de comentarios a continuación para compartir sus problemas o pensamientos sobre este tutorial/tema.