close

FTP

Vai alla navigazione Vai alla ricerca
FTP
Nome File Transfer Protocol
Livello (secondo il modello OSI ) Applicato
Famiglia TCP/IP
Creato in 1971
Porta/ID 21/TCP per comandi, 20/TCP per dati, 49152-65534/TCP dinamico
Scopo del protocollo Trasferimento di file
Specifica RFC 959
Principali implementazioni (clienti) Confronto di client FTP
Implementazioni principali ( server ) Confronto di server FTP
Espandibilità Aggiungere. comandi
 File multimediali su Wikimedia Commons

FTP ( English  File Transfer Protocol ) è un protocollo per il trasferimento di file su una rete apparso nel 1971 molto prima di HTTP e anche prima di TCP/IP , grazie al quale è uno dei protocolli applicativi più antichi. Inizialmente, FTP funzionava in cima al protocollo NCP [1] , oggi è ampiamente utilizzato per la distribuzione di software e l'accesso a host remoti . A differenza di TFTP , garantisce la trasmissione (o un errore) attraverso l'uso di un protocollo di quota .

Il protocollo è costruito su un'architettura client-server e utilizza diverse connessioni di rete per trasferire comandi e dati tra client e server. Gli utenti FTP possono autenticarsi passando un nome utente e una password in chiaro oppure, se consentito sul server, possono connettersi in modo anonimo. È possibile utilizzare il protocollo SSH per un trasferimento sicuro che crittografa (nasconde) il nome utente e la password, nonché il contenuto del file.

Le prime applicazioni client FTP erano strumenti a riga di comando interattivi , che implementavano comandi e sintassi standard. Da allora, le interfacce utente grafiche sono state sviluppate per molti sistemi operativi in ​​uso oggi. Queste interfacce vanno dai componenti di un programma di web design generale come Microsoft Expression Web a client FTP specializzati come FileZilla .

Descrizione del protocollo

Differenza da HTTP

Proprietà FTP HTTP
Basato su sessioni di lavoro Non
Autenticazione utente integrata Non
Originariamente destinato alla trasmissione Binari grandi piccoli file di testo
Modello di connessione Doppia connessione Collegamento singolo
Supporta modalità di trasferimento di testo e binari Non
Supporta i tipi di dati di trasferimento ( intestazioni MIME ) Non
Supporta le operazioni del file system (mkdir, rm, rename, ecc.) Non

Una caratteristica abbastanza sorprendente del protocollo FTP è che utilizza connessioni multiple (almeno doppie). In questo caso, un canale è il canale di controllo, attraverso il quale vengono ricevuti i comandi al server e le sue risposte vengono restituite (solitamente tramite la porta TCP 21), e i dati vengono effettivamente trasmessi attraverso il resto, un canale per ogni trasmissione. Pertanto, nell'ambito di una sessione, è possibile trasferire più file contemporaneamente tramite il protocollo FTP e in entrambe le direzioni. Per ogni canale dati viene aperta la propria porta TCP, il cui numero viene scelto dal server o dal client, a seconda della modalità di trasmissione [2] .

Il protocollo FTP (come HTTP) ha una modalità di trasferimento binaria, che riduce il sovraccarico del traffico e riduce il tempo di scambio dei dati durante il trasferimento di file di grandi dimensioni.

Avviando il lavoro tramite il protocollo FTP, il client entra nella sessione e tutte le operazioni vengono eseguite all'interno di questa sessione (in altre parole, il server ricorda lo stato corrente). Il protocollo HTTP non "ricorda" nulla: il suo compito è fornire dati e dimenticare, quindi, ricordare lo stato quando si utilizza HTTP viene eseguito con metodi esterni al protocollo [2] .

