File Transfer Protocol (FTP) è una delle tec­no­lo­gie più diffuse per il tra­sfe­ri­men­to di file ed è spesso usato per caricare e scaricare file su spazi web. Qui ti spie­ghia­mo come con­fi­gu­ra­re un server FTP con crit­to­gra­fia TLS su Debian.

In­stal­la­zio­ne di un server FTP su Debian

Prima di ci­men­tar­ti con l’in­stal­la­zio­ne e la con­fi­gu­ra­zio­ne, devi in­stal­la­re il software adeguato per il server. Per Linux esistono diversi server FTP che sono per la maggior parte open source e si trovano so­li­ta­men­te nella gestione dei pacchetti della ri­spet­ti­va di­stri­bu­zio­ne Linux.

Una delle ap­pli­ca­zio­ni più co­no­sciu­te è ProFTPD, con licenza GPL, che grazie alla sua struttura modulare è estre­ma­men­te am­plia­bi­le. Il file di con­fi­gu­ra­zio­ne prin­ci­pa­le funziona sulla base di direttive e gruppi di direttive, familiari a ogni am­mi­ni­stra­to­re e a ogni am­mi­ni­stra­tri­ce che conosce i server web Apache. Anche Debian esegue ProFTPD per im­po­sta­zio­ne pre­de­fi­ni­ta dal re­po­si­to­ry software. L’in­stal­la­zio­ne avviene quindi nel modo classico dal terminale, dando il seguente comando:

sudo apt update
sudo apt install proftpd
sudo apt install proftpd-mod-crypto
bash

Se vorresti che il server FTP si avvii au­to­ma­ti­ca­men­te al riavvio del sistema, dovresti eseguire anche il seguente comando:

sudo systemctl enable proftpd
bash
Consiglio

Desideri ar­chi­via­re o tra­sfe­ri­re dati? Allora noleggia subito un Server secure FTP su IONOS. In questo modo be­ne­fi­ce­rai di un tra­sfe­ri­men­to sicuro grazie a SSH e SSL/TLS con backup gior­na­lie­ri inclusi.

Per con­clu­de­re l’in­stal­la­zio­ne bisogna decidere infine se si vuole uti­liz­za­re ProFTPD nella modalità server (stan­da­lo­ne) o come uno dei servizi con­trol­la­ti da inetd. Nel primo caso il server FTP si occupa au­to­no­ma­men­te delle richieste in entrata, mentre nella seconda variante il “super server” inetd/xinetd accoglie le richieste e le inoltra al server FTP (pos­si­bi­li­tà in­te­res­san­te solo se si prevede di avere po­chis­si­mo traffico FTP).

Server virtuali (VPS)
Affidati ai VPS e server di IONOS, il tuo partner digitale cer­ti­fi­ca­to ISO
  • 1 Gbps di larghezza di banda e traffico il­li­mi­ta­to
  • Di­spo­ni­bi­li­tà del 99,99% e cer­ti­fi­ca­zio­ne ISO
  • As­si­sten­za 24/7 e con­su­len­te personale

Server FTP su Debian: 3 scenari abbinati alla tariffa giusta di server IONOS

Non sai ancora con certezza quale sia la con­fi­gu­ra­zio­ne hardware e di rete ne­ces­sa­ria per il tuo server FTP su Debian? Nella tabella seguente abbiamo elencato tre possibili scenari di im­ple­men­ta­zio­ne per un server FTP e suggerito la tariffa server IONOS più adatta per ciascun caso.

Scenario del server FTP Tariffa IONOS più adatta
Server web di piccole di­men­sio­ni VPS Linux M
Server web più grande VPS Linux XL
Server FTP aziendale Server dedicato AMD Ryzen XXL-128 NVMe

Tutorial per in­stal­la­re un server FTP su Debian: i passaggi di con­fi­gu­ra­zio­ne più im­por­tan­ti

Dopo l’in­stal­la­zio­ne puoi quindi iniziare a con­fi­gu­ra­re ProFTPD. Il file di con­fi­gu­ra­zio­ne ne­ces­sa­rio proftpd.conf si trova nella directory /etc/proftpd/. Per mo­di­fi­car­lo, aprilo con un editor a tua scelta. Ciò è ad esempio possibile con il programma standard di Debian nano con il seguente comando dal terminale:

sudo nano /etc/proftpd/proftpd.conf
bash

