Transferencia FTPS

Como sabemos, el protocolo de transferencia de archivos o FTP por sus siglas en inglés File Transfer Protocol. Es un sistema de transferencia basado en la arquitectura cliente-servidor.

El servicio FTP se realiza por la capa de aplicación del modelo de capas de red TCP/IP. Y el problema del uso de este protocolo radica en que pos de la máxima velocidad de conexión. La transferencia y acceso del cliente hasta el servidor se realiza en texto plano sin ningún tipo de cifrado. Por lo que un posible atacante podría capturar este tráfico y acceder al servidor y/o apropiarse de los archivos transferidos.

Por ello, con el fin de proteger la conexión entre cliente y servidor se realizó el protocolo FTPS el cual añade el uso de una capa SSL/TLS en la capa de transporte de la conexión, para cifrar los canales de control y transmisión de datos, convirtiendo el protocolo FTP en más seguro, gracias a la encriptación de la capa de transporte.

Creación del certificado autofirmado

Para la utilización del protocolo FTPS en la transmisión de archivos, es necesaria la creación de un certificado autofirmado utilizando algunos de los algoritmos de encriptación. Uno de ellos puede ser el algoritmo asimétrico RSA o el DSA, ambos basados en el uso de dos llaves por cada usuario, una pública y otra privada.  Cuando el emisor desea enviar un mensaje, busca la clave pública del receptor, cifra su mensaje con esa clave y envía el mensaje, siendo el receptor con posterioridad el que usa su clave privada para descifrarlo.

Para el procedimiento de autentificación se suele utilizar el certificado X509. El cual es un estándar para certificados de claves públicas con un algoritmo de validación de la ruta de certificación.

Por ello, una vez instalado el demonio VSFTPD en el sistema, para la creación del certificado, realizaremos la siguiente orden:

openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout /etc/ssl/private/clave.pem -out /etc/ssl/private/clave.pem

Con el comando anterior, estaremos indicando:

• openssl:  Llamamos al comando de administración de critptografía
• req:  Tipo de gestión de certificado
• -X509: Expecificamos que el protocolo utilizado será el X509
• -nodes:  Especificamos características del archivo de encriptación
• -days 365:  La duración del certificado será de 365 días
• -newkey rsa:1024: Especificamos que la clave de encriptación sea de 1024 bits. Cuanto más alto sea más segura será
• -keyout: Indicamos la ubicación del archivo con la llave privada con extensión .PEM
• -out:  Indicamos la ubicación del archivo con el certificado crt con extensión .PEM

campos certificado terminalDurante la realización del certificado, el comando nos pedirá una serie de campos para ser rellenados. Con el fin de que tras la conexión vía remota aparezcan dichos campos y corroboremos que el servidor al cual nos queremos comunicar, realmente es el servidor deseado.

Su aspecto es similar al mostrado en la imagen, y una vez rellenados el archivo con las claves será realizado.

No es necesario el rellenado de todos los campos, si bien es recomendable, con el fin de que al realizar el conexionado la comprobación de la conexión sea lo más fiable posible y no cause dudas sobre su identidad y su ubicación dentro de la red.

Una vez realizado el certificado, entraremos en el archivo de configuración de la conexión FPTS utilizando el comando:

sudo nano /etc/vsftpd.conf

Y realizaremos las siguientes modificaciones:

No permitiremos el acceso a usuarios anónimos, para ello modificaremos la clave:

anonymous_enable=NO

