GNU/Linux >> Tutoriales Linux >  >> Debian

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

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

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 Debian 10

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; generated)
   Active: active (running) since Wed 2021-06-16 13:15:52 UTC; 23s ago
     Docs: man:systemd-sysv-generator(8)
    Tasks: 1 (limit: 558)
   Memory: 972.0K
   CGroup: /system.slice/pure-ftpd.service
           └─9223 pure-ftpd (SERVER)

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 ss -lnpt | grep pure-ftpd

El otro puerto es el puerto de datos (puerto TCP 20), que se utilizará cuando un usuario transfiera archivos a través de FTP.

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 un mensaje de advertencia como el de 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 Debian 10.

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 Debian 10, 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 Debian 10 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.

sudo su -

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

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

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.

Paso 5:abrir puertos FTP en el cortafuegos

Si usa el firewall UFW, ejecute el siguiente comando para abrir los puertos TCP 20 y 21.

sudo ufw allow 20,21/tcp

Paso 6:Conéctese al servidor FTP

Si utiliza Nautilus administrador de archivos 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 recargar pure-ftpd para que recoja el nuevo certificado y la clave privada.


Debian
  1. Cómo configurar un cortafuegos con UFW en Debian 10

  2. Cómo instalar el servidor FTP vsftpd y asegurarlo con TLS en Debian 11

  3. Cómo configurar un servidor SFTP en Debian 11 Server

  4. Cómo configurar un servidor OpenVPN en Debian 10

  5. Configurar un servidor de correo con PostfixAdmin en Debian 9

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

Cómo configurar LAMP con Debian 11

Cómo configurar el servidor Samba con Debian 11

Cómo instalar el servidor vsftpd en Debian 11

Cómo instalar un servidor FTP en Debian 10

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