Cómo proteger un servidor FTP mediante SSL / TLS para la transferencia segura de archivos en CentOS 7


Por su diseño original, FTP ( File Transfer Protocol ) no es seguro, lo que significa que no cifra los datos que se transmiten entre dos máquinas, junto con las credenciales del usuario. Esto plantea una amenaza masiva a los datos, así como a la seguridad del servidor.

En este tutorial, explicaremos cómo habilitar manualmente los servicios de cifrado de datos en un servidor FTP en CentOS/RHEL 7 y Fedora; Pasaremos por varios pasos para asegurar los servicios de VSFTPD ( Daemon de FTP muy seguro ) usando certificados SSL/TLS .

  1. You must have installed and configured a FTP server in CentOS 7

Antes de comenzar, tenga en cuenta que todos los comandos en este tutorial se ejecutarán como root , de lo contrario, use el comando sudo para obtener privilegios de root si no controla el servidor con la cuenta de root.

Paso 1. Generación de certificado SSL / TLS y clave privada

1. Debemos comenzar por crear un subdirectorio en: /etc/ssl/, donde almacenaremos el certificado SSL/TLS y los archivos de claves. :

# mkdir /etc/ssl/private

2. A continuación, ejecute el siguiente comando para crear el certificado y la clave para vsftpd en un solo archivo, aquí está la explicación de cada marca utilizada.

  1. req – is a command for X.509 Certificate Signing Request (CSR) management.
  2. x509 – means X.509 certificate data management.
  3. days – defines number of days certificate is valid for.
  4. newkey – specifies certificate key processor.
  5. rsa:2048 – RSA key processor, will generate a 2048 bit private key.
  6. keyout – sets the key storage file.
  7. out – sets the certificate storage file, note that both certificate and key are stored in the same file: /etc/ssl/private/vsftpd.pem.
# 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, recuerde usar valores que se apliquen 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. Configurando VSFTPD para usar SSL / TLS

3. Antes de realizar cualquier configuración de VSFTPD, abramos los puertos 990 y 40000-50000 para permitir conexiones TLS y el rango de puertos de puertos pasivos para definir en el archivo de configuración VSFTPD respectivamente:

# firewall-cmd --zone=public --permanent --add-port=990/tcp
# firewall-cmd --zone=public --permanent --add-port=40000-50000/tcp
# firewall-cmd --reload

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

# vi /etc/vsftpd/vsftpd.conf

Busque la opción ssl_enable y establezca su valor en YES para activar el uso de SSL, además, como TSL es más seguro que SSL, restringiremos VSFTPD para emplear TLS en su lugar, utiliza la opción ssl_tlsv1_2 :

ssl_enable=YES
ssl_tlsv1_2=YES
ssl_sslv2=NO
ssl_sslv3=NO

5. 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. A continuación, debemos evitar que los usuarios anónimos usen SSL, luego forzar 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 agregar las siguientes opciones para mejorar la seguridad del servidor FTP. Cuando la opción require_ssl_reuse se establece en YES , entonces, todas las conexiones de datos SSL deben mostrar la reutilización de la sesión SSL; demostrando que conocen el mismo secreto maestro que el canal de control.

Por lo tanto, tenemos que apagarlo.

require_ssl_reuse=NO

Una vez más, debemos seleccionar qué cifrados SSL VSFTPD permitirá para las conexiones SSL cifradas con la opción ssl_ciphers . Esto puede limitar en gran medida los esfuerzos de los atacantes que intentan forzar un cifrado particular en el que probablemente descubrieron vulnerabilidades en:

ssl_ciphers=HIGH

8. Ahora, configure el rango de puertos (mínimo y máximo) de los puertos pasivos.

pasv_min_port=40000
pasv_max_port=50000

9. Opcionalmente, permitir la depuración de SSL, lo que significa que los diagnósticos de conexión de openSSL se registran en el archivo de registro VSFTPD con la opción debug_ssl :

debug_ssl=YES

Guarda todos los cambios y cierra el archivo. Entonces reinicie el servicio VSFTPD:

# systemctl restart vsftpd

Paso 3: Probar el servidor FTP con conexiones SSL / TLS

10. Después de realizar todas las configuraciones anteriores, compruebe si VSFTPD está utilizando conexiones SSL/TLS intentando usar FTP desde la línea de comandos de la siguiente manera:

# 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>

En la captura de pantalla anterior, podemos ver que hay un error que nos informa que VSFTPD solo puede permitir que el usuario inicie sesión desde clientes que admiten servicios de cifrado.

La línea de comando no ofrece servicios de encriptación, por lo que produce el error. Por lo tanto, para conectarse de forma segura al servidor, necesitamos un cliente FTP que admita conexiones SSL/TLS como FileZilla .

Paso 4: Instale FileZilla para conectarse de forma segura a un servidor FTP

11. FileZilla es un cliente de FTP multiplataforma moderno, popular e importante que admite conexiones SSL/TLS de forma predeterminada.

Para instalar FileZilla en Linux, ejecute el siguiente comando:

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

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

12. Cuando finalice la instalación (o si ya lo tiene instalado), ábralo y vaya a Archivo = & gt; Administrador de sitios o (presione Ctrl + S ) para obtener la interfaz Administrador del sitio a continuación.

Haga clic en el botón Nuevo sitio para agregar un nuevo sitio/detalles de conexión de host.

13. A continuación, establezca el nombre del host/sitio, agregue la dirección IP, defina el protocolo a 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 aplican a su escenario):

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 para volver a ingresar la contraseña, luego verifique el certificado que se está utilizando para la conexión SSL/TLS y haga clic en OK una vez. Más para conectarse al servidor FTP:

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

15. Por último, pero no menos importante, intente transferir archivos desde la máquina local al servidor FTP en la carpeta de archivos, mire el extremo inferior de la interfaz FileZilla para ver Informes sobre transferencias de archivos.

¡Eso es todo! Siempre tenga en cuenta que FTP no es seguro de manera predeterminada, a menos que lo configuremos para usar conexiones SSL/TLS como lo mostramos en este tutorial. Comparta sus opiniones sobre este tutorial/tema a través del formulario de comentarios a continuación.