FTPd puro è un server FTP open source gratuito progettato pensando alla sicurezza. In questo tutorial impareremo come configurare un server FTP su Debian 10 con Pure-FTPd e come applicare la crittografia TLS.
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.
Fase 1:installa Pure-FTPd su Debian 10 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; 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)
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 ss -lnpt | grep pure-ftpd
L'altra porta è la porta dati (porta TCP 20), che verrà utilizzata quando un utente trasferisce file su FTP.
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 normale 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 un messaggio di avviso 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 Debian 10 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 ci sono server web in esecuzione sul tuo server Debian 10, puoi usare il plugin standalone. 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 Debian 10 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.
sudo su - cd /etc/letsencrypt/live/ftp.example.com/
Puoi usare cat
comando per combinare due file in uno come di seguito.
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.
Fase 5:apri le porte FTP nel firewall
Se utilizzi il firewall UFW, esegui il comando seguente per aprire le porte TCP 20 e 21.
sudo ufw allow 20,21/tcp
Fase 6:connettiti al server FTP
Se usi Nautilus file manager per connettersi 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 di certificato sconosciuto FileZilla
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.