Configurare un server FTP sicuro con vsftpd su Linux

"Very Secure FTP Daemon" è un nome plateale per un software, ma vsftpd lo guadagna sul serio: è stato scritto da zero con la sicurezza come primo obiettivo di design, non aggiunta dopo. Non è un caso che sia il server FTP di default su Red Hat e derivate — quando un progetto punta a essere lo standard enterprise, la sicurezza-first non è un vezzo, è un requisito.
Il controsenso interessante è che FTP, il protocollo in sé, è vecchio e insicuro: username e password viaggiano in chiaro per default, chiunque sniffi il traffico li vede senza sforzo. vsftpd risolve il problema aggiungendo il supporto nativo a SSL/TLS (la variante si chiama FTPS, non FTP), ma se puoi scegliere da zero, SFTP — che gira su SSH, un protocollo completamente diverso nonostante il nome simile — evita il problema alla radice invece di rattopparlo.
La configurazione vive tutta in un unico file, /etc/vsftpd.conf, e la direttiva che conta più di ogni altra è il chroot: senza, un utente autenticato può risalire l'albero delle directory e vedere file che non gli appartengono. Con il chroot attivo, ogni utente è confinato dentro la propria home e non può nemmeno immaginare che esista altro sul filesystem.
Disabilitare l'accesso anonimo, che di default in molte distribuzioni è ancora acceso per compatibilità storica, è il primo passo che qualsiasi checklist di hardening dovrebbe includere — e che invece finisce quasi sempre in fondo alla lista, quando va bene.
Vsftpd si distingue per l’alta configurabilità e per il supporto nativo a protocolli cifrati come SSL e TLS. Questo lo rende perfetto sia per piccole configurazioni locali, sia per ambienti di produzione che richiedono solidità e rigore nelle policy di accesso. Il suo comportamento può essere modellato con precisione attraverso il file di configurazione /etc/vsftpd.conf, dove è possibile definire ogni aspetto del server: dagli utenti ammessi, alla modalità di connessione, fino al livello di cifratura.
L’installazione varia in base alla distribuzione utilizzata. Su un sistema basato su Debian, come Ubuntu, è sufficiente eseguire il comando
sudo apt install vsftpdMentre su sistemi basati su Red Hat, come CentOS o Fedora, si utilizza
sudo yum install vsftpdDopo l’installazione, il servizio può essere avviato con
sudo systemctl start vsftpded eventualmente abilitato all’avvio automatico con
sudo systemctl enable vsftpdA questo punto si entra nel vivo della configurazione. Aprendo il file principale con
sudo nano /etc/vsftpd.confsi può iniziare a definire il comportamento del server. Il primo passo è limitare l’accesso agli utenti autorizzati, evitando connessioni anonime o inutili aperture. È possibile farlo impostando:
userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NOIn questo modo, solo gli utenti specificati nel file /etc/vsftpd.userlist potranno accedere. Per esempio, per autorizzare un utente chiamato lucadev, basta aggiungerlo al file:
echo "lucadev" | sudo tee -a /etc/vsftpd.userlistLa cifratura della connessione è il passo cruciale successivo. Vsftpd supporta SSL/TLS e consente quindi di evitare che i dati viaggino in chiaro. Prima di tutto, bisogna generare un certificato, per esempio con OpenSSL:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/ssl/private/vsftpd.key \
-out /etc/ssl/certs/vsftpd.crtUna volta creato il certificato, si abilita l’uso di SSL nel file di configurazione:
ssl_enable=YES
rsa_cert_file=/etc/ssl/certs/vsftpd.crt
rsa_private_key_file=/etc/ssl/private/vsftpd.keyPer rafforzare la sicurezza, è opportuno vietare l’accesso anonimo e disabilitare i protocolli obsoleti:
anonymous_enable=NO
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
allow_anon_ssl=NOIn questo modo si autorizza soltanto l’uso di TLS v1 (o superiori se supportati) e si impedisce ogni accesso non cifrato e anonimo. Inoltre, per evitare che gli utenti possano navigare fuori dalla loro home directory, è consigliato abilitare il chroot:
chroot_local_user=YESE infine, per mantenere un livello minimo di log utile per il monitoraggio, attivare il logging dettagliato:
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
log_ftp_protocol=YESUna volta completate tutte le modifiche, è importante riavviare il servizio per applicarle:
sudo systemctl restart vsftpdA questo punto, il server FTP è operativo e protetto. Per verificare che tutto funzioni come previsto, è possibile connettersi con un client FTP che supporti FTPS, come FileZilla, specificando l’host, il nome utente e selezionando “FTP su TLS esplicito” come protocollo. Se la connessione avviene con successo e il certificato viene riconosciuto, significa che la configurazione è corretta.
Configurare vsftpd in modo sicuro richiede precisione, ma il risultato è un’infrastruttura robusta e protetta, in grado di gestire trasferimenti di file in modo affidabile anche in ambienti potenzialmente esposti. Non si tratta solo di attivare un servizio, ma di adottare un approccio consapevole alla gestione dei dati, che tiene conto della riservatezza, dell’autenticazione e della cifratura. In un mondo dove ogni byte può essere intercettato, proteggere i propri server è un dovere, non un’opzione.