Il protocollo FTP (File Transfer Protocol) Protocollo di Trasferimento File, è uno dei più vecchi e noti protocolli usati su internet, al pari di http per la navigazione e di smtp per l'invio di posta elettronica. Come quasi tutta l'infrastruttura d'Internet, anche FTP è un protocollo basato sull'architettura Client/Server, tramite esso ed i suoi comandi è possibile trasferire facilmente dei file tra Client e Server attraverso sempre il protocollo di rete TCP.
Può capitare che a causa della presenza di un firewall, il trasferimento dati via FTP non riesca, si stabilisce la connessione ma non si riesce ad avviare il trasferimento, come mai? Il problema è come detto il firewall, che a seconda della sua configurazione blocca la comunicazione tra il Client ed il Server. Possiamo aggirare questo problema usando la modalità attiva di FTP.
Il protocollo FTP consente infatti di stabilire due tipi di connessione, dette FTP modalità Attiva e FTP modalità Passiva. Per capirne la differenza e sapere quando usare l'una e quando l'altra, dobbiamo però un attimino approfondire il funzionamento del protocollo FTP.
FTP Modalità Attiva
Quando il Client FTP cerca di stabilire una connessione col Server FTP, manda un pacchetto di richiesta di comunicazione al Server, che è in ascolto sulla porta 21. La porta 21 rientra tra le cosidette "Well Know Port", ovvero le "Porte Riconosciute", ricadenti nel range 0-1023, e sono dette così poichè solitamente sono assegnate ai processi di sistema più noti ed utilizzati, come la porta 80 per HTTP, o ancora la 25 per SMTP; più precisamente la porta 21 di FTP viene detta "Porta di Comando" poichè è la porta del Server che accetta i comandi FTP da parte del Client.
A questo punto, una volta che il Server accetta la comunicazione (riconosce il client tramite login: username + password), il Server apre la porta 20 e cerca di connettersi con il Client ad una sua porta superiore o ugule a 1024 in maniera randomica, ovvero casuale, se questo canale riesce a stabilirsi correttamente ecco che comincia il trasferimento dati tra Client e Server. Ecco perchè si dice anche che il protocollo FTP utilizza porte di rete multiple, perchè in pratica si stabiliscono due connessioni: la prima per la comunicazione e l'invio dei comandi sulla porta 21 del Server, e la seconda per il trasferimento dati tra la porta 21 del Server ed una porta casuale del Client superiore a 1024, il Client tramite la connessione di comunicazione, renderà noto al Server la porta scelta in maniera casuale per il trasferimento dati.
Questa sin qui descritta non è altro che il funzionamento di FTP in Modalità Attiva. La Modalità Attiva FTP viene riassunta bene dalla figura sottostante:

Dove con "Reg Port" intendo indicare le cosidette "Porte Registrate", ossia quelle porte superiori a 1024 (partendo da 0) scelta in maniera Random (casuale). Il problema nasce proprio con questa modalità attiva e con la presenza di un Firewall, quest'ultimo, essendo la porta del Client scelta in maniera casuale per stabilire la connessione di trasferimento dati FTP è bloccata dal Firewall, il quale giustamente non la riconosce come una Well Know Port e la blocca, chiudendo di fatto la connessione.
Questo filtro causato dal FireWall, può essere aggirato in due modi, il primo è di configurare il FireWall del Client aprendo un largo range di porte ed abilitandole a ricevere connessioni in ingresso. Questa prima soluzione però crea un potenziale problema di sicurezza (grosso direi), poichè aprendo un ampio range di porte per la connessione ftp lo apriamo allo stesso tempo a qualsiasi altro servizio, quindi anche malevolo, che cerca di stabilire una connessione col nostro PC. L'altra soluzione, più elegante e molto più sicura della prima è quella di usare FTP in modalità Passiva.
FTP Modalità Passiva
Per ovviare al problema creato dalla presenza di un eventuale Firewall, FTP è in grado di lavorare anche in modalità Passiva (la quale rappresenta la modalità di funzionamento standard o di default di FTP). Come in quella attiva il Client cerca di stablire una connessione di comunicazione col Server sempre sulla porta 21, specificando però nel pacchetto inviato che intende stabilire un connessione Passiva e non Attiva, a differenza di quella attiva il Server non aprirà più la porta 20 per la connessione di trasferimento dati, ma una porta casuale superiore come numero a 1024, rendendola disponibile ad accettare connessioni in ingresso; mentre per il Client la porta aperta viene sempre scelta in maniera random (> 1024). Come per la modalità attiva, la figura sottostante riassume bene il funzionamento del protocollo FTP in modalità Passiva:

Cosa è cambiato apparte la porta 20 vi chiederete voi? Beh! è cambiato parecchio, il Data Transfer Connection non è più nel verso dal Server al Client, ma è al contrario, dal Client al Server, quindi il FireWall del Client non si pone più il problema se accettare o meno connessioni in ingresso, anzi non avviene proprio, poichè la connessione in ingresso viene aperta sul Server. Ecco spiegato come aggirare il problema del funzionamento del protocollo FTP in modalità attiva in presenza di FireWall.
I più attenti però potrebbero fare un'osservazione pertinente, se ci pensiamo bene, il problema si è invertito, anche sul Server ci potrebbe essere un FireWall che rifiuti le connessioni in ingresso, come fare allora? Bisogna dire al server di aprire delle apposite porte (> 1024) da usare appositamente per accettare connessioni in ingresso FTP in modalità Passiva, per aprire questo range di porte, sfruttiamo il comando DOS netsh:
FOR /L %I IN (5500,1,5701) DO netsh firewall add portopening TCP %I “PassiveFTP”%I
Il comando netsh viene usato per la maggior parte delle operazioni di networking, in questo caso lo abbiamo usato in maniera ciclica per aggiungere porte aperte sul FireWall ed abilitarle ad accettare connessioni ftp passive sul range 5500 - 5700.
Chiunque voglia aggiungere qualcosa o chiedere ulteriori chiarimenti sul funzionamento di FTP in Modalità Attiva e Passiva può farlo liberamente tramite i commenti.