FTP opera sul livello applicativo del modello OSI e viene utilizzato per trasferire file utilizzando TCP/IP . Per fare ciò, un server FTP deve essere in esecuzione e in attesa di richieste in arrivo. Il computer client può comunicare con il server sulla porta 21. Questa connessione (flusso di controllo) rimane aperta per la durata della sessione. La seconda connessione (flusso di dati) può essere aperta sia dal server dalla porta 20 alla porta del client corrispondente (modalità attiva), sia dal client da qualsiasi porta alla porta del server corrispondente (modalità passiva), che è necessario per trasferire il file di dati. Il flusso di controllo viene utilizzato per lavorare con la sessione, ad esempio lo scambio di comandi e password tra il client e il server utilizzando un protocollo simile a telnet. Ad esempio, "RETR filename" trasferirà il file specificato dal server al client. A causa di questa struttura a due porte, FTP è considerato un protocollo fuori banda, al contrario di HTTP in banda .

Collegamento e trasferimento dati

Il protocollo è definito nella RFC 959 . Il server risponde sul flusso di controllo con codici di stato ASCII a tre caratteri con un messaggio di testo opzionale. Ad esempio, "200" (o "200 OK") significa che l'ultimo comando ha avuto successo. I numeri rappresentano il codice di risposta e il testo rappresenta il chiarimento o la richiesta. Una trasmissione del flusso di dati in corso può essere interrotta da un messaggio di interruzione inviato tramite il flusso di controllo.

FTP può funzionare in modalità attiva o passiva, che determina come viene stabilita la connessione. In modalità attiva, il client crea una connessione TCP di controllo con il server e invia il proprio indirizzo IP e un numero di porta client arbitrario al server, dopodiché attende che il server avvii una connessione TCP con questo indirizzo e numero di porta. Se il client è protetto da un firewall e non può accettare una connessione TCP in entrata, è possibile utilizzare la modalità passiva. In questa modalità, il client utilizza un flusso di controllo per inviare un comando PASV al server, quindi riceve il suo indirizzo IP e il numero di porta dal server, che vengono quindi utilizzati dal client per aprire un flusso di dati da una porta client arbitraria all'indirizzo e alla porta ricevuti. Entrambe le modalità sono state aggiornate nel settembre 1998 per supportare IPv6. Durante questo periodo, sono state apportate ulteriori modifiche alla modalità passiva, aggiornandola alla modalità passiva avanzata.

