In FTP, quali sono le differenze tra modalità passive ed estese passive?


17

Qualcuno può semplicemente spiegare le differenze tra FTP in modalità passiva (PASV) e FTP in modalità passiva estesa (EPSV)?


2
@DavidPostill Siamo spiacenti, ero davvero interessato solo a PASV vs EPSV.
CGCampbell,

Risposte:


20

L'unica differenza è PORT/PASVlimitata a IPv4 , mentre EPRT/EPSVfunziona con qualsiasi protocollo di rete (anche se nella pratica viene utilizzato solo IPv6).

I comandi standard PORT(attivi) e PASV(passivi) nel protocollo di controllo FTP scambiano l'indirizzo e le informazioni sulla porta come sei decimali da 1 byte , da cui l'altra estremità deve ricostruire un indirizzo IP a quattro byte e un numero di porta TCP a due byte.

PORT <address[4]>,<port[2]>

PORT 132,235,1,2,24,131

Ma poi iniziarono ad apparire altri protocolli. IPv4 stava per essere sostituito con "IPng", che presentava alcune proposte di sostituzione concorrenti (OSI CLNP, TUBA, SIP, SIPP, CATNIP - in varie epoche storiche), alcune con dimensioni dell'indirizzo host più brevi, più lunghe e persino variabili , fino a quando IPv6 con indirizzi a 16 byte è stato finalmente definito.

Il solo invio di più byte non avrebbe funzionato: non ci si poteva aspettare che server e client conoscessero il protocollo giusto basato esclusivamente sulla lunghezza dell'indirizzo. (Ad esempio, cosa succede se si dispone di un protocollo con indirizzo a 16 byte + porta a 4 byte, un altro con indirizzo a 12 byte + porta a 12 byte?)

Inoltre, sebbene 20 anni fa fosse meno importante, al giorno d'oggi ci sono milioni di dispositivi NAT su Internet, che ispezionano e manipolano le connessioni di controllo FTP in modo che l'host "esterno" possa vedere gli indirizzi IPv4 globali anche se "dentro" l'host ha inviato un RFC1918 locale. Anche senza NAT, i firewall con stato spesso guardano i comandi di controllo per consentire automaticamente una connessione dati senza regole manuali.

Ciò significa sostanzialmente che semplicemente l'invio di più numeri con PORTo PASVè garantito l'interruzione per molte persone. Forse alcuni firewall potrebbero interpretare in modo errato alcuni byte di indirizzo come la porta e scartare in silenzio il resto; altri potrebbero interrompere la connessione o semplicemente arrestarsi in modo anomalo.

Per evitare vari problemi come sopra, è stato necessario introdurre nuovi comandi per il supporto multiprotocollo in FTP.

Nel 1993, RFC 1639 (originariamente RFC 1545 ) introdusse "indirizzo lungo" LPRTeLPSV comandi, che erano come PORT& PASVma con una lunghezza di indirizzo variabile ; includevano anche l'identificatore del tipo di protocollo. (Tuttavia non ha modificato la sintassi - indirizzo IPv6: la porta verrebbe semplicemente inviata come 21 numeri anziché sei.)

LPRT <protocol>,<addr-length>,<address...>,<port-length>,<port...>

LPRT 4,4,132,235,1,2,2,24,131

LPRT 6,16,16,128,0,0,0,0,0,0,0,8,8,0,32,12,65,122,2,20,162

Tuttavia, ciò non ha ancora risolto alcuni dei problemi, come la richiesta a un server di utilizzare un protocollo diverso rispetto alla connessione di controllo. Anche la RFC è diventata rapidamente obsoleta; quando IPv6 uscì solo un anno dopo, non poteva essere utilizzato con LPRT perché non era stato assegnato un identificatore di protocollo LPRT (solo per le varie prime proposte).

Per risolvere questo problema, RFC 2428 nel 1998 ha aggiunto EPRTe EPSV, noto anche come "porta estesa" e "passivo esteso" , che aveva anche un metodo per negoziare un protocollo che entrambe le estremità supportano. I comandi "estesi" inviano anche indirizzi in forma leggibile dall'uomo - per IPv6, ciò significa usare la notazione esadecimale e due punti, piuttosto che una serie di numeri decimali separati.

EPRT x<protocol>x<address>x<port>x

EPRT |1|132.235.1.2|6275|

EPRT |2|1080::8:800:200C:417A|5282|

In conclusione, il supporto IPv6 è l'unica differenza.


Wow, tutti i siti che ho letto e non ha fatto clic fino a questo. Grazie per questo. Lo accetterò (probabilmente) tra un'ora o due, voglio vedere se qualcun altro lo fa diversamente. Inoltre, il motivo per cui ho chiesto anche Active era che a causa della codifica che funziona bene con Google, questa domanda / risposta verrà trovata nelle ricerche. Se nessuno aggiunge alla risposta (rendendola più completa per una risposta di Google), modificherò la mia domanda e il mio corpo originali per riflettere il contenuto della tua risposta, essenzialmente adattando la mia domanda alla tua risposta.
CGCampbell,

3
Un'altra differenza è che la EPSVrisposta non include l'indirizzo IP (cosa PASVfa la risposta). Questo per evitare problemi comuni quando il server FTP situato dietro un NAT non conosce il suo indirizzo IP esterno e confonde il client FTP inviandogli il suo indirizzo interno.
Martin Prikryl,

Per aggiungere a ciò che dice @MartinPrikryl, un altro motivo è quando si utilizza FTP-over-TLS, il firewall / NAT non può intercettare l'indirizzo IP nel comando PASV per riscriverlo (almeno senza MITMing la connessione di controllo). Le persone del mondo Unix usano generalmente SFTP invece di FTP-over-TLS, FTP-over-TLS è comunemente usato con i mainframe IBM, poiché FTP ha il supporto per i file orientati ai record (STRU R, MODE B), mentre SFTP supporta solo orientato allo stream file
Simon Kissane,

1

La differenza tra attivo e passivo ha già ricevuto risposta. L'estensione passiva (EPSV) è solo passiva con IPv4 e IPv6, poiché la sintassi della risposta a PASV era specifica per IPv4 e quindi era necessario un nuovo comando per IPv6. Lo stesso con EPTR vs. PORT in modalità attiva. Vi è un comportamento leggermente diverso con EPRT ed EPSV in quanto possono contenere solo la porta, non IP e la porta come fanno PORT e PASV. Pertanto, il trasferimento dei dati può essere effettuato solo tra i sistemi che dispongono della connessione di controllo. Con PORT e PASV è possibile creare una connessione dati tra altri sistemi (anche se oggi è considerata una progettazione errata e un rischio per la sicurezza).


2
Questo era il tipo di risposta che non volevo. Mi dice esattamente quanto ho potuto trovare altrove, ovvero che EPSV è stato creato per IPv6, ma non spiega perché. (cioè non accetto il tuo motivo come una spiegazione abbastanza valida) Ti sto dicendo questo nella speranza che tu possa forse rendere la tua risposta ancora migliore.
CGCampbell,

Risposta modificata per chiarire che era necessaria la risposta al comando PASV per non supportare IPv6 e quindi un nuovo comando.
Steffen Ullrich,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.