Permitiremos a los usuarios locales su acceso descomentando la línea, para ello eliminaremos el símbolo almohadilla (#) del inicio de la línea. También permitiremos o no escribir a dichos usuarios en los directorios modificando o no la clave a yes o no:

local_enable=YES
write_enable=YES

Modificaremos la clave rs_cert_file con la dirección de nuestro certificado anteriormente creado:

rsa_cert_file=/etc/ssl/private/clave.pem

A continuación deberemos de añadir al final del archivo una serie de claves, dependiendo de si el tipo de cifrado que deseamos realizar sea:

  • FTP explicito sobre TLS

En modo explícito, un cliente FTPS debe «solicitar explícitamente» la seguridad de un servidor FTPS y luego intensificar a un método de encriptación mutuamente acordado. Si un cliente no solicita seguridad, el servidor FTPS puede permitir que el cliente continúe inseguro o se rechace o limite la conexión.

En él, el cliente se conecta al puerto 21 del servidor y comienza una sesión FTP sin cifrar de manera tradicional, pero pide que la seguridad TLS sea usada y realiza la negociación apropiada antes de enviar cualquier dato sensible.

Para ello, deberemos de añadir a nuestro archivo de configuración las siguientes líneas de código:

Se define el fichero que almacena la clave privada:

rsa_private_key_file=/etc/ssl/private/clave.pem

Se activa la capa de puertos seguros a SSL:

ssl_enable=YES

Se desactivan los accesos anónimos con protocolo SSL:

allow_anon_ssl=NO

Forzamos la utilización de SSL para la transferencia de datos y el inicio de la sesión:

force_local_data_ssl=YES force_local_logins_ssl=YES

Limitamos el tipo de conexión a TLS por ser más segura que SSL:

ssl_tlsv1=YES
ssl_sslv2=YES
ssl_sslv3=YES

No exigimos la reutilización del protocolo:

require_ssl_reuse=NO

Tipo de cifrado a utilizar será alto:

ssl_ciphers=HIGH

A continuación presionaremos [Ctrl] + [O], seguido de Enter, para guardar las modificaciones, y luego presionaremos [Ctrl] + [X] para salir del editor de archivos. Y reiniciaremos el servicio vsftpd para que se apliquen los cambios efectuados con la orden:

sudo service vsftpd restart

Nos cercioraremos de que hemos realizado las modificaciones correctamente, y el sistema ftp esta activo, para ello, comprobamos que el sistema esta escuchando el puerto 21, para ello realizamos el comando:

sudo netstat -anp | grep :21

Debiendo de aparecer en la consola algo similar a lo mostrado:

netstat linux

También podríamos utilizar el comando nmap localhost, el cual nos mostraría los puertos que tenemos activos en el sistema, debiendo de aparecer el puerto 21 para cerciorarse de que el demonio FTP está activo:

Separador

Nmap es un programa de código abierto que sirve para efectuar rastreo de puertos. Se usa para evaluar la seguridad de sistemas informáticos, así como para descubrir servicios o servidores en una red informática.

separador inverso

Filezilla acceso

A continuación, realizamos el conexionado desde la unidad remota insertando en su gestor de sitios como protocolo: FTP – Protocolo de Transferencia de Archivos y como cifrado: Requiere FTP explícito sobre TLS.

Como servidor la dirección del servidor FTP y  como usuario y contraseña el nombre y contraseña del usuario con el cual nos queremos registrar.

El campo del puerto no será necesario si no hemos realizado un cambio en la escucha del puerto, ya que por defecto el puerto 21 es el utilizado.

Una vez realizada la conexión nos aparecerá una ventana, similar a la mostrada a continuación, donde nos aparecerán todos y cada uno de los campos introducidos durante la creación del certificado. Así como su número de serie y huella digital.

Imagen certificado

Y una vez aceptado el certificado. La conexión vía FTP explícita sobre TLS se habrá completado.

  • FTP implícito sobre TLS

En este caso la negociación no está permitida con configuraciones implícitas de FTPS. En el conexionado, se espera que un cliente desafíe al servidor FTPS con una conexión cifrada mediante TLS / SSL y si no lo hace, el servidor debería desconectar la conexión. Es decir, se realiza una negociación SSL antes de que se envíe cualquier comando FTP, además de cambiar el puerto de conexionado que suele ser en este caso el 990.

Para realizar el conexionado implícito, es necesario añadir en el archivo de configuración del demonio vsftpd las siguientes líneas:

implicit_ssl=YES listen_port=990

Con ello indicamos que el método implicito sobre TLS será el utilizado y el puerto 990 será el puerto usado. Una vez realizados los cambios guardaremos los cambios y reiniciaremos el servicio.

A continuación volveremos a probar que nuestro servicio servidor FTPS esta activo, analizando en esta ocasión la orden:

sudo netstat -anp | grep :990

O comprobar con el comando nmap localhost que el servicio ftps por el puerto 990 está activo.

Una vez comprobado, podremos realizar el conexionado desde el cliente con la salvedad que ahora el cifrado requerirá FTP implícito sobre TLS y el puerto utilizado en este caso será el 990.