Búsqueda de sitios web

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


Por su diseño original, FTP (Protocolo de transferencia de archivos) 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 representa una amenaza masiva para los datos y 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 proteger los servicios VSFTPD (Very Secure FTP Daemon) utilizando certificados SSL/TLS.

Requisitos previos:

  1. Debes tener instalado y configurado un servidor FTP en CentOS 7

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

Paso 1. Generar certificado SSL/TLS y clave privada

1. Necesitamos comenzar creando un subdirectorio en: /etc/ssl/ donde almacenaremos el certificado SSL/TLS y los archivos de clave. :

mkdir /etc/ssl/private

2. Luego ejecute el siguiente comando para crear el certificado y la clave para vsftpd en un solo archivo; aquí está la explicación de cada indicador utilizado.

  1. req: es un comando para la gestión de la solicitud de firma de certificado (CSR) X.509.
  2. x509: significa gestión de datos del certificado X.509.
  3. días: define el número de días durante los cuales el certificado es válido.
  4. newkey: especifica el procesador de claves de certificado.
  5. rsa:2048: procesador de claves RSA, generará una clave privada de 2048 bits.
  6. keyout: establece el archivo de almacenamiento de claves.
  7. out: establece el archivo de almacenamiento del certificado; tenga en cuenta que tanto el certificado como la clave se almacenan en el mismo archivo: /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 

Paso 2. Configurar VSFTPD para usar SSL/TLS

3. Antes de realizar cualquier configuración VSFTPD, abramos los puertos 990 y 40000-50000 para permitir conexiones TLS y el rango 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 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, dado que TSL es más seguro que SSL, restringiremos VSFTPD para que utilice TLS. en su lugar, usando 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 siguientes 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 utilicen SSL y luego forzar a todos los inicios de sesión no anónimos a utilizar 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 aumentar la seguridad del servidor FTP. Cuando la opción require_ssl_reuse se establece en YES, todas las conexiones de datos SSL deben exhibir la reutilización de sesiones SSL; demostrando que conocen el mismo secreto maestro que el canal de control.

Por tanto, tenemos que apagarlo.

require_ssl_reuse=NO

Nuevamente, debemos seleccionar qué cifrados SSL permitirá VSFTPD para 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 en particular en el que probablemente descubrieron vulnerabilidades:

ssl_ciphers=HIGH

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

pasv_min_port=40000
pasv_max_port=50000

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

debug_ssl=YES

Guarde todos los cambios y cierre el archivo. Luego reiniciemos 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, pruebe si VSFTPD está usando conexiones SSL/TLS intentando usar FTP desde la línea de comando 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 admitan servicios de cifrado.

La línea de comando no ofrece servicios de cifrado, lo que produce el error. Entonces, para conectarnos 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 FTP moderno, popular y, sobre todo, multiplataforma 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 se complete la instalación (o si ya la tienes instalada), ábrela y ve a Archivo=>Administrador de sitios o (presiona Ctrl+S ) para obtener la interfaz del Administrador del sitio a continuación.

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

13. A continuación, configure 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 apliquen 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 ingresar la contraseña nuevamente 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:

En esta etapa, deberíamos 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 desde la siguiente interfaz.

15. Por último, pero no menos importante, intente transferir 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 verlos. informes sobre transferencias de archivos.

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