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.