Cómo configurar FTP con TLS en Ubuntu

Cómo configurar FTP con TLS en Ubuntu
FTP (protocolo de transferencia de archivos) se usa principalmente para transferir archivos entre computadoras. FTP funciona en arquitectura del cliente-servidor, en el que el cliente solicita un archivo desde el servidor y el servidor devuelve el archivo requerido al cliente. En la máquina del cliente, la aplicación del cliente FTP se utiliza para comunicarse con el servidor. También es posible acceder al servidor FTP en el navegador. Por defecto, FTP se comunica a través de un canal inseguro, pero es posible configurar FTP para transferir datos a través de un canal seguro. En este tutorial, aprenderá cómo configurar un servidor FTP con TLS y luego usar FileZilla como una aplicación cliente para conectarse con el servidor FTP.

Instalación de VSFTPD

VSFTPD (Daemon FTP muy seguro) es un programa de software utilizado para configurar FTP en un servidor. En este tutorial, se utilizará VSFTPD para configurar el servidor FTP en la máquina. Antes de instalar VSFTPD, actualice los repositorios en su servidor emitiendo el siguiente comando.

ubuntu@ubuntu: ~ $ sudo apt -get update -y

A continuación, instale vsftpd usando el siguiente comando.

ubuntu@ubuntu: ~ $ sudo apt -get install vsftpd -y

Finalmente, verifique la instalación verificando la versión de VSFTPD con el siguiente comando.

ubuntu@ubuntu: ~ $ vsftpd -v

El comando anterior emitirá la versión de VSFTPD si la instalación es exitosa.

FTP en modo activo

En modo activo, el cliente FTP inicia la sesión estableciendo la conexión de control TCP desde cualquier puerto aleatorio en la máquina del cliente al puerto 21 del servidor. Luego, el cliente comienza a escuchar en un puerto aleatorio X para una conexión de datos e informa al servidor a través de la conexión de control TCP que el cliente está esperando la conexión de datos en el puerto X. Después de esto, el servidor establece una conexión de datos desde su puerto 20 hasta el puerto X en la máquina del cliente.

Puede surgir un problema donde el cliente está detrás de un firewall y el puerto X está bloqueado. En este caso, el servidor no puede establecer una conexión de datos con el cliente. Para evitar este problema, el servidor FTP se usa principalmente en modo pasivo, que discutiremos más adelante en este artículo. Por defecto, VSFTPD usa el modo pasivo, por lo que tendremos que cambiarlo al modo activo.

Primero, abra el archivo de configuración VSFTPD.

ubuntu@ubuntu: ~ $ sudo nano /etc /vsftpd.confusión

Agregue la siguiente línea al final del archivo.

pasv_enable = no

Además, asegúrese de que la opción 'Connect_from_port_20' esté configurada en 'Sí.'Esta opción asegura que la conexión de datos se establezca en el puerto 20 del servidor.

A continuación, cree un directorio que el servidor FTP usará para almacenar archivos. Para este tutorial, configuraremos '/home/ubuntu/ftp/' como la ruta raíz para el servidor FTP.

ubuntu@ubuntu: ~ $ sudo mkdir/home/ubuntu/ftp

Ahora, especifique este directorio en el archivo de configuración cambiando la opción 'local_root'. El siguiente parámetro configurará la ruta raíz del servidor.

local_root =/home/ubuntu/ftp

La opción 'Write_enable' debe habilitarse para permitir a los usuarios escribir en el servidor FTP.

Cada vez que cambia el archivo de configuración, siempre reinicie el servidor.

ubuntu@ubuntu: ~ $ sudo systemctl reiniciar vsftpd

Configuración de una contraseña para un usuario

El cliente FTP se conecta con el servidor utilizando un nombre de usuario y contraseña. Establezca la contraseña para su usuario en la máquina utilizando el siguiente comando.

ubuntu@ubuntu: ~ $ sudo passwd ubuntu

El comando anterior solicitará la contraseña para el usuario 'Ubuntu'.

Configuración del firewall para el modo activo

Si se usa FTP en modo activo, el servidor FTP usará dos puertos para comunicarse con el cliente, los puertos 21 y 22. El puerto 21 se utiliza para pasar comandos al cliente, y el puerto 20 se utiliza para transferir datos a cualquier puerto aleatorio del cliente. Usaremos UFW para configurar el firewall en el servidor. Instalar UFW usando el siguiente comando.

ubuntu@ubuntu: ~ $ sudo apt-get install uFW

Ahora, en el lado del servidor, abriremos los puertos 20, 21 y 22 (para la conexión SSH).

ubuntu@ubuntu: ~ $ sudo Ufw Permitir de cualquiera a cualquier puerto Proto TCP

Habilitar y verificar el estado de UFW usando los siguientes comandos.