Quando si trasmettono dati su una rete, è possibile utilizzare quattro rappresentazioni di dati:

  • ASCII  - usato per il testo. I dati vengono convertiti, se necessario, dalla rappresentazione dei caratteri sull'host di invio in "ASCII a 8 bit" e (sempre, se necessario) alla rappresentazione dei caratteri dell'host ricevente, prima della trasmissione. In particolare, i caratteri di avanzamento riga vengono modificati (CR /chr(13)/, LF /chr(10)/ su Windows a LF /chr(10)/ su Unix/Linux. Di conseguenza, questa modalità non è adatta per file contenenti solo testo normale.
  • Modalità immagine (comunemente denominata binaria): il dispositivo di invio invia ogni file byte per byte e il ricevitore memorizza il flusso di byte al momento della ricezione. Il supporto per questa modalità è stato consigliato per tutte le implementazioni FTP.
  • EBCDIC  : utilizzato per trasferire testo normale tra host nella codifica EBCDIC. In caso contrario, questa modalità è simile alla modalità ASCII.
  • Modalità locale: consente a due computer con impostazioni identiche di inviare dati in formato nativo senza conversione in ASCII.

Per i file di testo vengono forniti vari formati di controllo e impostazioni della struttura dei record. Queste funzionalità sono state progettate per funzionare con file contenenti la formattazione Telnet o ASA.

Il trasferimento dei dati può essere effettuato in una delle tre modalità:

  • Modalità streaming: i dati vengono inviati come flusso continuo, liberando FTP dall'esecuzione di qualsiasi elaborazione. Invece, tutta l'elaborazione viene eseguita da TCP . Non è necessario un indicatore di fine file, ad eccezione della suddivisione dei dati in record .
  • Modalità blocco - FTP divide i dati in più blocchi (blocco di intestazione, numero di byte, campo dati) e quindi li trasferisce a TCP.
  • Modalità di compressione: i dati vengono compressi da un unico algoritmo (di solito codifica run-length).

Autenticazione

L'autenticazione FTP utilizza uno schema nome utente/password per concedere l'accesso. Il nome utente viene inviato al server con il comando USER e la password viene inviata con il comando PASS. Se le informazioni fornite dal client vengono accettate dal server, il server invierà un invito al client e la sessione avrà inizio. Gli utenti possono, se il server supporta questa funzione, accedere senza fornire le credenziali , ma il server può concedere solo un accesso limitato per tali sessioni.

Modalità attiva FTP en.svg

Un host che fornisce un servizio FTP può fornire un accesso FTP anonimo . Gli utenti in genere accedono con "anonimo" (potrebbe fare distinzione tra maiuscole e minuscole su alcuni server FTP) come nome utente. Sebbene agli utenti venga solitamente chiesto di fornire il proprio indirizzo e-mail anziché una password, in realtà non viene eseguita alcuna verifica. Molti host FTP che forniscono aggiornamenti software supportano l'accesso anonimo.

FTP-ALG

Soprattutto affinché il protocollo FTP funzioni attraverso i firewall, è stata realizzata un'estensione NAT , chiamata FTP-ALG , che consente di trasmettere le connessioni in entrata dal server al client tramite NAT. Durante tale connessione, FTP-ALG sostituisce i dati trasmessi dal client, indicando al server il vero indirizzo e la porta a cui il server può connettersi, quindi trasmette la connessione dal server da questo indirizzo al client al suo indirizzo. Nonostante tutte le misure e le innovazioni adottate per supportare il protocollo FTP, in pratica, la funzione FTP-ALG è solitamente disabilitata in tutti i router e router al fine di fornire ulteriore sicurezza contro le minacce virus.

Attraversamento NAT e firewall

FTP normalmente trasferisce i dati quando il server è connesso al client, dopo che il client ha inviato il comando PORT. Ciò crea un problema sia per NAT che per i firewall , che non consentono connessioni da Internet agli host interni . Per NAT, un ulteriore problema è che la rappresentazione degli indirizzi IP e del numero di porta nel comando PORT si riferisce all'indirizzo IP e alla porta dell'host interno, anziché all'indirizzo IP pubblico e alla porta NAT. Ci sono due approcci a questo problema. Il primo è che il client FTP e il server FTP utilizzano il comando PASV, che richiama una connessione dati stabilita dal client al server. Il secondo approccio consiste nel modificare i valori NAT del comando PORT utilizzando un gateway a livello di applicazione .

Storia

La prima implementazione del protocollo (1971) prevedeva lo scambio tra client e server di messaggi costituiti da un header (72 bit) e dati di lunghezza variabile. L'intestazione del messaggio includeva una richiesta al server FTP o una risposta da esso, il tipo e la lunghezza dei dati trasmessi. I parametri di query (ad esempio, il percorso e il nome del file), le informazioni dal server (ad esempio, un elenco di file in una directory) e i file stessi sono stati passati come dati. Pertanto, comandi e dati sono stati trasmessi sullo stesso canale.

Nel 1972  il protocollo venne completamente modificato e assunse una forma vicina a quella moderna. I comandi con i parametri del client e le risposte del server vengono trasmessi tramite una connessione TELNET (canale di controllo), viene creata una connessione separata (canale dati) per il trasferimento dei dati.

Le edizioni successive hanno aggiunto la possibilità di lavorare in modalità passiva, trasferire file tra server FTP, introdurre comandi per ottenere informazioni, modificare la directory corrente, creare ed eliminare directory, salvare file con un nome univoco. Per qualche tempo esistevano comandi per l'invio di e-mail via FTP, ma in seguito sono stati esclusi dal protocollo.

Nel 1980  , il protocollo FTP iniziò ad utilizzare il TCP . L'ultima versione del protocollo è stata rilasciata nel 1985. Nel 1997 è apparsa un'aggiunta al protocollo che consente di crittografare e firmare le informazioni nel canale di controllo e nel canale dati. Nel 1999 è stato rilasciato un supplemento per l'internazionalizzazione del protocollo che consiglia di utilizzare la codifica UTF-8 per i comandi e le risposte del server e definisce un nuovo comando LANG che imposta la lingua di risposta.

Supporto browser Web

I browser Web più comuni possono recuperare file che si trovano su server FTP, anche se potrebbero non supportare estensioni di protocollo come FTPS . Quando viene specificato un indirizzo FTP anziché un indirizzo HTTP, il contenuto disponibile sul server remoto viene presentato in modo simile ad altri contenuti Web. Un client FTP completamente funzionante può essere eseguito in Firefox come estensione FireFTP .

Dal 2020 il browser Chrome (ed eventualmente altri) sarà completamente privato del supporto al protocollo FTP. [3]

Sintassi

La sintassi dell'URI FTP è descritta in RFC 1738, nella forma: ftp://[<nome utente>[:<password>]@]<host>[:<porta>]/<percorso> (i parametri tra parentesi quadre sono facoltativi ). Per esempio:

ftp://public.ftp-servers.example.com/mydirectory/myfile.txt  (downlink) (downlink)

o:

ftp://user001:[email protected]/mydirectory/myfile.txt  (downlink) (downlink)

Per ulteriori informazioni sulla specifica di nome utente e password, vedere la documentazione del browser. Per impostazione predefinita, la maggior parte dei browser Web utilizza la modalità passiva (PASV), che aggira meglio i firewall degli utenti finali.

Sicurezza

FTP non è stato progettato per essere sicuro (soprattutto per gli standard odierni) e presenta numerose vulnerabilità di sicurezza. Nel maggio 1999, gli autori di RFC 2577 hanno ridotto le vulnerabilità al seguente elenco di problemi:

  • Attacchi di rimbalzo
  • Attacchi di parodia
  • Attacchi di forza bruta
  • Cattura pacchetti, sniffing
  • Protezione del nome utente
  • Furto di porto

FTP non può crittografare il suo traffico, tutte le trasmissioni sono in chiaro, quindi nomi utente, password, comandi e dati possono essere letti da chiunque possa intercettare il pacchetto sulla rete. Questo problema è comune a molte specifiche del protocollo Internet (tra cui SMTP , Telnet , POP, IMAP) sviluppate prima dello sviluppo di meccanismi di crittografia come TLS e SSL. La soluzione usuale a questo problema è utilizzare versioni "sicure", TLS-secure di protocolli vulnerabili ( FTPS per FTP, TelnetS per Telnet, ecc.) o un altro protocollo più sicuro come SFTP / SCP fornito con la maggior parte delle implementazioni del protocollo Secure Shell . .

FTP sicuro

Esistono diversi metodi di trasferimento file sicuri a volte indicati come "FTP protetto".

FTPS

FTPS esplicito è un'estensione dello standard FTP che consente ai client di richiedere la crittografia di una sessione FTP. Questo viene implementato inviando il comando "AUTH TLS". Il server ha la capacità di consentire o rifiutare connessioni che non richiedono TLS. Questa estensione del protocollo è definita nella specifica RFC 4217 . FTPS implicito è uno standard deprecato per FTP che richiede l'uso di una connessione SSL o TLS. Questo standard prevedeva l'utilizzo di porte diverse rispetto al normale FTP.

SFTP

SFTP, o "SSH File Transfer Protocol", non è correlato a FTP, tranne per il fatto che trasferisce anche file e ha un insieme simile di comandi per gli utenti. SFTP, o FTP sicuro, è un programma che utilizza SSH (Secure Shell) per trasferire file. A differenza dell'FTP standard, crittografa sia i comandi che i dati, impedendo che password e informazioni sensibili vengano trasmesse apertamente attraverso la rete. SFTP ha funzionalità simili a FTP, ma poiché utilizza un protocollo diverso, i client FTP standard non possono contattare un server SFTP e viceversa.

FTP su SSH (non SFTP)

FTP su SSH (non SFTP) si riferisce alla pratica del tunneling di una normale sessione FTP su una connessione SSH . Poiché FTP utilizza più connessioni TCP, il tunneling su SSH è particolarmente difficile. Quando molti client SSH tentano di eseguire il tunneling del canale di controllo (la connessione "client-server" originale sulla porta 21), solo quel canale sarà protetto; durante il trasferimento dei dati, il software FTP alle due estremità stabilirà nuove connessioni TCP (canali dati) che ignoreranno la connessione SSH e quindi perderanno la protezione dell'integrità .

In caso contrario, il software client SSH deve avere una certa conoscenza dell'FTP per monitorare e riscrivere i messaggi del flusso di controllo FTP e aprire autonomamente nuovi reindirizzamenti per il flusso di dati FTP.

Pacchetti software che supportano questa modalità:

FTP su SSH è talvolta indicato come FTP sicuro, ma non deve essere confuso con altri metodi come SSL/TLS (FTPS). Altri metodi di trasferimento file che utilizzano SSH e non correlati a FTP sono SFTP e SCP . In ognuno di essi, sia le credenziali che i dati dei file sono sempre protetti dal protocollo SSH.

Comandi di base

  • ABOR - Interrompe il trasferimento di file.
  • CDUP - Cambia la directory in padre.
  • CWD - Cambia directory.
  • DELE - Elimina file (nome file DELE).
  • EPSV - Entra in modalità passiva estesa. Usato al posto del PASV.
  • AIUTO - Visualizza un elenco di comandi accettati dal server.
  • LIST - Restituisce un elenco di file in una directory. L'elenco viene trasmesso tramite la connessione dati.
  • MDTM - Restituisce l'ora di modifica di un file.
  • MKD - Crea directory.
  • NLST - Restituisce un elenco di file in una directory in un formato più breve di LIST. L'elenco viene trasmesso tramite la connessione dati.
  • NOOP - Un'operazione vuota.
  • PASS - Password.
  • PASV - Entra in modalità passiva. Il server restituirà l'indirizzo e la porta a cui è necessario connettersi per ottenere i dati. Il trasferimento inizierà quando vengono immessi i seguenti comandi: RETR, LIST, ecc.
  • PORTO - Entra in modalità attiva. Ad esempio PORTA 12,34,45,56,78,89. A differenza della modalità passiva per il trasferimento dei dati, il server stesso si connette al client.
  • PWD - Restituisce la directory corrente.
  • ESCI - Disconnetti.
  • REIN - Reinizializza la connessione.
  • RETR - Scarica il file. RETR deve essere preceduto da un comando PASV o PORT.
  • RMD - Elimina directory.
  • RNFR e RNTO - Rinomina file. RNFR - cosa rinominare, RNTO - cosa.
  • DIMENSIONE - Restituisce la dimensione del file.
  • STOR - Carica un file. STOR deve essere preceduto da un comando PASV o PORT.
  • SYST - Restituisce il tipo di sistema (UNIX, WIN, ...).
  • TIPO - Imposta il tipo di trasferimento file (binario, testo).
  • USER - Il nome utente per accedere al server.

Codici di risposta FTP

Di seguito è riportata una breve descrizione dei codici di risposta che possono essere restituiti dal server FTP . Questi codici sono stati standardizzati dall'IETF in RFC 959 . Come accennato in precedenza, il codice di risposta è un numero a tre cifre. La prima cifra è responsabile di uno dei tre risultati: successo, fallimento o indicazione di un errore o risposta incompleta.

  • 2xx - Risposta riuscita
  • 4xx/5xx - Impossibile eseguire il comando
  • 1xx/3xx - Errore o risposta incompleta

La seconda cifra specifica il tipo di errore:

  • x0z - Sintattico.
  • x1z - Informazioni. Corrisponde al messaggio informativo.
  • x2z - Connessioni. Il messaggio fa riferimento a una connessione di controllo oa una connessione dati.
  • x3z - Corrisponde ai messaggi sull'autenticazione e sui diritti dell'utente.
  • x4z - Non definito.
  • x5z - File system. Corrisponde a un messaggio di stato del file system.

La terza cifra specifica infine l'errore.

Esempio

Nell'esempio i comandi impartiti dal cliente sono evidenziati in grassetto; carattere normale - messaggi del server. Le note sono separate da due barre:

220 Server FTP pronto.
220 Ciao mondo!
UTENTE anonimo
331 Accesso anonimo ok, invia il tuo indirizzo email completo come password
PASSAGGIO************
230 Registrato in modo anonimo.
PASV
227 Accesso alla modalità passiva (192,168,254,253,233,92) //Il client deve aprire una connessione all'IP trasmesso
ELENCO
150 Ecco l'elenco delle directory. // Il server invia un elenco di file a una directory
226 Invio rubrica OK.
CWD in arrivo
250 Directory modificata correttamente.
PASV
227 Accesso alla modalità passiva (192,168,254,253,207,56)
STOR esempio.avi
150 Ok per inviare i dati. // Il client invia il contenuto del file
226 Ricezione file OK.
USCIRE
221 Arrivederci.

L'argomento 192,168,254,253,207,56 significa che è prevista una connessione al server su un host con indirizzo IP 192.168.254.253 sulla porta 207 << 8 + 56 = 53048 per scrivere 56 o 207*256+56=53048 in quello più giovane).

Molti server FTP hanno una directory (denominata incoming, upload, ecc.) scrivibile per caricare i file sul server. Ciò consente agli utenti di popolare i server con dati aggiornati.

FXP

FXP ( File eXchange Protocol  ) è un modo per trasferire file direttamente tra due server FTP, senza scaricare  file sul computer dell'utente. Durante una sessione FXP, il client apre due connessioni FTP a due server diversi, richiedendo un file sul primo server, specificando l'indirizzo IP del secondo server nel comando PORT.

L'indubbio vantaggio del supporto dello standard FXP è che gli utenti finali che desiderano copiare file da un server FTP a un altro non sono più soggetti al limite di larghezza di banda della propria connessione Internet. Non è necessario scaricare un file per te stesso per caricarlo su un altro server FTP in un secondo momento. Pertanto, il tempo di trasferimento dei file dipenderà solo dalla velocità di connessione tra due server FTP remoti, che nella maggior parte dei casi è ovviamente superiore a quella "utente".

FXP iniziò ad essere utilizzato dagli aggressori per attaccare altri server: il comando PORT specifica l'indirizzo IP e la porta del servizio attaccato sul computer della vittima, e i comandi RETR/STOR accedono a questa porta per conto del server FTP, e non dell'attaccante macchina, che ha permesso di organizzare attacchi DDoS su larga scala utilizzando più server FTP contemporaneamente, o aggirare il sistema di sicurezza del computer della vittima se si basa solo sul controllo dell'IP del client e il server FTP utilizzato per l'attacco si trova su una rete o gateway affidabile. Di conseguenza, quasi tutti i server ora controllano che l'indirizzo IP specificato nel comando PORT corrisponda all'indirizzo IP del client FTP e, per impostazione predefinita, vietano l'utilizzo di indirizzi IP di terze parti. Pertanto, l'uso di FXP non è possibile quando si lavora con server FTP pubblici.

Vedi anche

Server

Collegamenti

Note

  1. ^ Una breve storia della posta archiviata il 27 marzo 2008.
  2. 1 2 Capitolo 27. Configurazione di un server FTP . Estratto il 17 aprile 2017 . Archiviato dall'originale il 3 giugno 2017.
  3. Chrome 82 perderà completamente il supporto per FTP Archiviato il 16 agosto 2019 su Wayback Machine // 3DNews , 16/08/2019