FTPd puro è un server FTP open source gratuito progettato pensando alla sicurezza. In questo tutorial, daremo un'occhiata a come configurare un server FTP sicuro su un server Ubuntu con Pure-FTPd e come applicare la crittografia TLS.
Nota :questo tutorial funziona su tutte le versioni correnti di Ubuntu, incluso Ubuntu 20.04, 18.04 e 21.04.
Funzionalità FTPd pure:
- Supporta la crittografia SSL/TLS e quindi password e comandi possono essere protetti.
- Può funzionare sulla maggior parte dei sistemi simili a Unix:Linux, BSD, Solaris, Darwin, HPUX, AIX e persino iPhone.
- Disponibile in 21 lingue.
- Ti permette di monitorare le sessioni attive.
- Supporta un sistema di quote virtuali.
- E molto altro
Per un elenco completo delle funzionalità, visitare il sito Web ufficiale di Pure-FTPd.
Passaggio 1:installa Pure-FTPd su Ubuntu Server
È nel repository del software, quindi emetti il seguente comando per installare il server FTP.
sudo apt install pure-ftpd
Una volta installato, Pure-FTPd verrà avviato automaticamente, come si può vedere con questo comando:
systemctl status pure-ftpd
Uscita:
● 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 che si avvierà automaticamente all'avvio del sistema. Se non è in esecuzione, contrassegnalo con:
sudo systemctl start pure-ftpd
Ed è in ascolto sulla porta TCP 21, che è la porta di controllo, come si può vedere con
sudo netstat -lnpt | grep pure-ftpd
L'accesso anonimo è disabilitato per impostazione predefinita. D'ora in poi puoi utilizzare il tuo account di sistema per accedere, ma l'FTP in testo semplice non è sicuro e fortemente sconsigliato. Per avere un server FTP sicuro, dobbiamo crittografare la comunicazione con TLS.
Passaggio 2:applica la crittografia TLS
Per abilitare la crittografia sia in testo normale che TLS, esegui il comando seguente, che crea il /etc/pure-ftpd/conf/TLS
file e inserisci il numero 1 nel file.
echo 1 | sudo tee /etc/pure-ftpd/conf/TLS
Tuttavia, ti consigliamo di disabilitare il testo normale e di utilizzare solo la crittografia TLS, quindi inserisci invece il numero 2 nel file.
echo 2 | sudo tee /etc/pure-ftpd/conf/TLS
Ora abbiamo applicato il TLS, dobbiamo ottenere un certificato TLS valido. Un certificato autofirmato non è consigliato perché gli utenti vedranno avvisi come lo screenshot qui sotto.
Fase 3:ottieni un certificato TLS affidabile da Let's Encrypt
Esegui il comando seguente per installare il client Let's Encrypt (certbot) dal repository Ubuntu predefinito.
sudo apt install certbot
Consiglio di utilizzare il standalone
o webroot
plug-in per ottenere il certificato TLS per Pure-FTPd.
Plugin autonomo
Se non è presente alcun server Web in esecuzione sul tuo server Ubuntu, puoi utilizzare il plug-in autonomo. Esegui il comando seguente. Non dimenticare di impostare il record DNS A per il tuo sottodominio.
sudo certbot certonly --standalone --preferred-challenges http --agree-tos --email [email protected] -d ftp.example.com
Dove:
certonly
:Ottieni un certificato ma non installarlo.--standalone
:usa il plugin standalone per ottenere un certificato--preferred-challenges http
:esegui la verifica http-01 per convalidare il nostro dominio, che utilizzerà la porta 80.--agree-tos
:Accetta i termini di servizio di Let's Encrypt.--email
:l'indirizzo e-mail viene utilizzato per la registrazione e il recupero dell'account.-d
:Specifica il tuo nome di dominio.
Come puoi vedere dallo screenshot seguente, ho ottenuto con successo il certificato.
Utilizzo del plug-in webroot
Se il tuo server Ubuntu ha un server web, è una buona idea usare il plugin webroot per ottenere un certificato perché il plugin webroot funziona praticamente con tutti i server web e non abbiamo bisogno di installare il certificato nel server web.
Innanzitutto, devi creare un host virtuale per ftp.example.com
.
Apache
Se stai usando Apache, allora
sudo nano /etc/apache2/sites-available/ftp.example.com.conf
E incolla le seguenti righe nel file.
<VirtualHost *:80> ServerName ftp.example.com DocumentRoot /var/www/Pure-FTPd </VirtualHost>
Salva e chiudi il file. Quindi crea la directory principale web.
sudo mkdir /var/www/Pure-FTPd
Imposta www-data (utente Apache) come proprietario della radice web.
sudo chown www-data:www-data /var/www/Pure-FTPd -R
Abilita questo host virtuale.
sudo a2ensite ftp.example.com
Ricarica Apache per rendere effettive le modifiche.
sudo systemctl reload apache2
Una volta creato e abilitato l'host virtuale, esegui il comando seguente per ottenere il certificato Let's Encrypt utilizzando il plug-in webroot.
sudo certbot certonly --webroot --agree-tos --email [email protected] -d ftp.example.com -w /var/www/Pure-FTPd
Nginx
Se stai usando Nginx, allora
sudo nano /etc/nginx/conf.d/ftp.example.com.conf
Incolla le seguenti righe nel file.
server { listen 80; listen [::]:80; server_name ftp.example.com; root /var/www/Pure-FTPd/; location ~ /.well-known/acme-challenge { allow all; } }
Salva e chiudi il file. Quindi crea la directory principale web.
sudo mkdir -p /var/www/Pure-FTPd
Imposta www-data (utente Nginx) come proprietario della radice web.
sudo chown www-data:www-data /var/www/Pure-FTPd -R
Ricarica Nginx per rendere effettive le modifiche.
sudo systemctl reload nginx
Una volta creato e abilitato l'host virtuale, esegui il comando seguente per ottenere il certificato Let's Encrypt utilizzando il plug-in webroot.
sudo certbot certonly --webroot --agree-tos --email [email protected] -d ftp.example.com -w /var/www/Pure-FTPd
Fase 4:installa il certificato
Pure-FTPd richiede che il certificato e la chiave privata siano combinati in un unico file denominato pure-ftpd.pem
e archiviato in /etc/ssl/private/
directory.
Passa a /etc/letsencrypt/live/ftp.example.com/
directory.
cd /etc/letsencrypt/live/ftp.example.com/
Puoi usare cat
comando per combinare due file in uno come di seguito.
sudo cat fullchain.pem privkey.pem | sudo tee /etc/ssl/private/pure-ftpd.pem
Assicurati che solo l'utente root possa leggere il file.
sudo chmod 600 /etc/ssl/private/pure-ftpd.pem
dobbiamo generare il parametro Diffie-Hellman con:
sudo openssl dhparam -out /etc/ssl/private/pure-ftpd-dhparams.pem 4096
Se il tuo server ha un singolo core della CPU, ci vorrà molto tempo (circa 10 minuti).
Una volta fatto, riavvia Pure-FTPd.
sudo systemctl restart pure-ftpd
Controlla lo stato per vedere se è in esecuzione.
systemctl status pure-ftpd
Ora puoi connetterti al tuo server FTP tramite TLS.
Se utilizzi il file manager Nautilus per connetterti al server FTP tramite testo normale ftp://
protocollo
La connessione verrà rifiutata.
Invece di ftp://
, devi usare ftps://
.
Per impostazione predefinita, gli utenti FTP verranno indirizzati a /
directory principale sul server.
Tieni presente che Filezilla non considera attendibile alcun certificato (autofirmato o firmato da un'autorità di certificazione) per impostazione predefinita. Gli utenti devono scegliere di fidarsi del certificato per se stessi.
Avviso certificato FileZilla sconosciuto
E devi usare il protocollo FTP esplicito TLS (ftpes://ftp.example.com
) in Filezilla.
Rinnovo automatico del certificato TLS
Puoi creare un lavoro Cron per rinnovare automaticamente il certificato TLS. Basta aprire il file crontab dell'utente root.
sudo crontab -e
Aggiungi la seguente riga in fondo al file.
@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
È necessario ricaricare pure-ftpd per fargli prelevare il nuovo certificato e la chiave privata.