FTP | |
---|---|
Nume | Protocolul de transfer de fișiere |
Nivel (conform modelului OSI ) | Aplicat |
Familie | TCP/IP |
Creat în | 1971 |
Port/ID | 21/TCP pentru comenzi, 20/TCP pentru date, 49152-65534/TCP dinamic |
Scopul protocolului | Transfer de fișier |
Specificație | RFC 959 |
Principalele implementări (clienți) | Comparația clienților FTP |
Implementări de bază ( servere ) | Comparația serverelor FTP |
Extensibilitate | Adăuga. comenzi |
Fișiere media la Wikimedia Commons |
FTP ( English File Transfer Protocol ) este un protocol de transfer de fișiere printr- o rețea care a apărut în 1971 cu mult înainte de HTTP și chiar înainte de TCP/IP , datorită căruia este unul dintre cele mai vechi protocoale de aplicație. Inițial, FTP a funcționat pe deasupra protocolului NCP [1] , astăzi este utilizat pe scară largă pentru distribuția de software și accesul la gazde la distanță . Spre deosebire de TFTP , garantează transmisia (sau o eroare) prin utilizarea unui protocol de cotă .
Protocolul este construit pe o arhitectură client-server și utilizează diferite conexiuni de rețea pentru a transfera comenzi și date între client și server. Utilizatorii FTP se pot autentifica prin transmiterea unui nume de utilizator și a unei parole în text clar sau, dacă este permis pe server, se pot conecta anonim. Puteți utiliza protocolul SSH pentru un transfer securizat care criptează (ascunde) numele de utilizator și parola, precum și conținutul fișierului.
Primele aplicații client FTP au fost instrumente interactive de linie de comandă , implementând comenzi și sintaxă standard. De atunci, interfețele grafice de utilizator au fost dezvoltate pentru multe sisteme de operare utilizate astăzi. Aceste interfețe variază de la componente ale unui program general de design web, cum ar fi Microsoft Expression Web , până la clienți FTP specializați precum FileZilla .
Proprietate | FTP | HTTP |
---|---|---|
Pe baza sesiunilor de lucru | da | Nu |
Autentificarea utilizatorului încorporată | da | Nu |
Destinat inițial pentru transmisie | Binare mari | fișiere text mici |
Model de conectare | Conexiune dublă | Conexiune unică |
Acceptă modurile de transfer text și binar | da | Nu |
Acceptă tipuri de date de transfer ( anteturi MIME ) | Nu | da |
Suportă operațiuni ale sistemului de fișiere (mkdir, rm, redenumire etc.) | da | Nu |
O caracteristică destul de izbitoare a protocolului FTP este că folosește conexiuni multiple (cel puțin duble). În acest caz, un canal este canalul de control, prin care comenzile sunt primite către server și răspunsurile acestuia sunt returnate (de obicei prin portul TCP 21), iar datele sunt de fapt transmise prin restul, câte un canal pentru fiecare transmisie. Prin urmare, în cadrul unei sesiuni, mai multe fișiere pot fi transferate simultan prin protocolul FTP și în ambele direcții. Pentru fiecare canal de date se deschide propriul port TCP al cărui număr este ales fie de server, fie de client, în funcție de modul de transmisie [2] .
Protocolul FTP (cum ar fi HTTP) are un mod de transfer binar, care reduce supraîncărcarea traficului și reduce timpul de schimb de date atunci când se transferă fișiere mari.
Începând să lucreze prin protocolul FTP, clientul intră în sesiune și toate operațiunile sunt efectuate în cadrul acestei sesiuni (cu alte cuvinte, serverul își amintește starea curentă). Protocolul HTTP nu „amintește” nimic - sarcina sa este de a oferi date și de a uita, prin urmare, amintirea stării atunci când se utilizează HTTP este realizată prin metode externe protocolului [2] .
FTP operează pe stratul de aplicație al modelului OSI și este folosit pentru a transfera fișiere folosind TCP/IP . Pentru a face acest lucru, un server FTP trebuie să ruleze și să aștepte cererile primite. Computerul client poate comunica cu serverul de pe portul 21. Această conexiune (flux de control) rămâne deschisă pe toată durata sesiunii. A doua conexiune (flux de date) poate fi deschisă fie de către server de la portul 20 la portul clientului corespunzător (modul activ), fie de către client de pe orice port către portul serverului corespunzător (modul pasiv), care este necesare pentru a transfera fișierul de date. Fluxul de control este folosit pentru a lucra cu sesiunea - de exemplu, schimbul de comenzi și parole între client și server folosind un protocol asemănător telnet. De exemplu, „RETR nume de fișier” va transfera fișierul specificat de la server la client. Datorită acestei structuri cu două porturi, FTP este considerat un protocol în afara benzii, spre deosebire de HTTP în bandă .
Protocolul este definit în RFC 959 . Serverul răspunde la fluxul de control cu coduri de stare ASCII cu trei caractere cu un mesaj text opțional. De exemplu, „200” (sau „200 OK”) înseamnă că ultima comandă a avut succes. Numerele reprezintă codul de răspuns, iar textul reprezintă clarificarea sau solicitarea. O transmisie în curs de desfășurare a fluxului de date poate fi întreruptă printr-un mesaj de întrerupere trimis prin fluxul de control.
FTP poate funcționa în modul activ sau pasiv, ceea ce determină modul în care este stabilită conexiunea. În modul activ, clientul creează o conexiune TCP de control cu serverul și trimite adresa sa IP și un număr arbitrar de port al clientului către server, după care așteaptă ca serverul să înceapă o conexiune TCP cu această adresă și numărul de port. Dacă clientul se află în spatele unui firewall și nu poate accepta o conexiune TCP de intrare, poate fi utilizat modul pasiv. În acest mod, clientul folosește un flux de control pentru a trimite o comandă PASV către server și apoi primește adresa sa IP și numărul de port de la server, care sunt apoi folosite de client pentru a deschide un flux de date dintr-un port client arbitrar. către adresa și portul primite. Ambele moduri au fost actualizate în septembrie 1998 pentru a suporta IPv6. În acest timp, au fost făcute modificări suplimentare în modul pasiv, actualizându-l la modul pasiv îmbunătățit.
Când se transmit date printr-o rețea, pot fi utilizate patru reprezentări ale datelor:
Pentru fișierele text, sunt furnizate diverse formate de control și setări ale structurii înregistrărilor. Aceste caracteristici au fost concepute pentru a funcționa cu fișiere care conțin formatare Telnet sau ASA.
Transferul de date poate fi efectuat în oricare dintre cele trei moduri:
Autentificarea FTP utilizează o schemă de nume de utilizator/parolă pentru a acorda acces. Numele de utilizator este trimis la server cu comanda USER, iar parola este trimisă cu comanda PASS. Dacă informațiile furnizate de client sunt acceptate de server, serverul va trimite o invitație clientului și va începe sesiunea. Dacă serverul acceptă această caracteristică, utilizatorii se pot conecta fără a furniza acreditări , dar serverul poate acorda doar acces limitat pentru astfel de sesiuni.
O gazdă care furnizează un serviciu FTP poate oferi acces FTP anonim . Utilizatorii se conectează în mod obișnuit cu „anonim” (poate fi sensibil la majuscule pe unele servere FTP) ca nume de utilizator. Deși, de obicei, utilizatorilor li se cere să furnizeze adresa lor de e-mail în loc de o parolă, nu se realizează nicio verificare. Multe gazde FTP care oferă actualizări de software acceptă accesul anonim.
În special pentru ca protocolul FTP să funcționeze prin firewall-uri, a fost creată o extensie NAT , numită FTP-ALG , care vă permite să difuzați conexiunile de intrare de la server la client prin NAT. În timpul unei astfel de conexiuni, FTP-ALG înlocuiește datele transmise de la client, indicând serverului adresa adevărată și portul la care serverul se poate conecta și apoi difuzează conexiunea de la server de la această adresă către client la adresa acestuia. În ciuda tuturor măsurilor și inovațiilor luate pentru a susține protocolul FTP, în practică, funcția FTP-ALG este de obicei dezactivată în toate routerele și routerele pentru a oferi securitate suplimentară împotriva amenințărilor viruși.
În mod normal, FTP transferă date atunci când serverul este conectat la client, după ce clientul a trimis comanda PORT. Acest lucru creează o problemă atât pentru NAT , cât și pentru firewall -uri , care nu permit conexiuni de la Internet la gazdele interne . Pentru NAT, o problemă suplimentară este că reprezentarea adreselor IP și a numărului de port în comanda PORT se referă la adresa IP și portul gazdei interne, în loc de adresa IP publică și portul NAT. Există două abordări ale acestei probleme. Primul este că clientul FTP și serverul FTP utilizează comanda PASV, care invocă o conexiune de date stabilită de la client la server. A doua abordare este modificarea valorilor NAT ale comenzii PORT folosind un gateway layer de aplicație .
Prima implementare a protocolului (1971) prevedea schimbul între client și server de mesaje constând dintr-un antet (72 de biți) și date de lungime variabilă. Antetul mesajului includea o solicitare către serverul FTP sau un răspuns de la acesta, tipul și lungimea datelor transmise. Parametrii de interogare (de exemplu, calea și numele fișierului), informațiile de pe server (de exemplu, o listă de fișiere dintr-un director) și fișierele în sine au fost transmise ca date. Astfel, comenzile și datele au fost transmise pe același canal.
În 1972 , protocolul a fost complet schimbat și a luat o formă apropiată de cea modernă. Comenzile cu parametrii de la răspunsurile client și server sunt transmise printr-o conexiune TELNET (canal de control), o conexiune separată (canal de date) este creată pentru transferul de date.
Edițiile ulterioare au adăugat posibilitatea de a lucra în modul pasiv, de a transfera fișiere între servere FTP, au introdus comenzi pentru obținerea de informații, schimbarea directorului curent, crearea și ștergerea directoarelor, salvarea fișierelor sub un nume unic. De ceva timp au existat comenzi pentru trimiterea de e-mailuri prin FTP, dar ulterior au fost excluse din protocol.
În 1980 , protocolul FTP a început să folosească TCP . Ultima versiune a protocolului a fost lansată în 1985. În 1997, a apărut o completare la protocol care vă permite să criptați și să semnați informații în canalul de control și canalul de date. În 1999, a fost lansat un supliment de internaționalizare a protocolului care recomandă utilizarea codării UTF-8 pentru comenzile și răspunsurile serverului și definește o nouă comandă LANG care setează limbajul de răspuns.
Cele mai comune browsere web pot prelua fișiere aflate pe serverele FTP, deși este posibil să nu accepte extensii de protocol precum FTPS . Când este specificată o adresă FTP mai degrabă decât o adresă HTTP, conținutul disponibil pe serverul de la distanță este prezentat în mod similar cu alt conținut web. Un client FTP complet funcțional poate fi rulat în Firefox ca extensie FireFTP .
Din 2020, browserul Chrome (și posibil și altele) va fi complet lipsit de suport pentru protocolul FTP. [3]
SintaxăSintaxa URI FTP este descrisă în RFC 1738, sub forma: ftp://[<nume utilizator>[:<parolă>]@]<gazdă>[:<port>]/<cale> (parametrii dintre paranteze drepte sunt opționali ). De exemplu:
ftp://public.ftp-servers.example.com/mydirectory/myfile.txt (link descendent) (link descendent)
sau:
ftp://user001:[email protected]/mydirectory/myfile.txt (link descendent) (link descendent)
Pentru mai multe informații despre specificarea unui nume de utilizator și a unei parole, consultați documentația browserului. În mod implicit, majoritatea browserelor web folosesc modul pasiv (PASV), care ocolește mai bine firewall-urile utilizatorilor finali.
FTP nu a fost conceput pentru a fi sigur (mai ales după standardele actuale) și are numeroase vulnerabilități de securitate. În mai 1999, autorii RFC 2577 au redus vulnerabilitățile la următoarea listă de probleme:
FTP nu își poate cripta traficul, toate transmisiile sunt text clar, astfel încât numele de utilizator, parolele, comenzile și datele pot fi citite de oricine poate intercepta pachetul prin rețea. Această problemă este comună multor specificații de protocol de Internet (inclusiv SMTP , Telnet , POP, IMAP) care au fost dezvoltate înainte ca mecanismele de criptare precum TLS și SSL să fie dezvoltate. Soluția obișnuită la această problemă este utilizarea versiunilor „securizate”, TLS-securizate ale protocoalelor vulnerabile ( FTPS pentru FTP, TelnetS pentru Telnet etc.) sau un alt protocol mai sigur precum SFTP / SCP furnizat cu majoritatea implementărilor protocolului Secure Shell . .
Există mai multe metode securizate de transfer de fișiere denumite uneori „FTP securizat”.
FTPS explicit este o extensie a standardului FTP care permite clienților să solicite ca o sesiune FTP să fie criptată. Acest lucru este implementat prin trimiterea comenzii „AUTH TLS”. Serverul are capacitatea de a permite sau de a respinge conexiuni care nu solicită TLS. Această extensie de protocol este definită în specificația RFC 4217 . FTPS implicit este un standard depreciat pentru FTP care necesită utilizarea unei conexiuni SSL sau TLS. Acest standard trebuia să folosească porturi diferite decât FTP-ul normal.
SFTP, sau „SSH File Transfer Protocol”, nu are legătură cu FTP, cu excepția faptului că transferă și fișiere și are un set similar de comenzi pentru utilizatori. SFTP, sau secure FTP, este un program care folosește SSH (Secure Shell) pentru a transfera fișiere. Spre deosebire de FTP standard, acesta criptează atât comenzile, cât și datele, împiedicând transmiterea deschisă a parolelor și a informațiilor sensibile în rețea. Funcționalitatea SFTP este similară cu FTP, dar deoarece utilizează un protocol diferit, clienții FTP standard nu pot contacta un server SFTP și invers.
FTP prin SSH (nu SFTP) se referă la practica tunelului unei sesiuni FTP obișnuite printr-o conexiune SSH . Deoarece FTP utilizează mai multe conexiuni TCP, tunelul prin SSH este deosebit de dificil. Când mulți clienți SSH încearcă să tunelizeze canalul de control (conexiunea originală „client-server” pe portul 21), doar acel canal va fi securizat; la transferul de date, software-ul FTP de la fiecare capăt va stabili noi conexiuni TCP (canale de date) care vor ocoli conexiunea SSH și, astfel, vor pierde protecția integrității .
În caz contrar, software-ul client SSH trebuie să aibă cunoștințe despre FTP pentru a monitoriza și rescrie mesajele fluxului de control FTP și pentru a deschide în mod autonom noi redirecționări pentru fluxul de date FTP.
Pachete software care acceptă acest mod:
FTP prin SSH este uneori denumit FTP securizat, dar nu trebuie confundat cu alte metode, cum ar fi SSL/TLS (FTPS). Alte metode de transfer de fișiere care utilizează SSH și care nu au legătură cu FTP sunt SFTP și SCP . În fiecare dintre ele, atât acreditările, cât și datele fișierelor sunt întotdeauna protejate de protocolul SSH.
Mai jos este o scurtă descriere a codurilor de răspuns care pot fi returnate de serverul FTP . Aceste coduri au fost standardizate de IETF în RFC 959 . După cum am menționat mai devreme, codul de răspuns este un număr din trei cifre. Prima cifră este responsabilă pentru unul dintre cele trei rezultate: succes, eșec sau un indiciu al unei erori sau un răspuns incomplet.
A doua cifră specifică tipul de eroare:
A treia cifră specifică în cele din urmă eroarea.
În exemplu, comenzile date de client sunt evidențiate cu caractere aldine; font obișnuit - mesaje server. Notele sunt separate prin două bare oblice:
220 Server FTP gata. 220 Bună lume! UTILIZATOR anonim 331 Conectare anonimă ok, trimiteți adresa de e-mail completă ca parolă TRECE************ 230 Conectat anonim. PASV 227 Intrarea în modul pasiv (192,168,254,253,233,92) //Clientul trebuie să deschidă o conexiune la IP-ul transmis LISTĂ 150 Aici vine lista directorului. // Serverul trimite o listă de fișiere într-un director 226 Trimitere director OK. CWD sosire 250 Directorul a fost schimbat cu succes. PASV 227 Intrarea în modul pasiv (192,168,254,253,207,56) exemplu STOR.avi 150 Ok pentru a trimite date. // Clientul trimite conținutul fișierului 226 Primire fișier OK. PĂRĂSI 221 La revedere.Argumentul 192,168,254,253,207,56 înseamnă că o conexiune la server este așteptată pe o gazdă cu adresa IP 192.168.254.253 pe portul 207 << 8 + 56 = 53048 pentru a scrie 56 sau 207*256+56 in=5304).
Multe servere FTP au un director (numit incoming, upload etc.) care poate fi scris pentru încărcarea fișierelor pe server. Acest lucru permite utilizatorilor să populeze serverele cu date noi.
FXP ( File eXchange Protocol ) este o modalitate de a transfera fișiere între două servere FTP direct, fără a descărca fișiere pe computerul utilizatorului. În timpul unei sesiuni FXP, clientul deschide două conexiuni FTP la două servere diferite, solicitând un fișier pe primul server, specificând adresa IP a celui de-al doilea server în comanda PORT.
Avantajul incontestabil al suportării standardului FXP este că utilizatorii finali care doresc să copieze fișiere de pe un server FTP pe altul nu mai sunt supuși limitei lățimii de bandă a propriei conexiuni la Internet. Nu este nevoie să descărcați un fișier pentru dvs. pentru a-l încărca ulterior pe un alt server FTP. Astfel, timpul de transfer al fișierelor va depinde doar de viteza de conectare între două servere FTP la distanță, care în cele mai multe cazuri este evident mai mare decât cea „utilizator”.
FXP a început să fie folosit de atacatori pentru a ataca alte servere: comanda PORT specifică adresa IP și portul serviciului atacat de pe computerul victimei, iar comenzile RETR/STOR accesează acest port în numele serverului FTP și nu al atacatorului. mașină, care a făcut posibilă organizarea de atacuri DDoS la scară largă folosind mai multe servere FTP simultan sau ocolirea sistemului de securitate al computerului victimei dacă se bazează doar pe verificarea IP-ului clientului și serverul FTP utilizat pentru atac este situat pe un rețea sau gateway de încredere. Ca rezultat, aproape toate serverele verifică acum dacă adresa IP specificată în comanda PORT se potrivește cu adresa IP a clientului FTP și, implicit, interzic utilizarea adreselor IP ale terților acolo. Astfel, utilizarea FXP nu este posibilă atunci când lucrați cu servere FTP publice.
URI | scheme|
---|---|
Oficial | |
neoficial |
TCP /IP pe straturi ale modelului OSI | Protocoale de bază|
---|---|
Fizic | |
canalizat | |
reţea | |
Transport | |
sesiune | |
Reprezentare | |
Aplicat | |
Altele aplicate | |
Lista de porturi TCP și UDP |