Configurar Servidor FTP Seguro en Ubuntu 18.04 con vsftpd

En este artículo, aprenderás a configurar un servidor FTP en un VPS de Ubuntu. Utilizaremos un servidor vsftpd, que es ampliamente considerado como el servidor FTP más rápido y seguro para sistemas similares a UNIX.

Contenido

¿Qué es FTP?

FTP o File Transfer Protocol, por sus siglas en inglés, es un medio para enviar y recibir archivos a través de una conexión de red. Utilizando un marco de referencia de cliente/servidor y seguridad SSL/TLS, FTP le permite a los usuarios compartir archivos con (y recibir desde) computadoras remotas a través de una transferencia de datos segura, eficiente y confiable (usando los protocolos TCP/IP).

FTP funciona de la misma manera que HTTP (HypertText Transfer Protocol) o SMTP (Simple Mail Transfer Protocol). La diferencia es que el FTP se encarga de transportar archivos a través de Internet, mientras que el HTTP y el SMTP se encargan de transferir páginas web y correos electrónicos, respectivamente.

Antes de empezar, ten en cuenta que te guiaremos en la configuración de un servidor FTP en Ubuntu 18.04. Por lo tanto, debes asegurarte de que tu VPS se ejecuta en ese sistema operativo concreto.

Cómo configurar un servidor FTP en Ubuntu

Este tutorial requiere que sepas cómo conectarte a un servidor a través de SSH. Si tienes el hosting VPS, los datos de acceso están disponibles en la pestaña Servidor del hPanel.

Instalar Vsftpd

Primero que nada, obtengamos las actualizaciones de nuestros paquetes antes de continuar con la instalación del vsftpd. Para comenzar, ejecuta el siguiente comando:

sudo apt-get update

Espera a que se completen todos los procesos y verás una confirmación tan pronto como finalice la actualización.

Cuando termines con esto, instala el daemon vsftpd usando el siguiente comando:

sudo apt-get install vsftpd

Ahora verás un mensaje de confirmación en el que tendrás que escribir Y y presionar Enter para continuar con la instalación.

Una vez completada la instalación, haz una copia de seguridad del archivo original para que podamos comenzar nuestro trabajo con un archivo de configuración en blanco:

sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.original

Ahora estamos listos para dar el siguiente paso y configurar el firewall.

 

Permitir el tráfico FTP desde el firewall

Para permitir que el servidor FTP de Ubuntu se comunique a través del Internet, tiene que atravesar el firewall. Primero veamos si el firewall está activado en la máquina o no. Simplemente ejecuta el siguiente comando para verificar el estado:

sudo ufw status

Si ves el siguiente mensaje:

ufw: command not found

Significa que el firewall no está instalado. Puedes instalarlo y habilitarlo escribiendo:

sudo apt-get install ufw
sudo ufw enable

Si ya está activo, todavía tienes que asegurarte de que el tráfico FTP esté permitido. Para ello, ejecuta los siguientes comandos uno a uno:

sudo ufw allow 20/tcp
sudo ufw allow 21/tcp
sudo ufw allow 990/tcp
sudo ufw allow 40000:50000/tcp

Esta serie de comandos abrirá varios puertos:

  • OpenSSH es necesario si todavía quieres acceder a tu servidor a través de SSH. A veces, esta opción está activada por defecto.
  • Los puertos 20 y 21 para el tráfico FTP.
  • Los puertos 40000:50000 se reservarán para el rango de puertos pasivos que eventualmente se establecerá en el archivo de configuración.
  • El puerto 990 se utilizará cuando se active el TLS.

Ahora veamos el estado de nuevo:

sudo ufw status

El resultado debería ser algo así:

Status: active

To Action From


990/tcp ALLOW Anywhere

20/tcp ALLOW Anywhere

21/tcp ALLOW Anywhere

40000:50000/tcp ALLOW Anywhere

20/tcp (v6) ALLOW Anywhere (v6)

21/tcp (v6) ALLOW Anywhere (v6)

990/tcp (v6) ALLOW Anywhere (v6)

40000:50000/tcp (v6) ALLOW Anywhere (v6)

 

Crear el directorio de usuarios

Una vez configurado el firewall, debemos crear el usuario que va a utilizar el acceso FTP. Para crearlo, usa el siguiente comando:

sudo adduser nombre_usuario