Ubuntu@ubuntu: ~ $ sudo Ufw Enable
ubuntu@ubuntu: ~ $ sudo Ufw Status

NOTA: Si está configurando su servidor FTP en la nube, también deberá permitir los puertos 20, 21 y 22 en el grupo de seguridad.

ADVERTENCIA: Siempre habilite el puerto 22, junto con los puertos requeridos, antes de habilitar UFW en el sistema remoto. Por defecto, UFW bloquea el tráfico desde el puerto 22, por lo que no podrá acceder a su servidor remoto usando SSH si habilita UFW sin permitir el tráfico desde el puerto 22.

Instalación del cliente FTP

Ahora, nuestro servidor está configurado en modo activo, y podemos acceder a él desde el lado del cliente. Para la aplicación del cliente, usaremos FileZilla, una aplicación cliente FTP. Instale fileZilla usando el siguiente comando.

ubuntu@ubuntu: ~ $ sudo apt -get install filezilla -y

Abra la aplicación del cliente FTP e ingrese la dirección IP pública y otras credenciales del servidor FTP.

Cuando haga clic en 'QuickConnect', se conectará al servidor FTP y se llevará automáticamente al directorio especificado en la opción 'local_root' en el archivo de configuración '/home/ubuntu/ftp'.

Problemas en modo activo

El uso de FTP en modo activo plantea problemas cuando el cliente está detrás del firewall. Después de ingresar los comandos de control iniciales, cuando el servidor crea una conexión de datos con el cliente en un puerto aleatorio, el firewall puede bloquear el puerto en el cliente, lo que hace que la transferencia de datos falle. FTP se puede usar en modo pasivo para resolver estos problemas de firewall.

FTP en modo pasivo

En modo pasivo, el cliente crea una conexión de control con el servidor en el puerto 21 del servidor. Luego, el cliente envía el comando especial 'Pasv' para informar al servidor que el cliente establecerá la conexión de datos en lugar del servidor. En respuesta, el cliente recibe la IP del servidor y el número de puerto aleatorio (este número de puerto se configurará en el servidor). El cliente usa este número IP y puerto para crear una conexión de datos con el servidor. En modo pasivo, el cliente establece tanto los datos como las conexiones de control, de modo que el firewall no perturbe la comunicación entre el cliente y el servidor.

Abra el archivo de configuración FTP en su editor favorito.

ubuntu@ubuntu: ~ $ sudo nano /etc /vsftpd.confusión

Establezca la opción 'pasv_enable' en 'sí' en el archivo para que el servidor pueda comunicarse con el cliente en modo pasivo. Además, establezca la opción 'local_root' para especificar el directorio raíz del servidor y configure la opción 'Write_enable' en 'Sí' para permitir a los usuarios cargar archivos en el servidor.

Como se discutió anteriormente, el cliente establece la conexión de datos, y el servidor envía su IP pública y un puerto aleatorio al cliente para crear una conexión de datos. Este puerto aleatorio en el servidor se puede especificar desde una gama de puertos en el archivo de configuración.

La conexión de datos entre el servidor y el cliente se establecerá en un puerto entre 1024 y 1048. Reinicie el servidor FTP después de cambiar el archivo de configuración.

ubuntu@ubuntu: ~ $ sudo systemctl reiniciar vsftpd

Configuración del firewall en modo pasivo

Si usamos FTP en modo pasivo, la conexión de datos se establecerá a través de cualquier puerto de 1024 a 1048, por lo que es necesario permitir todos estos puertos en el servidor FTP.

ubuntu@ubuntu: ~ $ sudo Ufw Permitir de cualquiera a cualquier puerto Proto TCP

Después de permitir todos los puertos en el firewall, active el UFW ejecutando el siguiente comando.

Ubuntu@ubuntu: ~ $ sudo Ufw Enable

Siempre permita los puertos en el servidor antes de habilitar el firewall; De lo contrario, no podrá acceder a su servidor a través de SSH como UFW, que bloquea el puerto 22 de forma predeterminada.

Probar la conexión

Ahora, hemos configurado el servidor FTP en modo pasivo y podemos verificar la conexión FTP con la aplicación cliente. Abra FileZilla en su sistema para hacerlo.

Después de ingresar el host, el nombre de usuario, la contraseña y el puerto, ahora puede conectarse con su servidor. Ahora que está conectado al servidor FTP que se ejecuta en modo pasivo, puede cargar archivos en el servidor.

Configuración de certificados SSL con el servidor FTP

Por defecto, el servidor FTP establece la conexión entre el cliente y el servidor sobre un canal no garantizado. Este tipo de comunicación no debe usarse si desea compartir datos confidenciales entre el cliente y el servidor. Para comunicarse a través de un canal seguro, es necesario usar certificados SSL.

Generación de certificados SSL

Usaremos certificados SSL para configurar una comunicación segura entre el cliente y el servidor. Generaremos estos certificados usando OpenSSL. El siguiente comando generará certificados SSL para su servidor.

ubuntu@ubuntu: ~ $ sudo openssl req -x509 -nodes -day 365 -newkey rsa: 2048 -keyout/etc/ssl/private/vsftpd.PEM -Out/Etc/SSL/Private/VSFTPD.pem

Cuando ejecute el comando anterior, se le harán algunas preguntas. Después de responder a estas preguntas, se generarán los certificados. Puede verificar los certificados en la terminal.

ubuntu@ubuntu: ~ $ sudo ls/etc/ssl/private/

Uso de certificados en el archivo de configuración

Ahora, nuestros certificados están listos para usar. Configuraremos el 'VSFTPD.Archivo conf 'para usar los certificados SSL para la comunicación. Abra el archivo de configuración con el siguiente comando.

ubuntu@ubuntu: ~ $ sudo nano /etc /vsftpd.confusión

Agregue las siguientes líneas al final de los archivos. Estos cambios asegurarán que el servidor FTP use los certificados SSL recién generados para comunicarse de forma segura con el cliente.

ssl_enable = sí
force_local_data_ssl = no
force_local_logins_ssl = no
ssl_tlsv1 = sí
ssl_sslv2 = no
ssl_sslv3 = no
rsa_cert_file =/etc/ssl/private/vsftpd.pem
rsa_private_key_file =/etc/ssl/private/vsftpd.pem

Reinicie el servidor FTP para aplicar estos cambios.

ubuntu@ubuntu: ~ $ sudo systemctl reiniciar vsftpd

Después de reiniciar el servidor, intente conectarse con su servidor utilizando la aplicación del cliente FileZilla. Esta vez, la solicitud del cliente le preguntará si confía en estos certificados.

Si tiene certificados de una autoridad de certificados de confianza, entonces esta advertencia no debe aparecer. Generamos nuestros certificados utilizando OpenSSL, que no es una autoridad de certificados de confianza, por lo que solicitó la autenticación de certificados en nuestro caso. Ahora, podemos comunicarnos entre el cliente y el servidor a través de un canal seguro.

Configuración anónima

También puede habilitar el inicio de sesión anónimo en su servidor FTP. Con esta configuración habilitada, cualquier usuario puede iniciar sesión en el servidor FTP con cualquier nombre de usuario y contraseña. Los siguientes parámetros en el archivo de configuración harán que el servidor FTP sea accesible de forma anónima.

La configuración anterior establece la ruta raíz para que los usuarios anónimos sean '/home/ubuntu/ftp/anon' y no solicitará la contraseña cuando un usuario anónimo inicie sesión.

NOTA: Asegúrese de que la ruta '/home/ubuntu/ftp/anon' exista en el servidor FTP.

Ahora, reinicie el servidor FTP.

ubuntu@ubuntu: ~ $ sudo systemctl reiniciar vsftpd

Después de reiniciar el servidor, intentaremos conectarnos al servidor a través del navegador Google Chrome. Ir a la siguiente URL.

ftp: // 3.8.12.52

La URL anterior lo llevará al directorio raíz del servidor FTP, como se especifica en el archivo de configuración. Con el inicio de sesión anónimo deshabilitado, cuando intente conectarse al servidor FTP usando un navegador, primero se le solicitará autenticación, y luego se le llevará al directorio raíz del servidor.

Configurar el acceso local

También podemos permitir o bloquear el acceso local al servidor FTP cambiando el archivo de configuración. Actualmente, podemos acceder a nuestro servidor FTP localmente sin usar la aplicación cliente FTP, pero podemos bloquear este acceso. Para hacerlo, debemos modificar el parámetro 'local_enable'.

Primero, reinicie el servidor FTP.

ubuntu@ubuntu: ~ $ sudo systemctl reiniciar vsftpd

Después de reiniciar el servidor, intente acceder al servidor FTP localmente utilizando la interfaz de línea de comandos. Inicie sesión en su servidor remoto usando SSH.

ubuntu@ubuntu: ~ $ ssh [email protected] -I

Ahora, emita el siguiente comando para iniciar sesión en el servidor FTP localmente utilizando la interfaz de línea de comandos.

ubuntu@ubuntu: ~ $ ftp localhost

Cuando ejecute el comando anterior, lanzará un error de 500.

Conclusión

El protocolo de transferencia de archivos se ha utilizado durante muchos años para transferir archivos y documentos a través de Internet. VSFTPD es uno de los paquetes utilizados como servidor FTP en su máquina. VSFTPD contiene varias configuraciones que puede usar para personalizar su servidor FTP. Este tutorial le mostró cómo configurar un servidor FTP con TLS para una seguridad mejorada. Para obtener más información sobre las configuraciones FTP, visite el siguiente enlace.

http: // vsftpd.ganado.org/vsftpd_conf.html