Il protocollo FTP (File Transfert Protocol) è uno dei più antichi e longevi protocolli dell'era internet: La prima specifica è stata definita dal MIT all'inizio degli anni 70 ma ha subito continue migliorie ed evoluzioni per correggere i bachi riscontrati e implementare nuove funzionalità e caratteristiche di sicurezza.
Il protocollo originale infatti prevedeva, ad esempio, che tutte le trasmissioni (dati e credenziali) avvenissero in chiaro, caratteristica che rendeva semplice l'intercettazione e la conseguente compromissione di credenziali utente del server. Nelle versioni più recenti, l'implementazione della cifratura SSL per proteggere dati e credenziali (modalità che prende il nome di FTPS) e modalità di trasmissione meno sensibili alla presenza di un firewall lato client (passive mode).
Il protocollo nasce quando i files scambiati tra computer erano notevolmente più piccoli ma le connessioni anche più lente ed instabili: Quando l'idea di spedire come allegato ad una mail un video da 150Mb era ancora assurda anche per il più rintronato degli utenti, il protocollo FTP permetteva la creazione e gestione di filesystem remoti condivisi, introducendo alcune funzionalità importanti con il resume dei download interrotti, la possibilità di creare o eliminare file o directory sullo storage remoto e di navigare nel filesystem del server.
Per accedere ad un server ftp, la maggior parte dei sistemi operativi mettono a disposizione strumenti da riga di comando integrati ma sono disponibili anche client grafici o plugin per i principali browser che rendono l'uso di questi storage molto comodo e semplice per tutti: Il protocollo rimane quindi una validissima alternativa all'uso improprio delle e-mail per lo scambio di files tra utenti, rendendo molto più semplice il backup ed il restore dei files scambiati con questo sistema, piuttosto che come allegati a messaggi di posta elettronica.
Il protocollo FTP utilizza due connessioni TCP separate per gestire i comandi e lo scambio di istruzioni tra server e client. Il canale di controllo per i comandi è tipicamente in ascolto sulla porta 21 del server. Lo scambio effettivo di dati avviene su un'altra porta TCP e l'instaurazione di questo canale di comunicazione può seguire due modalità:
- In un canale dati di tipo attivo il client apre una porta tipicamente random (> 1023), tramite il canale comandi rende noto il numero di tale porta al server e attende che esso si connetta. Una volta che il server ha attivato la connessione dati al client FTP, quest'ultimo effettua il binding della porta sorgente alla porta 20 del server FTP.
- In un canale dati di tipo passivo il server apre una porta tipicamente random (> 1023), tramite il canale comandi rende noto il numero di tale porta al client e attende che esso si connetta.
Fonte: Wikipedia
Questo implica la necessità di gestire le porte del firewall in modo diverso a seconda che si scelga di implementare un ftp attivo, passivo o entrambi. La modalità passiva solitamente crea meno problemi in presenza di un firewall lato client, cosa piuttosto frequente sui moderni router ADSL usati per le connessioni domestiche a banda larga ma stranamente non è quasi mai la modalità predefinita e qualche client ha ancora difficoltà nel gestire questo sistema.
A quanto ho potuto capire, la soluzione che garantisce la maggiore compatibilità con i client è differenziare: Per un server FTP che deve servire una LAN è probabilmente meglio prevedere un server FTP attivo, per una server FTP che deve servire client sulla WAN è forse meglio configurare il server FTP in modalità passiva ed impostare server e firewall per operare solo all'interno in uno specifico range di porte dinamiche.
Qui è possibile trovare un'interessante spiegazione.
I server FTP disponibili sono molti e tutti con diverse caratteristiche. Non sono un esperto, la mia esperienza nell'uso e gestione di questo strumento è piuttosto ridotta, quindi quando ho dovuto scegliere un server ftp da installare nel mio serverino ho fatto una ricerca, letto qualche parere ed esaminato le varie feature rese disponibili dalle varie implementazioni e scelto quella che più mi stuzzicava.
01_ vsFTPd.
02_ Il file di configurazione.
02.1_Le opzioni disponibili per il file di configurazione. 1/203_ Server FTP in ascolto sulla rete locale.
02.2_Le opzioni disponibili per il file di configurazione. 2/2
04_ Server FTP sull'interfaccia pubblica con utenti anonimi e locali.
05_ Server FTP sull'interfaccia pubblica con utenti anonimi e virtuali.
06_ Server FTPS o FTP over SSL.
07_ Riassumendo.
08_ Fail2ban (Rimando a quanto scritto per un altro post).
- 8.1_ Fail2ban: fail2ban.conf
- 8.2_ Fail2ban: jail.conf
- 8.3_ Fail2ban: jail.local
- 8.4_ filter.d/