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.
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
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.
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.