ItaPFEPlat

Blog dei PFE italiani - Active Directory, Windows Platform e Security

SSL per il servizio FTP su Windows – FTPs

FTPS: Utilizzo di SSL per il servizio FTP su Windows.

In questo articolo parliamo di FTPs. Da Windows 2008 è possibile abilitare tale funzionalità tramite l’installazione del servizio Web Server (IIS). Successivamente per rendere sicura la comunicazione client/server è possibile cifrare la connessione tramite l’utilizzo dei protocolli TLS e SSL. Sarà necessario un certificato che può essere Self-Signed o rilasciato da un CA.

FTPS è un’estensione del protocollo FTP, File Transfer Protocol (FTP), che aggiunge le funzionalità dei protocolli di crittografia Transport Layer Security (TLS) e Secure Sockets Layer (SSL).

FTPS non deve essere confuso con SSH File Transfer Protocol (SFTP), un sotto sistema del trasferimento file per il protocollo Secure Shell (SSH). E’ inoltre differente da Secure FTP, la pratica di  poter effettuare un tunneling del protocollo FTP attraverso una connessione SSH.

Tale funzionalità è stata introdotta in IIS 7.0 su Windows Server 2008, per il quale era necessario installare il seguente pacchetto per poterla utillizzare:

Microsoft FTP Service 7.5 for IIS 7.0 (x64): http://www.microsoft.com/en-us/download/details.aspx?id=22045

Microsoft FTP Service 7.5 for IIS 7.0 (x86): http://www.microsoft.com/en-us/download/details.aspx?id=14045

Su Windows 7 e Windows Server 2008 R2 è stato introdotto FTP 7.5 per IIS 7.5 che integra tale funzionalità senza dover scaricare pacchetti aggiuntivi.

Il protocollo FTP è un protoccollo unicamente TCP che utilizza due porte, la “data port” e la “command port”, rispettivamente la 20 e la 21.

Inoltre può operare in due modalità differenti, denominate Attiva e Passiva, ed è necessario capire in dettaglio il loro funzionamento prima di procedere con la messa in produzione di tale servizio.

Nella seguente figura vengono rappresentate le due modalità, denominate Attiva e Passiva:


  
 NOTA: vorrei evidenziare che effettuando un tracciamento dei pacchetti è possibile notare che il comando PORT è composto nel seguente modo: PORT 192,168,10,10,15,170. I primi 4 ottetti sono l’indirizzo IP mentre gli ultimi due sono la porta utilizzata. Per ottenere quale sia effettivamente tale porta è necessario moltiplicare il quinto ottetto per 256 ed sommare il risultato al sesto ottetto. Nell’esempio avremmo porta=(15*256)+170=4010 

In modalità Attiva, il client si connette da una porta randomica (N> 1023) e manda il comando PORT alla porta 21 del server, detta appunto “command port”. Il server risponde con un ACKnowledge (riconoscimento) sulla porta del client. A questo punto il client si mette in ascolto sulla porta N+1 (es: 1027) mandando il comando FTP PORT N+1 al server. Quest’ultimo stabilirà una connessione dalla sua porta dati 20 alla porta specificata dal client, che successivamente manderà un ACKnowledge (riconoscimento) sulla porta 20 del server.

Il principale problema con questa modalità ricade sul client, il quale non effettua la connessione vera e propria ma è lui che comunica su quale porta sta ascoltando e sulla quale il server dovrà connettersi. Dal punto di vista del firewall perimetrale, il client verrà visto come un sistema esterno che sta tendanto una connessione ad un client interno, cosa che in genere è bloccata.

In modalità Passiva, è stato introdotto un metodo per risolvere il problema del server che effettua la connessione al client. In questa modalità è il client che inizializza entrambe le connessioni al server, risolvendo così le problematiche dovute al blocco delle porte sui firewall esterni.

Durante l’apertura della connessione FTP il client apre due porte randomiche, la N>1023 e N+1. La prima contatta il server sulla porta 21, ma successivamente al contrario della modalità Attiva, invece di inoltrare il comando PORT per permettere la connessione da parte del server, il client inoltra un comando PASV. A questo punto è il server che apre una porta randomica, P>1023, e manda la risposta P al comando PASV del client. Quest’ultimo inizializzerà la connessione dalla porta N+1 alla porta P del server per il trasferimento dei dati.

Riassumendo, da una parte la modalità Passiva risolve i problemi di connettività lato client, ma dall’altra ne crea altri lato server. Il principale è quello di dover permettere le connessioni remote esterne alle porte randomiche di alto livello del server. Per tale motivo molti demoni FTP offrono la possibilità di chiudere l’intervallo di porte randomiche utilizzate dal server.

Amministrativamente parlando la gestione dei client FTP che supportano o non supportano la modalità Passiva rimane molto onerosa. Inoltre visto l’ampio utilizzo del web si preferisce utilizzare il proprio browser come client FTP, ma la maggior parte di questi supporta soltando la modalità Passiva. In tal caso qualora si volesse installare tale servizio, sarà necessario analizzare la propria infrastruttura di rete e di sicurezza in modo da configurare in maniera corretta la parte server e capire quale sia il client più adatto da utilizzare.  

A questo punto Vi saranno più familiari i concetti che riguardano il servizio FTP, e sarà possibile procedere con la configurazione del protocollo SSL per la connessione client/server.

Si procederà nel seguente modo:

  1. Installazione del servizio Web Server (IIS) – Installazione e distribuzione di IIS 7: http://technet.microsoft.com/it-it/library/ee692294(v=ws.10).aspx
  2. Installazione della funzionalità FTP – Administering FTP 7.5: http://technet.microsoft.com/it-it/library/dd722686(v=ws.10).aspx / FTP 7.0 Operations Guide: http://technet.microsoft.com/it-it/library/dd464009(v=ws.10).aspx
  3. Abilitazione di SSL per FTP (certificato Self-signed o rilasciato da CA) – Configuring FTP SSL Settings: http://technet.microsoft.com/it-it/library/dd463987(v=ws.10).aspx / Configure the FTP SSL Policy: http://technet.microsoft.com/it-it/library/dd464002(v=ws.10).aspx
  4. Possibilità di configurazione dell’isolamento a livello utente – Configuring FTP User Isolation: http://technet.microsoft.com/it-it/library/dd464015(v=ws.10).aspx

Un saluto dal Platform Team italiano, a presto