Recuerda cambiar el nombre de usuario según tus preferencias.

Cuando el sistema te pregunte, ingresa una contraseña para el usuario y completa todos los demás detalles. Lo ideal es que el FTP se restrinja a un directorio específico por motivos de seguridad. Vsftpd usa jaulas chroot para lograr esto. Con chroot habilitado, un usuario local está restringido a su directorio de inicio (por defecto). Sin embargo, es posible que debido a la seguridad de vsftpd, un usuario no pueda escribir en el directorio. No eliminaremos los privilegios de escritura de la carpeta de inicio; en su lugar, crearemos un directorio ftp que actuará como chroot junto con un directorio de archivos modificables que será responsable de mantener los archivos pertinentes. Usa el siguiente comando para crear la carpeta FTP:

sudo mkdir /home/nombre_usuario/ftp

Establece la propiedad usando:

sudo chown nobody:nogroup /home/nombre_usuario/ftp

Finalmente, elimina los permisos de escritura:

sudo chmod a-w /home/nombre_usuario/ftp

Ahora, usa el siguiente comando para verificar los permisos:

sudo ls -la /home/nombre_usuario/ftp

El resultado debería ser algo así:

total 8
dr-xr-xr-x 2 nobody nogroup 4096 Jun 29 11:32 .
drwxr-xr-x 3 nombre_usuario nombre_usuario 4096 Jun 29 11:32 ..

Como paso siguiente, crearemos el directorio contenedor de archivos y asignaremos la propiedad:

sudo mkdir /home/nombre_usuario/ftp/files
sudo chown nombre_usuario:nombre_usuario /home/nombre_usuario/ftp/files

Finalmente, agrega un archivo de prueba al directorio el cual se usará cuando probemos todo más adelante:

echo "vsftpd sample file" | sudo tee /home/nombre_usuario/ftp/files/sample.txt

Configurar vsftpd

El siguiente paso en nuestra apuesta por configurar un servidor FTP en Ubuntu VPS, es configurar vsftpd y nuestro acceso FTP. En este tutorial, permitiremos que un solo usuario se conecte con FTP utilizando una cuenta shell local. Las dos configuraciones clave requeridas para esto ya están establecidas en el archivo de configuración (vsftpd.conf).

En primer lugar, verifica que el archivo de configuración tenga una configuración que coincida con las mencionadas a continuación utilizando el comando nano:

sudo nano /etc/vsftpd.conf

Comprueba que el contenido tiene una configuración similar a ésta:

. . .
# Allow anonymous FTP? (Disabled by default).
anonymous_enable=NO
#
# Uncomment this to allow local users to log in.
local_enable=YES
. . .

En el mismo archivo, procederemos a eliminar # y a habilitar el write_enable:

. . .
write_enable=YES
. . ..

Chroot tampoco se comentará para asegurarte de que el usuario FTP sólo accede a los archivos dentro del directorio permitido. Cambia también el valor NO por SÍ. Ten en cuenta que hay dos líneas como ésta, y tienes que descomentar ambas.

. . .
chroot_local_user=YES
. . .

Hay algunos valores nuevos que también debes añadir al final del archivo. En primer lugar, se agregará un user_sub_token en la ruta del directorio local_root. Esto permitirá que la configuración funcione con el usuario actual y con cualquier otro usuario que se agregue posteriormente:

user_sub_token=$USER
local_root=/home/$USER/ftp

Para garantizar que haya una cantidad considerable de conexiones disponibles, limitaremos la cantidad de puertos utilizados en el archivo de configuración:

pasv_min_port=40000
pasv_max_port=50000

En este tutorial, planeamos permitir el acceso caso por caso, así que ajustemos la configuración de forma tal que el acceso solo se otorgue a los usuarios que se hayan agregado explícitamente a una lista:

userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO

El flag userlist_deny es el responsable de alternar la lógica; cuando se establece en NO, solo se permitirá el acceso a los usuarios especificados en la lista. Una vez hecho esto, haz clic en CTRL+X y confirma los cambios del archivo.

Por último, procederemos con la creación y adición de nuestro usuario al archivo:

echo "nombre_usuario" | sudo tee -a /etc/vsftpd.userlist

Verifica que el usuario esté realmente activo ejecutando el siguiente comando:

cat /etc/vsftpd.userlist

