Cómo configurar un servidor FTP seguro con Pure-FTPd en Ubuntu 20.04

Pure-FTPd es un servidor FTP gratuito de código abierto diseñado pensando en la seguridad. En este tutorial, vamos a echar un vistazo a cómo configurar un servidor FTP seguro en el servidor Ubuntu con Pure-FTPd y cómo aplicar el cifrado TLS.

Nota: Este tutorial funciona en todas las versiones actuales de Ubuntu, incluyendo Ubuntu 20.04, 18.04 y 21.04.

Cómo configurar un servidor FTP seguro

Características de Pure-FTPd:

  • Soporta encriptación SSL/TLS y, por lo tanto, las contraseñas y los comandos pueden ser protegidos.
  • Puede funcionar en la mayoría de los sistemas tipo Unix: Linux, BSDs, Solaris, Darwin, HPUX, AIX, e incluso iPhone.
  • Está disponible en 21 idiomas.
  • Permite supervisar las sesiones activas.
  • Soporta un sistema de cuotas virtual.
  • Y mucho más

Para una lista completa de características, por favor vaya al sitio web oficial de Pure-FTPd.

Cómo configurar un servidor FTP seguro con Pure-FTPd

Paso 1: Instalar Pure-FTPd en el servidor Ubuntu

Está en el repositorio de software, así que escribe el siguiente comando para instalar el servidor FTP.

sudo apt install pure-ftpd

Una vez instalado, Pure-FTPd se iniciará automáticamente, como puedes ver con este comando:

systemctl status pure-ftpd

Salida:

● pure-ftpd.service
   Loaded: loaded (/etc/init.d/pure-ftpd; bad; vendor preset: enabled)
   Active: active (running) since Mon 2016-12-12 21:51:46 EST; 23s ago
     Docs: man:systemd-sysv-generator(8)
   CGroup: /system.slice/pure-ftpd.service
           └─3435 pure-ftpd (SERVER)

preset: habilitado indica que se iniciará automáticamente al arrancar el sistema. Si no se está ejecutando, inícialo con:

sudo systemctl start pure-ftpd

Y está escuchando en el puerto TCP 21, que es el puerto de control, como se puede ver con

sudo netstat -lnpt | grep pure-ftpd
pure-ftpd secure ftp server

El acceso anónimo está desactivado por defecto. A partir de ahora puedes usar tu cuenta del sistema para acceder, pero el FTP en texto plano es inseguro y está totalmente desaconsejado. Para tener un servidor FTP seguro, necesitamos encriptar la comunicación con TLS.

Paso 2: Aplicar el cifrado TLS

Para habilitar tanto el cifrado de texto plano como el TLS, ejecute el siguiente comando, que crea el archivo /etc/pure-ftpd/conf/TLS y pone el número 1 en el archivo.

echo 1 | sudo tee /etc/pure-ftpd/conf/TLS

Pero se recomienda desactivar el texto plano y utilizar sólo el cifrado TLS, así que pon el número 2 en el archivo.

echo 2 | sudo tee /etc/pure-ftpd/conf/TLS

Ahora que hemos implementado TLS, necesitamos obtener un certificado TLS válido. No se recomienda un certificado autofirmado porque los usuarios verán una advertencia como la de la captura de pantalla siguiente.

nautilus ftps

Paso 3: Obtener un certificado TLS de confianza de Let’s Encrypt

Ejecute el siguiente comando para instalar el cliente de Let’s Encrypt (certbot) desde el repositorio por defecto de Ubuntu.

sudo apt install certbot

Recomiendo usar el plugin standalone o webroot para obtener el certificado TLS para Pure-FTPd.

Plugin independiente

Si no hay un servidor web funcionando en tu servidor Ubuntu, puedes usar el plugin independiente. Ejecute el siguiente comando. No olvides establecer el registro DNS A para tu subdominio.

sudo certbot certonly --standalone --preferred-challenges http --agree-tos --email you@example.com -d ftp.example.com

Donde:

  • certonly: Obtenga un certificado pero no lo instale.
  • --standalone: Utilice el plugin independiente para obtener un certificado
  • --preferred-challenges http: Realizar el desafío http-01 para validar nuestro dominio, que utilizará el puerto 80.
  • --agree-tos: Aceptar las condiciones de servicio de Let’s Encrypt.
  • --email: La dirección de correo electrónico se utiliza para el registro y la recuperación de la cuenta.
  • -d: Especifique su nombre de dominio.

Como puedes ver en la siguiente captura de pantalla, obtuve el certificado con éxito.

Uso del plugin de webroot

Si su servidor Ubuntu tiene un servidor web, entonces es una buena idea usar el plugin de webroot para obtener un certificado porque el plugin de webroot funciona con casi todos los servidores web y no necesitamos instalar el certificado en el servidor web.

En primer lugar, hay que crear un host virtual para ftp.tu-dominio.com.

Apache

Si estás utilizando Apache, entonces

sudo nano /etc/apache2/sites-available/ftp.example.com.conf

Y pega las siguientes líneas en el archivo.

<VirtualHost *:80>        
        ServerName ftp.example.com

        DocumentRoot /var/www/Pure-FTPd
</VirtualHost>

Guarda y cierra el archivo. A continuación, crea el directorio raíz de la web.

sudo mkdir /var/www/Pure-FTPd

Establezca www-data (usuario de Apache) como propietario de la raíz web.

sudo chown www-data:www-data /var/www/Pure-FTPd -R

Habilitar este host virtual.

sudo a2ensite ftp.example.com

Recarga Apache para que los cambios surtan efecto.

sudo systemctl reload apache2

Una vez creado y habilitado el host virtual, ejecute el siguiente comando para obtener el certificado Let’s Encrypt utilizando el plugin de webroot.

sudo certbot certonly --webroot --agree-tos --email you@exmaple.com -d ftp.example.com -w /var/www/Pure-FTPd

Nginx

Si estás usando Nginx, entonces

sudo nano /etc/nginx/conf.d/ftp.example.com.conf

Pega las siguientes líneas en el archivo.

server {
      listen 80;
      listen [::]:80;
      server_name ftp.example.com;

      root /var/www/Pure-FTPd/;

      location ~ /.well-known/acme-challenge {
         allow all;
      }
}

Guarda y cierra el archivo. A continuación, crea el directorio raíz de la web.

sudo mkdir -p /var/www/Pure-FTPd

Establece www-data (usuario Nginx) como propietario de la raíz web.

sudo chown www-data:www-data /var/www/Pure-FTPd -R

Recarga Nginx para que los cambios surtan efecto.

sudo systemctl reload nginx

Una vez creado y habilitado el host virtual, ejecute el siguiente comando para obtener el certificado Let’s Encrypt utilizando el plugin de webroot.

sudo certbot certonly --webroot --agree-tos --email you@exmaple.com -d ftp.example.com -w /var/www/Pure-FTPd

Paso 4: Instalar el certificado

Pure-FTPd requiere que el certificado y la clave privada se combinen en un archivo llamado pure-ftpd.pem y se almacenen en el directorio /etc/ssl/private/.

Cambia al directorio /etc/letsencrypt/live/ftp.example.com/.

cd /etc/letsencrypt/live/ftp.example.com/

Puedes utilizar el comando cat para combinar dos archivos en uno, como se muestra a continuación.

sudo cat fullchain.pem privkey.pem | sudo tee /etc/ssl/private/pure-ftpd.pem

Asegúrate de que sólo el usuario root puede leer el archivo.

sudo chmod 600 /etc/ssl/private/pure-ftpd.pem

necesitamos generar el parámetro Diffie-Hellman con:

sudo openssl dhparam -out /etc/ssl/private/pure-ftpd-dhparams.pem 4096

Si tu servidor tiene un solo núcleo de CPU, esto va a llevar mucho tiempo (unos 10 minutos).

Una vez hecho esto, reinicia Pure-FTPd.

sudo systemctl restart pure-ftpd

Comprueba el estado para ver si está funcionando.

systemctl status pure-ftpd

Ahora puede conectarse a su servidor FTP a través de TLS.

Renovación automática del certificado TLS

Puedes crear una tarea Cron para renovar automáticamente el certificado TLS. Simplemente abre el archivo crontab del usuario root.

sudo crontab -e

Añade la siguiente línea al final del archivo.

@daily certbot renew --quiet && cd /etc/letsencrypt/live/ftp.example.com/ && cat fullchain.pem privkey.pem | tee /etc/ssl/private/pure-ftpd.pem && systemctl reload pure-ftpd

Es necesario recargar pure-ftpd para que recoja el nuevo certificado y la clave privada.

Create New FTP User

Crea un usuario de sistema, cambia “usuario” por el nombre de usuario,

adduser usuario

Te preguntara la contraseña y que confirmes contraseña y luego una serie de información de puedes dejar vacía. Cambia el directorio raíz del usuario para que al acceder por FTP solo tenga acceso a esa carpeta. Sustituye el texto en azul por tus datos, directorio home y usuario.

usermod -d /var/www/html usuario

Cuando accedas pro FTP usando tu cliente FTP favorito entraras en el directorio que hayas definido para este usuario.

Ahora ya puedes acceder a tus sitios web por FTP si prefieres este método o puedes montar un FTP para compartir con clientes y que suban contenido, aunque para este propósito yo usaría un almacenamiento compartido como NextCloud.

¡Que tengas un Ingenioso día!

¡que tengas un ingenioso día!

Contrata tu plan Ingenios@ de Sistemas por 5€ al mes y responderé a todas tus preguntas sobre tecnología en el menor tiempo posible. Pasa a formar parte de la comunidad Ingenios@s de Sistemas y disfruta de contenido exclusivo y aprende sobre sistemas Open Source, Blockchain, SmarContract, Web3, Inteligencia Artificial y Reaidad Virtual, súbete al tren de la Revolución 4.0

Si quieres estar al día y no perderte nada Suscribete al Podcast Ingenios@s de Sistemas, un episodio diario que te mantendrá informado y formado en esta vertiginosa carrera.

Deja un comentario

Share to...