Nelle diverse righe trovi le funzioni e le opzioni di im­po­sta­zio­ne più im­por­tan­ti del server FTP su Debian. Ogni com­po­nen­te riceve così una propria riga e richiede dei valori pre­de­fi­ni­ti: ad esempio se si tratta di uti­liz­za­re o meno una funzione sono possibili il valore “on” (funzione attivata) o il valore “off” (funzione di­sat­ti­va­ta). In aggiunta può essere anteposta a una riga il simbolo del can­cel­let­to (#) per “com­men­tar­la”. Il server con ProFTPD ignora quindi la riga com­ple­ta­men­te, perciò questa an­no­ta­zio­ne si presenta come un’altra opzione per di­sat­ti­va­re le funzioni.

Consiglio

Al posto di uti­liz­za­re il file proftpd.conf puoi anche creare un tuo file di con­fi­gu­ra­zio­ne nella directory /etc/proftpd/conf.d/, che rimane invariata dagli ag­gior­na­men­ti del software FTP. In questo modo riduci tramite un semplice passaggio il rischio che le tue im­po­sta­zio­ni vadano perdute. Tramite la direttiva Include si possono integrare le spe­ci­fi­ca­zio­ni server salvate nella cartella conf.d nel file prin­ci­pa­le (nella con­fi­gu­ra­zio­ne standard avviene au­to­ma­ti­ca­men­te).

Im­po­sta­zio­ni di base: nome del server, directory FTP e simili

Prima di scendere nei dettagli della con­fi­gu­ra­zio­ne del tuo server FTP su Debian, devi mo­di­fi­ca­re la con­fi­gu­ra­zio­ne di base. In questo vi sono comprese im­po­sta­zio­ni ele­men­ta­ri come l’in­di­ca­zio­ne del nome host o della directory del server che desideri mettere a di­spo­si­zio­ne per l’upload e il download dei file. Inoltre, hai diverse pos­si­bi­li­tà di con­fi­gu­ra­zio­ne che si ri­fe­ri­sco­no a po­ten­zia­li utenti FTP, come risulta chiaro dalla seguente con­fi­gu­ra­zio­ne di esempio:

# Indicazione del nome host e messaggio di benvenuto
ServerName    "nomehost/indirizzo-ip"
DisplayLogin    "Il login al server FTP su Debian è andato a buon fine!"
# Linee guida generali per il login
<Global>
    # Consentito solo l’accesso alle shell definite in /etc/shells
    RequireValidShell    on
    # Login di root negato
    RootLogin    off
    # Indicazione della directory FTP alla quale gli utenti possono accedere
    DefaultRoot    Percorso-directory
</Global>
# Definire gli utenti/i gruppi di utenti autorizzati per il login FTP
<Limit LOGIN>
    # Il login è possibile solo per gli utenti del gruppo di esempio ftpuser
    # Al posto di inserire una lunga lista, viene negato l’accesso al gruppo autorizzato (!)
    DenyGroup    !ftpuser
</Limit>

In questa con­fi­gu­ra­zio­ne di base viene dato agli utenti l’accesso a una specifica directory. Risulta utile se questi, ad esempio, sono coinvolti nella gestione di un progetto web e hanno perciò bisogno di ampi permessi di accesso. Invece, se la funzione del server FTP su Linux consiste nell’offrire agli utenti solo un luogo di me­mo­riz­za­zio­ne per i loro dati, dovresti con­fi­gu­ra­re ProFTPD di modo che l’accesso alla directory home sia limitato:

# Permettere l’accesso agli utenti solo alla directory home
DefaultRoot ~

Creare utenti FTP

Creando nuovi utenti ProFTPD, dovresti sempre definire /bin/false come login della shell. In questo modo ti assicuri che l’utente possa accedere al server FTP e non a tutto il sistema. Inserisci quindi prima di tutto /bin/false nel file delle shell ammesse con il seguente comando del terminale:

sudo sh -c 'echo "/bin/false" >> /etc/shells'
bash

Infine, puoi creare un primo account utente:

sudo adduser user1 --shell /bin/false --home /home/user1
bash

In questo esempio crei un account utente con il nome di “user1” e nello stesso passaggio crei anche la sua directory home. Infine, scegli una password per il nuovo account e conferma il profilo. Ora per collegare davvero questo nuovo utente con il server FTP su Debian e caricare o scaricare i file nella sua directory esclusiva, indica la sua directory home nel file proftpd.conf:

<Directory /home /user1>
    Umask 022 
    AllowOverwrite off
    <Limit LOGIN>
        AllowUser user1
        DenyAll
    </Limit>
    <Limit ALL>
        AllowUser user1
        DenyAll
    </Limit>
</Directory>

Questo esempio di codice limita la directory in diversi modi per farla diventare un luogo privato di me­mo­riz­za­zio­ne per i file di user1: con il comando Umask (022) vengono assegnati tutti i permessi all’account pro­prie­ta­rio. Gli altri account, invece, possono solo leggere i file, mentre per eseguirli ne­ces­si­ta­no dell’au­to­riz­za­zio­ne conferita dall’account pro­prie­ta­rio. La direttiva di­sat­ti­va­ta Al­lo­wO­ver­w­ri­te impedisce che nell’upload dei file possano venire so­vra­scrit­ti dei dati già salvati. Infine, il login FTP (Limit LOGIN) e l’ese­cu­zio­ne di comandi FTP (Limit ALL) sono bloccati per tutti gli utenti tranne lo user1.

Consiglio

Al posto di vietare l’ese­cu­zio­ne di tutti i comandi FTP, puoi anche impedire singole ope­ra­zio­ni. In questo modo si può generare ad esempio anche una directory in cui l’utente può caricare solo file. Trovi un riepilogo det­ta­glia­to delle diverse opzioni di im­po­sta­zio­ne nei manuali online.

Con­sen­ti­re l’accesso anonimo

Se desideri con­fi­gu­ra­re il tuo server FTP su Debian, di modo che serva come server per i download pubblici, nella maggior parte dei casi si vuole fare in modo che gli utenti possano accedere ano­ni­ma­men­te ai file di­spo­ni­bi­li. In questo caso, ser­ven­do­ti di chmod, definisci prima di tutto i permessi di accesso necessari per la suc­ces­si­va directory di download, che qui abbiamo chiamato esem­pli­fi­ca­ti­va­men­te /home/ftp­do­wn­load:

sudo chmod 755 -R /home/ftpdownload
bash

L’account pro­prie­ta­rio della directory dispone quindi di tutti i permessi (7= lettura, scrittura ed ese­cu­zio­ne), mentre il gruppo di utenti e tutti gli altri utenti possono solo leggerla ed eseguirla (5). Una volta definiti i permessi, si può con­fi­gu­ra­re l’accesso anonimo nel file proftpd.conf:

<Anonymous ~ftp>
User    ftp
Group    ftpgroup
# Possibili profili di login per i client
UserAlias    anonymous    ftp
# Nascondere le proprietà utente e dei gruppi e indicazione del numero massimo di client
DirFakeUser on ftp
DirFakeGroup on ftp
RequireValidShell    off
MaxClients    10
<Directory *>
    <Limit WRITE>
        DenyAll
    </Limit>
</Directory>
</Anonymous>

Per fare in modo che avvenga il login sul server FTP su Debian con il profilo ftp, devi ag­giun­ger­lo al gruppo ftpuser:

sudo adduser ftp ftpgroup
bash

Con­fi­gu­ra­re la crit­to­gra­fia SSL/TLS

Il pro­to­col­lo FTP trasmette sia le in­for­ma­zio­ni di login che i dati inviati in un testo in chiaro. Se desideri con­fi­gu­ra­re un server ProFTPD privato, che non debba essere ac­ces­si­bi­le a tutti, si consiglia di con­se­guen­za di crit­to­gra­fa­re il login. Per farlo, ti basterà impostare il software libero OpenSSL. Il toolkit di crit­to­gra­fia è compreso per im­po­sta­zio­ne pre­de­fi­ni­ta nella gestione del pacchetto Debian ed è già in­stal­la­to. In al­ter­na­ti­va si può eseguire l’in­stal­la­zio­ne nel modo consueto:

sudo apt install openssl
bash

Primo passaggio: generare cer­ti­fi­ca­to e chiavi

Suc­ces­si­va­men­te utilizza OpenSSL per creare un cer­ti­fi­ca­to. Crea in­nan­zi­tut­to la cartella destinata a con­te­ner­lo nella directory ProFTDP:

sudo mkdir /etc/proftpd/ssl
bash

Ora genera il cer­ti­fi­ca­to (proftpd.cert.pem) e la chiave (proftpd.key.pem) con la durata di un anno per il tuo server FTP su Linux indicando il luogo di me­mo­riz­za­zio­ne con il seguente comando:

openssl req -new -x509 -days 365 -nodes -out /etc/proftpd/ssl/proftpd.cert.pem -keyout /etc/proftpd/ssl/proftpd.key.pem
bash

In aggiunta è ne­ces­sa­rio indicare alcune in­for­ma­zio­ni per re­gi­stra­re il cer­ti­fi­ca­to come previsto:

  • Country Name (2 letter code): codice del paese, ad esempio “IT” per Italia
  • State or Province Name (full name): regione, ad esempio “Lazio”
  • Locality Name (eg, city): città, ad esempio “Milano”
  • Or­ga­ni­za­tion Name (eg, company): nome dell’azienda o il tuo nome
  • Or­ga­ni­za­tio­nal Unit Name (eg, company): in­di­ca­zio­ne del reparto (se previsto), ad esempio “IT”
  • Common Name (eg, YOUR name): in­di­ca­zio­ne del dominio da pro­teg­ge­re, ad esempio “ftp.example.com.”
  • Email Address: indirizzo e-mail.
Server dedicati
Per­for­man­ce e in­no­va­zio­ne
  • Pro­ces­so­ri al­l'a­van­guar­dia di ultima ge­ne­ra­zio­ne
  • Hardware dedicato ad alte pre­sta­zio­ni
  • Data center cer­ti­fi­ca­ti ISO

Secondo passaggio: attivare SSL/TLS su ProFTPD

Dopo che hai creato il tuo cer­ti­fi­ca­to com­pren­si­vo di chiave privata, devi attivare la tec­no­lo­gia di crit­to­gra­fia per il server ProFTPD. A questo scopo il server FTP su Debian mette a di­spo­si­zio­ne il modulo mod_tls. Per l’at­ti­va­zio­ne sono ne­ces­sa­rie diverse modifiche nel file tls.conf. Apri il file di con­fi­gu­ra­zio­ne e cerca la voce seguente:

<IfModule mod_tls.c>
    TLSEngine    off

Assegna alla direttiva TLSEngine il valore “on” e amplia la parte così (ad esempio eli­mi­nan­do il commento con il can­cel­let­to):

<IfModule mod_tls.c>
    TLSEngine            on
    TLSLog                /var/log/proftpd/tls.log
    TLSProtocol            TLSv1 TLSv1.1 TLSv1.2
    TLSRSACertificateFile        /etc/proftpd/ssl/proftpd.cert.pem
    TLSRSACertificateKeyFile    /etc/proftpd/ssl/proftpd.key.pem
    TLSVerifyClient            off
    TLSRequired            on
</IfModule>

In questo modo non solo hai attivato la crit­to­gra­fia SSL/TLS per il tuo server FTP su Debian, ma nello stesso passaggio hai anche apportato le im­po­sta­zio­ni più im­por­tan­ti. Così è ugual­men­te definito il file di log per le re­gi­stra­zio­ni delle con­nes­sio­ni FTP (TLSLog) e i percorsi al cer­ti­fi­ca­to (TL­SR­SA­Cer­ti­fi­ca­te­Fi­le) e alla chiave (TL­SR­SA­Cer­ti­fi­ca­te­Key­Fi­le). Inoltre, sono indicate anche le possibili versioni del pro­to­col­lo (TL­SPro­to­col). Le ultime due righe fanno sì che il modulo non verifichi i cer­ti­fi­ca­ti pre­sen­ta­ti dal client (TL­SVe­ri­fy­Client) e che la crit­to­gra­fia sia il pre­re­qui­si­to di base per stabilire la con­nes­sio­ne (TL­SRe­qui­red). Le nuove im­po­sta­zio­ni saranno valide dopo il riavvio del server ProFTPD:

sudo /etc/init.d/proftpd restart
bash

Terzo passaggio: re­gi­strar­si tramite SSL/TLS sul server ProFTPD

Se hai attivato SSL/TLS per ProFTPD, come con­si­glia­to su questo tutorial per il server FTP su Debian, gli utenti hanno bisogno di un client FTP, che supporta il tentativo di con­nes­sio­ne crit­to­gra­fa­to. Tra questi uno dei più co­no­sciu­ti è FileZilla, di­spo­ni­bi­le non solo per Debian e altre di­stri­bu­zio­ni Linux, ma anche per macOS e Windows. In questo modo il programma open source si presenta come la soluzione ideale per accedere al server FTP da diverse piat­ta­for­me.

Nel server manager di FileZilla inserisci al momento di scegliere il tipo di server la variante sicura FTPS (“FTP su TLS/SSL esplicito”), invece di FTP. La prima volta che ci si connette al server è inoltre ne­ces­sa­rio accettare il cer­ti­fi­ca­to.

Se la con­nes­sio­ne TLS non può essere stabilita in FileZilla, potrebbe essere ne­ces­sa­rio caricare ma­nual­men­te il modulo mod_tls. A questo scopo, inserisci la seguente riga all’inizio di proftpd.conf:

LoadModule mod_tls.c

Per applicare questa modifica, devi riavviare il server:

sudo systemctl restart proftpd
bash
Consiglio

L’SSH File Transfer Protocol utilizza SSH invece di TLS/SSL e rap­pre­sen­ta un’al­ter­na­ti­va leggera e di facile utilizzo a FTPS.

Con­fi­gu­ra­zio­ne di ProFTPD: consigli e trucchi

Le opzioni di con­fi­gu­ra­zio­ne pre­sen­ta­te sono solo alcune delle soluzioni possibili. Lo sfac­cet­ta­to software FTP permette scenari ancora più specifici e complessi per la con­fi­gu­ra­zio­ne del proprio server. Il sito ufficiale di ProFTPD offre al riguardo in­nu­me­re­vo­li in­for­ma­zio­ni utili. La do­cu­men­ta­zio­ne online di­spo­ni­bi­le li­be­ra­men­te comprende anche alcuni setup di esempio, guide det­ta­glia­te, FAQ e spie­ga­zio­ni sulle singole direttive. Inoltre, si trovano in­for­ma­zio­ni su diversi moduli standard e ag­giun­ti­vi.

Possibili errori nella con­fi­gu­ra­zio­ne del server

In alcuni casi un riavvio del server ProFTPD può com­por­ta­re la ricezione dei seguenti messaggi di errore:

mod_tls_memcache/0.1: notice: unable to register 'memcache' SSL session cache: Memcache support not enabled

In questo caso il problema consiste nel fatto che i moduli cache mod_tls_memcache nella com­pi­la­zio­ne di ProFTPD sono stati attivati au­to­ma­ti­ca­men­te come com­po­nen­ti di SSL/TLS. Se hai con­fi­gu­ra­to la crit­to­gra­fia SSL/TLS, il modulo in teoria si occupa (se lo si desidera) della me­mo­riz­za­zio­ne nella cache delle sessioni crit­to­gra­fa­te FTP. Dato però che non serve per im­po­sta­zio­ne pre­de­fi­ni­ta il caching della sessione, non sono state con­fi­gu­ra­te le im­po­sta­zio­ni ne­ces­sa­rie affinché il modulo funzioni, il che porta al messaggio di errore da parte di ProFTPD. La soluzione al problema è semplice: commenta il modulo o il processo di ca­ri­ca­men­to del modulo nel file di con­fi­gu­ra­zio­ne.

# LoadModule mod_tls_memcache.c

Oltre al problema del modulo di caching, anche una con­nes­sio­ne errata rientra tra le com­pli­ca­zio­ni che possono ve­ri­fi­car­si dopo la con­fi­gu­ra­zio­ne del server FTP su Debian. Per ve­ri­fi­ca­re la presenza di questo problema, puoi ricorrere a diverse opzioni di analisi:

1. Testare se funziona il server ProFTPD:

sudo service proftpd status
bash

2. Testare se il server ProFTPD ascolta dalla porta TCP 21 per re­gi­stra­re le richieste FTP in entrata:

sudo netstat -tlp|grep proftpd
bash

3. Ve­ri­fi­ca­re i messaggi di errore nel log di ProFTPD:

sudo tail -20 /var/log/proftpd/proftpd.log
bash

4. Ve­ri­fi­ca­re i messaggi di errore nel log TLS:

sudo tail -20 /var/log/proftpd/tls.log
bash

5. Test di con­nes­sio­ne sulla porta 21 con telnet:

sudo telnet [Indirizzo IP] 21
bash

6. Test di con­nes­sio­ne sulla porta 21 con TLS:

sudo openssl s_client -connect  [Indirizzo IP]:21 -starttls ftp
bash
Vai al menu prin­ci­pa­le