El resultado debe ser «nombre_usuario» como se muestra en esta captura de pantalla:

Reinicia el daemon utilizando el siguiente comando para cargar los cambios de configuración:

sudo systemctl restart vsftpd

 

Hacer que el FTP sea seguro

Por defecto, FTP no hace ninguna encriptación de datos, por eso utilizaremos TTL/SSL para garantizar la seguridad. En primer lugar, debemos crear el certificado SSL y usarlo para proteger el servidor FTP de Ubuntu. Para comenzar, usa el siguiente comando:

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

El flag -days hace que el certificado sea válido por un año y hemos incluido una clave privada RSA de 2048 bits en el mismo comando.

Una vez sean solicitados, ingresa los datos personales correspondientes en el campo provisto. Cuando termines de crear el certificado, abre nuevamente el archivo de configuración:

sudo nano /etc/vsftpd.conf

El final del archivo debe contener dos líneas que comiencen con «_rsa«. Comenta ambas líneas así:

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

En lugar de eso, apuntemos el archivo de configuración al certificado que acabamos de crear. Añade los siguientes direcciones justo debajo de las líneas anteriores:

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

Ahora habilitaremos SSL y nos aseguraremos de que solo los clientes que tengan SSL habilitados nos puedan contactar. Cambia el valor de ssl_enable a YES:

ssl_enable=YES

A continuación agrega las siguientes líneas para prohibir cualquier conexión anónima a través de SSK

allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES

Configura el servidor para usar TLS usando:

ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO

Ahora cambiaremos 2 opciones más. En primer lugar, no será necesario reutilizar SSL porque puede ocasionar que muchos clientes de FTP se averíen. En segundo lugar, utilizaremos suites de encriptación de alto cifrado, lo que significa que las longitudes de claves son iguales o superiores a 128 bits.

require_ssl_reuse=NO
ssl_ciphers=HIGH

Vuelve a guardar el archivo pulsando CTRL+X seguido de Y, y luego pulsa Intro.

Vamos a reiniciar vsftpd una vez más para aplicar las nuevas configuraciones:

sudo systemctl restart vsftpd

 

Prueba de conexiones con FileZilla

Hoy en día, la mayoría de los clientes de FTP admiten configuraciones de cifrado TLS, por lo que es una excelente manera de comprobar si tu servidor FTP de Ubuntu funciona según lo previsto. Para probar la conexión, utilizaremos un cliente FTP de FileZilla.

Para comenzar inicia FileZilla y haz clic en el icono de Site Manager. Luego haz clic en el botón New Site en la ventana que aparece para comenzar a ingresar los detalles del servidor FTP de Ubuntu.

Completa todos los detalles requeridos con tu información del servidor FTP de Ubuntu recién creada. Como lo configuramos para usar TLS, también podemos marcar el cifrado para que sea explícitamente FTP sobre TLS. La configuración final debería verse así:

Cuando esté listo, haz clic en Connect y aparecerá una pantalla que te pedirá ingresar la contraseña del usuario de FTP. Finalmente, tendrás que verificar el certificado SSL de tu servidor FTP en Ubuntu VPS.

Después de confirmar, el directorio raíz con el archivo de prueba debería aparecer en tu pantalla.

¡Eso es todo! Ahora puedes realizar transferencias de archivos desde tu computadora al servidor FTP de Ubuntu y viceversa.

 

Conclusión

Tener un servidor FTP Ubuntu te facilita compartir archivos entre tu VPS/servidor de Ubuntu y tu ordenador. Es un método seguro y fiable de transferencia de datos, gracias a la seguridad SSL/TLS y al protocolo TCP/IP.

En este tutorial, has aprendido a configurar un servidor FTP en Ubuntu 18.04 utilizando vsftpd. Hay cinco pasos que debes seguir. Vamos a verlos una vez más.

  1. Instala vsftpd en tu servidor Ubuntu y haz una copia de seguridad del archivo de configuración original.
  2. Permite las conexiones FTP a través del cortafuegos.
  3. Crea un directorio de usuarios al que sólo puedan acceder los usuarios especificados.
  4. Configura vsftpd.
  5. Asegura el servidor FTP.
  6. Prueba tu conexión FTP con FileZilla.

Buena suerte, y no dejes de consultar nuestros otros tutoriales sobre VPS.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir