GNU/Linux >> Tutoriales Linux >  >> Ubuntu

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

FTPd puro es un servidor FTP gratuito de código abierto diseñado teniendo en cuenta la seguridad. En este tutorial, veremos cómo configurar un servidor FTP seguro en un servidor Ubuntu con Pure-FTPd y cómo aplicar el cifrado TLS.

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

Características de FTPd puro:

  • Es compatible con el cifrado SSL/TLS y, por lo tanto, se pueden proteger las contraseñas y los comandos.
  • Puede ejecutarse en la mayoría de los sistemas similares a Unix:Linux, BSD, Solaris, Darwin, HPUX, AIX e incluso iPhone.
  • Disponible en 21 idiomas.
  • Le permite monitorear las sesiones activas.
  • Admite un sistema de cuotas virtuales.
  • Y mucho más

Para obtener una lista completa de funciones, visite el sitio web oficial de Pure-FTPd.

Paso 1:Instale Pure-FTPd en el servidor Ubuntu

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

sudo apt install pure-ftpd

Una vez instalado, Pure-FTPd se iniciará automáticamente, como se puede 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: enabled indica que se iniciará automáticamente en el momento del arranque del sistema. Si no se está ejecutando, marque con una estrella:

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

El acceso anónimo está deshabilitado de forma predeterminada. A partir de ahora, puede utilizar su cuenta del sistema para iniciar sesión, pero el FTP de texto sin formato es inseguro y se desaconseja encarecidamente. Para tener un servidor FTP seguro, necesitamos encriptar la comunicación con TLS.

Paso 2:aplicar el cifrado TLS

Para habilitar el cifrado de texto sin formato y TLS, ejecute el siguiente comando, que crea el /etc/pure-ftpd/conf/TLS archivo y poner el número 1 en el archivo.

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

Pero se recomienda deshabilitar el texto sin formato y usar solo el cifrado TLS, así que coloque el número 2 en el archivo en su lugar.

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

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

Paso 3:obtenga un certificado TLS de confianza de Let's Encrypt

Ejecute el siguiente comando para instalar el cliente Let's Encrypt (certbot) desde el repositorio predeterminado de Ubuntu.

sudo apt install certbot

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

Complemento independiente

Si no hay un servidor web ejecutándose en su servidor Ubuntu, puede usar el complemento independiente. Ejecute el siguiente comando. No olvide establecer un registro DNS A para su subdominio.

sudo certbot certonly --standalone --preferred-challenges http --agree-tos --email [email protected] -d ftp.example.com

donde:

  • certonly :Obtenga un certificado pero no lo instale.
  • --standalone :use el complemento independiente para obtener un certificado
  • --preferred-challenges http :Realice el desafío http-01 para validar nuestro dominio, que utilizará el puerto 80.
  • --agree-tos :Acepte los términos 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 puede ver en la siguiente captura de pantalla, obtuve el certificado con éxito.

Uso del complemento webroot

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

Primero, debe crear un host virtual para ftp.example.com .

Apache

Si está utilizando Apache, entonces

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

Y pegue las siguientes líneas en el archivo.

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

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

Guarde y cierre el archivo. Luego cree el directorio raíz 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

Habilite este servidor virtual.

sudo a2ensite ftp.example.com

Vuelva a cargar Apache para que los cambios surtan efecto.

sudo systemctl reload apache2

Una vez que se crea y habilita el host virtual, ejecute el siguiente comando para obtener el certificado Let's Encrypt usando el complemento webroot.

sudo certbot certonly --webroot --agree-tos --email [email protected] -d ftp.example.com -w /var/www/Pure-FTPd

Nginx

Si está utilizando Nginx, entonces

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

Pegue 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;
      }
}

Guarde y cierre el archivo. Luego cree el directorio raíz web.

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

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

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

Vuelva a cargar Nginx para que los cambios surtan efecto.

sudo systemctl reload nginx

Una vez que se crea y habilita el host virtual, ejecute el siguiente comando para obtener el certificado Let's Encrypt usando el complemento webroot.

sudo certbot certonly --webroot --agree-tos --email [email protected] -d ftp.example.com -w /var/www/Pure-FTPd

Paso 4:Instale el certificado

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

Cambie a /etc/letsencrypt/live/ftp.example.com/ directorio.

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

Puedes usar cat comando 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úrese de que solo el usuario raíz pueda 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 su servidor tiene un solo núcleo de CPU, esto llevará mucho tiempo (alrededor de 10 minutos).

Una vez hecho esto, reinicie Pure-FTPd.

sudo systemctl restart pure-ftpd

Verifique el estado para ver si se está ejecutando.

systemctl status pure-ftpd

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

Si usa el administrador de archivos Nautilus para conectarse al servidor FTP a través de texto sin formato ftp:// protocolo

La conexión será rechazada.

En lugar de ftp:// , debe usar ftps:// .

De forma predeterminada, los usuarios de FTP serán llevados a / directorio raíz en el servidor.

Tenga en cuenta que Filezilla no confía en ningún certificado (autofirmado o firmado por CA) de forma predeterminada. Los usuarios deben elegir confiar en el certificado por sí mismos.

Advertencia de certificado desconocido de FileZilla

Y necesita usar el protocolo TLS explícito de FTP (ftpes://ftp.example.com ) en Filezilla.

Certificado TLS de renovación automática

Puede crear un trabajo Cron para renovar automáticamente el certificado TLS. Simplemente abra el archivo crontab del usuario root.

sudo crontab -e

Agregue 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 volver a cargar pure-ftpd para que recoja el nuevo certificado y la clave privada.


Ubuntu
  1. Cómo configurar un servidor FTP en su Raspberry Pi

  2. Cómo instalar un servidor FTP en Ubuntu con vsftpd

  3. Cómo configurar un servidor FTP con VSFTPD en Ubuntu 20.04

  4. Cómo proteger Nginx con Letsencrypt en Ubuntu 20.04

  5. Cómo instalar un servidor FTP en Ubuntu 20.04

Cómo configurar rápidamente un servidor de correo en Ubuntu 20.04 con Modoboa

Cómo configurar la sincronización de tiempo con NTP en Ubuntu 18.04

Cómo configurar un servidor Seafile con Nginx en Ubuntu 18.04

Cómo configurar un servidor FTP con ProFTPD en Ubuntu 18.04

Cómo configurar un servidor de correo con Modoboa en Ubuntu 20.04

Cómo proteger Nginx con Let's Encrypt en Ubuntu 20.04