FTP - wat is het en hoe ermee te werken? Voorbeelden van netwerkbestandsservices: FTP en NFS

Als je deze blog al heel lang leest, herinner je je misschien nog hoe ik besloot daarin een beschrijving te verzamelen van populaire (en niet zo populaire) netwerkprotocollen. Waarom ik dit nodig heb, lees je in het artikel Een redelijk volledige beschrijving van het SMTP-protocol. Daarom besloot ik het FTP-protocol, dat veel wordt gebruikt voor het overbrengen van bestanden, aan de verzameling toe te voegen.

1. Laten we gaan

Zoals gewoonlijk begin ik meteen met een voorbeeld:

$ telnet voorbeeld.ru 21
192.168.0.1 proberen...
Verbonden met voorbeeld.ru.
Escape-teken is "^]".
220-Welkom bij Pure-FTPd
U bent gebruiker nummer 5 van 100 toegestaan.
Lokale tijd is nu 17:41. Serverpoort: 21.
220 De verbinding wordt verbroken na 15 minuten inactiviteit.
GEBRUIKER afiskon
331 Gebruiker afiskon OK. Wachtwoord vereist
PASS lamewachtwoord
230-Gebruiker afiskon heeft groepstoegang tot: codeerders
230 Oké. De huidige beperkte map is /

De FTP-server draait doorgaans op poort 21. In het bovenstaande voorbeeld worden de regels die beginnen met cijfers verzonden door de server, de rest door de client. Klantaanvragen bestaan ​​altijd uit één enkele formaatregel COMMANDO [argumenten], terwijl serverreacties meerdere regels kunnen bevatten.

De eerste en laatste regel beginnen met drie cijfers die de antwoordcode vertegenwoordigen, gevolgd door een tekstbeschrijving van het antwoord, gescheiden van de code door een spatie of een streepje. Als een spatie als scheidingsteken wordt gebruikt, is de regel de laatste in het antwoord (en mogelijk de enige), anders ontvingen we de eerste regel van een meerregelig antwoord. We hebben dit al ergens gezien, nietwaar?

Er zijn vijf serverreactiegroepen:

Zoals u in het voorbeeld kunt zien, begint het allemaal met het verzenden van code 220 door de server. Vervolgens moet de gebruiker inloggen met de opdrachten USER en PASS. Als alles goed is gedaan, zal de server op de eerste reageren met code 331 en op de tweede met code 230. Voor anoniem inloggen (als dit is toegestaan ​​door de serverinstellingen) dient u als gebruikersnaam “anoniem” op te geven, en uw e-mailadres als wachtwoord. In de praktijk meestal een lege e-mail of iets dergelijks [e-mailadres beveiligd].

Zoals u kunt zien, wordt het wachtwoord in leesbare tekst verzonden, dus het is ten zeerste aan te raden om de FTP-verbinding te coderen met SSL (dit heet FTPS - FTP plus SSL), en nog beter: bestanden overbrengen via SSH met behulp van scp, sftp of WinSCP nutsvoorzieningen. De eerste twee zijn beschikbaar op elk Unix-systeem en gebruiken dezelfde protocollen die bovenop SSH draaien om bestanden over te dragen. WinSCP is geschreven voor Windows en lijkt op Total Commander; het kan werken met zowel het verouderde SCP (Secure Copy) als SFTP (SSH File Transfer Protocol), dat alleen in SSH-2 verscheen.

2. Laten we rondkijken

Maar iets bracht me naar de verkeerde steppe. Na het passeren van de authenticatie (wauw, ik zal het niet verwarren met autorisatie) De FTP-server voert onze opdrachten met plezier uit. Hier is hun lijst:

Team Verwachte code Beschrijving
DELE 250 Bestand verwijderen
RMD 250 Verwijder map
CWD 250 Ga naar map
MKD 257 Directory maken
PWD 257 Ontdek de huidige map
ONTSLAG NEMEN 221 Werk af
TYPE 200 Overdrachtstype instellen
HAVEN 200 Schakel over naar de actieve modus
PASV 227 Schakel over naar de passieve modus
LIJST 150, 226 Directory-inhoud ophalen
RETR 150, 226 Bestand downloaden
STOR 150, 226 Bestand uploaden
ABOR 426,226 Overdracht annuleren
RNFR 350 Selecteer het bestand waarvan u de naam wilt wijzigen
RNTO 250 Bestand hernoemen

Hier heb ik alleen de basisopdrachten vermeld, die voldoende zijn om een ​​volwaardige FTP-client te schrijven. Feit is dat FTP-servers onder reële omstandigheden zeer selectief zijn in het ondersteunen van de opdrachten beschreven in RFC959 en RFC3659. Dus als we een echt werkende applicatie willen krijgen, en geen bolvormig paard in een vacuüm, zullen we ons moeten beperken tot alleen de commando's uit de gegeven lijst.

De eenvoudigste commando's zijn STOP, DELE, MKD, CWD en RMD. We bevelen en controleren eenvoudigweg de code die door de server wordt geretourneerd. Als deze gelijk is aan de verwachte waarde, is alles in orde, zo niet, dan verwerken we de fout.

MKD ftp_test
257 "ftp_test" : De map is succesvol aangemaakt
CWD ftp_test
250 oké. De huidige map is /ftp_test
CWD..
250 oké. Huidige map is /
RMD ftp_test
250 De map is succesvol verwijderd

Als ik een FTP-client zou schrijven, zou de code die verantwoordelijk is voor het uitvoeren van deze opdrachten er ongeveer zo uitzien:

int-code;
char * richt;
// ...
if (code = rawcmd(250, "RMD %s \r\n", richt) )
printf("Fout: %d \N", code) ;
anders
printf("Alles klaar! \N") ;

Een beetje moeilijker met het parseren van de serverreactie op een commando PWD:

PWD
257 "/ftp_test" is uw huidige locatie

De huidige directory wordt verzonden in de enige (laatste?) regel van het serverantwoord, tussen dubbele aanhalingstekens. Als de volledige naam van de huidige map dubbele aanhalingstekens bevat, worden deze vervangen door twee aanhalingstekens:

PWD
257 "/ftp""test" is uw huidige locatie

Om bestanden te hernoemen worden een aantal commando's gebruikt − RNFR en RNTO:

RNFR oud_bestand.zip
350 Maak je een grapje?
RNTO nieuw_bestand.zip
250 Klaar!

Blijkbaar is dit een optimalisatie zodat de buffer waarin de server clientopdrachten leest in de orde van de maximaal toegestane lengte van de volledige bestandsnaam is, en niet twee keer zo lang. In 1971, toen het protocol werd opgesteld, zou dit belangrijk kunnen zijn geweest.

Team TYPE Hiermee kunt u de modus voor bestandsoverdracht instellen. Voorbeeld:

TYPE E
200 TYPE is nu EBCDIC
TYPE A
200TYPE is nu ASCII
TYPE I
200 TYPE is nu 8-bit binair

Voor zover ik weet is dit commando tegenwoordig al verouderd en kunnen alle gegevens veilig worden verzonden in binair formaat (TYPE I). Citaat uit Wikipedia:

De eerste computers gebruikten een machinewoordformaat ter grootte van een byte, een dubbel machinewoord, en niet een veelvoud van 8. Het waren meestal veelvouden van zes. Tijdens de ontwikkeling van het machine-instructiesysteem voor de IBM System/360 werden acht bits per byte aangenomen. Dit is een internationale standaard geworden en sinds begin jaren zeventig De meeste computers gebruiken bytes bestaande uit 8 bits en machinewoorden in veelvouden van 8.

3. Laten we actie ondernemen

Een bijzonder kenmerk van het FTP-protocol is dat er verschillende verbindingen worden gebruikt om opdrachten uit te voeren en bestanden over te dragen. Dit is over het algemeen een normale ontwerpbeslissing. We weten niet wat er in deze bestanden staat, en als we ze samen met opdrachten verzenden, zullen we op de een of andere manier de inhoud van het bestand moeten coderen om het te onderscheiden van opdrachten. Waarom de hoeveelheid verkeer verhogen en het protocol ingewikkelder maken als u eenvoudigweg een nieuwe verbinding kunt openen en het bestand kunt verzenden zoals het is?

Bij het tot stand brengen van een nieuwe verbinding moet iemand daadwerkelijk verbinding maken en moet iemand de verbinding accepteren. Als de client een poort opent en de server er verbinding mee maakt, wordt de bestandsoverdrachtmodus actief genoemd. Anders is het passief. Omdat veel internetgebruikers tegenwoordig achter NAT zitten, wordt meestal de passieve modus gebruikt. En dit is niet erg goed, omdat het aantal poorten op de server beperkt is.

Wat interessant is, is dat het mogelijk is om bestanden rechtstreeks van de ene FTP-server naar de andere over te brengen. Maar omdat deze functie vaak werd gebruikt bij DDoS-aanvallen, is deze nu vrijwel overal uitgeschakeld.

Gebruik de opdracht om naar de passieve modus te schakelen PASV, om over te schakelen naar actief - HAVEN:

HAVEN 192,168,10,1,21,133
200 POORT-opdracht succesvol
PASV
227 Passieve modus betreden (192,168,0,1,21,216)

Zoals je misschien wel raadt, zijn het IP-adres en de poort voor de verbinding gecodeerd met cijfers. Stel dat we ons in de passieve modus bevinden en een dataverbinding tot stand willen brengen:

$ telnet 192.168.0.1 `expr 21 \* 256 + 216`
192.168.0.1 proberen...
Verbonden met voorbeeld.ru.
Escape-teken is "^]".

Waarna we bijvoorbeeld de inhoud van de huidige map kunnen bekijken met behulp van de opdracht LIJST:

LIJST
150 Geaccepteerde dataverbinding
226-Opties: -a -l
226 5 wedstrijden totaal

Laten we eens kijken naar de telnet-uitvoer:

drwx------ 5 afiskon-codeerders 512 7 juli 11:35 .
drwx------ 5 afiskon-codeerders 512 7 juli 11:35 ..
drwxr--r-- 3 afiskon codeerders 512 6 juni 14:30 website
drwxr-xr-x 2 afiskon-codeerders 1024 7 juli 00:16 logs
drwxr--r-- 2 afiskon-codeerders 512 6 juni 14:30 tmp
Verbinding gesloten door buitenlandse host.

Het downloaden en uploaden van bestanden gebeurt op precies dezelfde manier, alleen de commando's worden gebruikt RETR (bestand) En STOR (bestand) respectievelijk. De RETR-, STOR- en LIST-opdrachten kunnen halverwege de uitvoering worden onderbroken met behulp van de opdracht ABOR, waarop de server zou moeten reageren met 426 “overdracht onderbroken”, en vervolgens met 226 “annulering van de bewerking was succesvol.”

4. Conclusie

Hier zal ik waarschijnlijk mijn verhaal beëindigen. Het resultaat was 9 KB tekst versus 130 KB RFC959. Met behulp van dit artikel is het heel goed mogelijk om een ​​eenvoudige FTP-client of -server te schrijven, ik heb het gecontroleerd! Het belangrijkste is om het te testen op compatibiliteit met zoveel mogelijk software, omdat, zoals ik al opmerkte, in de FTP-wereld maar weinig mensen zich strikt aan de RFC houden. En onthoud ten slotte de gouden regel: ‘Wees liberaal met input, streng met output.’

Het FTP-protocol is een type gegevensoverdrachtprotocol dat wordt gebruikt voor het kopiëren en verplaatsen van bestanden op internet en binnen TCP-netwerken. FTP wordt vaak gebruikt om pagina's en documenten van verschillende typen te downloaden naar hostcomputers. Het FTP-protocol maakt gebruik van een client-server-architectuur en verschillende verbindingen binnen een netwerk om opdrachten en informatie van client naar server over te dragen en omgekeerd. FTP-gebruikers mogen zich authenticeren met een login en wachtwoord, of, als dit formulier op de server is toegestaan, kunnen gebruikers anoniem toegang krijgen.
Naast het reguliere protocol wordt ook FTPS gebruikt, een speciale uitbreiding van standaard FTP, waarmee clients toegang kunnen krijgen tot de server en gecodeerde informatieoverdrachtsessies kunnen gebruiken. Deze aanpak wordt geïmplementeerd door het verzenden van de authenticatieopdracht "auth tls", waarmee de server verbindingen kan accepteren of weigeren die geen TLS-verbindingen aanvragen.

SFTP

SFTP is een standaard voor het overbrengen van informatie op internet, bedoeld voor het verplaatsen en kopiëren van bestanden via een zeer betrouwbare en veilige SSH-verbinding (Secure Shell). Dit type verbinding kan toegang en veilige transmissie bieden, die wordt uitgevoerd met codering van zowel de login en het wachtwoord als de inhoud van de transmissie zelf, waardoor wachtwoorden en vertrouwelijke informatie worden beschermd tegen open transmissie op het netwerk.
In tegenstelling tot FTP gebruikt het SFTP-protocol, ondanks soortgelijke functies, een ander protocol voor gegevensoverdracht, en daarom kunnen standaardclients niet communiceren met SFTP-servers.

Kenmerken van de FTP-standaard

Deze standaard is een van de oudste netwerkprotocollen, die 45 jaar geleden werd gecreëerd en tegenwoordig veel wordt gebruikt op internet. Een van de belangrijkste kenmerken van het protocol is het gebruik van verschillende verbindingen: één voor het verzenden van besturingsopdrachten en andere voor directe bestandsoverdracht. In dit geval kunt u meerdere parallelle verbindingen openen, die elk gegevens in beide richtingen kunnen overbrengen.
Er zijn twee vormen van FTP-werking, die verschillen in de manier waarop verbindingen tot stand worden gebracht: passief en actief. Tijdens de actieve modus brengt de server een verbinding tot stand om informatie naar de gebruiker te verzenden, en tijdens de passieve modus omgekeerd.
Deze standaard wordt al geruime tijd gebruikt en is op het eerste gezicht uiterst eenvoudig. Maar een dergelijke eenvoud kan nogal bedrieglijk zijn, aangezien een groot aantal gebruikers problemen kan ondervinden bij het verkrijgen van toegang via deze standaard, vooral als de server of gebruiker een firewall of NAT gebruikt.

Kenmerken van de actieve modus

Tijdens de actieve modus initieert de client een besturingsverbinding met serverpoort 21 door het commando “port” te verzenden, dat het adres en de poort specificeert voor het overbrengen van informatie. Na ontvangst van dit commando start de server een verbinding vanaf zijn eigen poort 20 naar de opgegeven gebruikerspoort.
Het grootste nadeel van deze methode is dat de gebruiker een speciaal IP-adres op internet moet hebben om te kunnen werken. Bovendien kunnen er enkele problemen optreden als de client zich achter een firewall of NAT bevindt.

Passieve modusfuncties

Om een ​​passieve verbinding tot stand te brengen, moet de gebruiker het speciale “pasv”-commando naar de server sturen. Als reactie op dit commando verzendt de server informatie over het adres en de poort waarmee de client verbinding moet maken. Na ontvangst van deze gegevens maakt de gebruiker verbinding met de servercomputer en draagt ​​informatie over.
Bij gebruik van de passieve modus worden absoluut alle verbindingen door de client geïnitieerd en daarom zijn er geen vereisten voor. De gebruiker mag NAT en een firewall gebruiken, en geen speciaal IP-adres. Daarom wordt tegenwoordig de passieve modus gebruikt als het belangrijkste type toegang en bestandsoverdracht via FTP op internet.

Instellingen bij gebruik van een firewall

Bij gebruik van een firewall en actieve modus kunnen gebruikers toegangsproblemen ondervinden. Als de firewall is geconfigureerd om binnenkomende verbindingen te weigeren die niet intern zijn geïnitieerd, kan de servercomputer geen verbinding tot stand brengen en beginnen met het verzenden van informatie. En vanwege het feit dat de poort voor informatie van een dynamisch type is, doen zich enkele problemen voor bij het instellen van de firewall. De beste optie in dit geval is om het bereik van de gebruikte poorten aan te geven en daarvoor een speciale firewall-regel in te stellen.
Als u de passieve modus gebruikt, loopt de servercomputer het risico een vergelijkbare complexiteit te ondervinden.

In dit geval kunt u een vergelijkbare oplossing gebruiken: geef in de opties een bepaald bereik aan gebruikte poorten op en maak een speciale regel voor dit bereik.

Configuratie bij gebruik van NAT
Sommige moderne NAT-implementaties kunnen het besturingskanaal van een FTP-verbinding bewaken en het interne adres vervangen door een extern adres voor normale gegevensoverdracht. Bovendien hebben FTP-servers de mogelijkheid om een ​​externe poort op te geven die in de controlesessie moet verschijnen.
Meestal is voor normale bestandsoverdracht via FTP via NAT het doorsturen van poort 21 voldoende om een ​​controlesessie te implementeren, evenals het specificeren en doorsturen van een reeks dynamische adressen die worden gebruikt voor gegevensoverdracht op internet.

FTP-(Protocol voor bestandsoverdracht protocol voor bestandsoverdracht ) is een standaardprotocol ontworpen voor het overbrengen van bestanden via TCP-netwerken, gebouwd op een client-server-architectuur en met behulp van verschillende netwerkverbindingen om opdrachten en gegevens tussen de client en de server over te dragen.

De server biedt de client anoniem of na authenticatie toegang tot gegevens (meestal bestanden en mappen) aan de client, waarbij de login en het wachtwoord in duidelijke tekst worden verzonden. U kunt het SSH-protocol gebruiken om uw login, wachtwoord en verzonden gegevens te coderen.

Het protocol is vrij eenvoudig; het gebruikt verschillende TCP-verbindingen voor opdrachten en voor verzonden gegevens. Meestal zijn dit 21 poorten voor besturingsopdrachten en 20 voor datatransmissie (anders kan dit afwijken). Nadat een TCP-verbinding op poort 21 tot stand is gebracht, vindt de communicatie tussen de FTP-client en de server plaats met behulp van vrij eenvoudige tekstopdrachten.

Conform RFC 959 reageert de Control Flow Server (21 poorten) met driecijferige ASCII-statuscodes met een optioneel sms-bericht.

Er zijn 2 werkingsmodi van het FTP-protocol: actief en passief.

In de actieve modus creëert de client een TCP-controleverbinding met de server op poort 21 en verzendt zijn IP-adres en een willekeurig clientpoortnummer naar de server, en wacht vervolgens totdat de server een TCP-verbinding start met dit adres en poortnummer.

In de passieve modus gebruikt de client de controlestroom (TCP-poort 21) om een ​​PASV-opdracht naar de server te sturen en ontvangt vervolgens zijn IP-adres en poortnummer van de server, die vervolgens door de client wordt gebruikt om een ​​datastroom te openen van een willekeurige clientpoort naar het ontvangen adres en de ontvangen poort.

Het kennen van de werkingsmodi van FTP helpt als u verbinding moet maken met een FTP-server of toegang moet krijgen tot een netwerk dat verborgen is achter NAT en/of wordt beschermd door een firewall, wat, zoals u wellicht vermoedt, niet ongewoon is. Als de client geen inkomende verbindingen op een willekeurige poort kan accepteren, moet de server in passieve modus worden geconfigureerd. Inkomende verbindingen met de client zijn dan niet vereist, maar de server moet gereed zijn om inkomende verbindingen op vooraf gedefinieerde poorten te accepteren. De actieve modus is geschikt voor een server waarvan de beheerder niet klaar is om inkomende verbindingen op andere poorten dan 21 te accepteren, maar in dit geval kan de client alleen verbinding maken als deze zelf inkomende verbindingen accepteert. Er zal dus hoe dan ook iemand extra poorten moeten openen.

Tijdens de verzending kunnen vier gegevensrepresentaties worden gebruikt:

    ASCII - gebruikt voor tekst.

    Afbeeldingsmodus (binair) - Het verzendende apparaat verzendt elk bestand byte voor byte en de ontvanger slaat de bytestream op bij ontvangst.

    EBCDIC - Wordt gebruikt om platte tekst tussen hosts over te dragen in EBCDIC-codering.

    Lokale modus - maakt het mogelijk dat twee computers met identieke instellingen gegevens in hun eigen formaat verzenden zonder conversie naar ASCII.

Gegevensoverdracht kan in drie modi worden uitgevoerd:

    Streammodus - gegevens worden verzonden als een continue stroom, waardoor FTP geen enkele verwerking hoeft uit te voeren.

    Blokmodus - FTP verdeelt de gegevens in verschillende blokken (headerblok, aantal bytes, gegevensveld) en verzendt deze vervolgens naar TCP.

    Compressiemodus: gegevens worden gecomprimeerd met behulp van één enkel algoritme.

FTP gebruikt een login en wachtwoord voor authenticatie om toegang te verlenen. De gebruikersnaam wordt met het USER-commando naar de server verzonden en het wachtwoord wordt met het PASS-commando verzonden. Als de door de client verstrekte informatie door de server wordt geaccepteerd, stuurt de server een uitnodiging naar de client en begint de sessie. De login en het wachtwoord worden in leesbare tekst verzonden, dus deze methode is niet veilig te noemen. Een FTP-server kan ook anonieme toegang tot gegevens bieden, dat wil zeggen voor iedereen, zonder om een ​​login en wachtwoord te vragen.
Er zijn uitbreidingen en methoden voor veilige gegevensoverdracht en authenticatie, bijvoorbeeld: FTPS SFTP FTP via SSH.

Ik zal bij mijn opmerkingen een voorbeeld geven van een FTP-sessie. Hier is de uitvoer van de opdrachten (uiteraard alleen in het controlekanaal) die de FTP-client naar de server heeft verzonden en de antwoorden van de server zonder afkortingen (ik zal enkele parameters vervangen door sterretjes, bijvoorbeeld het wachtwoord om veiligheidsredenen):

Status: - dit is een bericht van de FTP-client; bij het “handmatig” uitwisselen van opdrachten met FTP krijgt u deze berichten niet te zien. Reactie: - dit zijn de reacties van de FTP-server Commando: - dit zijn de commando's die de client naar de server stuurt (in handmatige modus voert u ze in via het toetsenbord).

S tatus: Verbinding maken met 37.140.*.* ...
Status: Verbonden met 37.140.*.*. Wachten op welkomstbericht...
Reactie: 220 (vsFTPd 2.2.2) - dus we kloppen op poort 21 37.140.*.* en ze vertellen ons dat vsFTPd daar werkt
Commando: GEBRUIKER ********** - gebruikersnaam verzenden
Reactie: 331 Geef het wachtwoord op. - gebruikersnaam geaccepteerd
Commando: PASS ********** - stuur het wachtwoord
Reactie: 230 Inloggen succesvol. -wachtwoord geaccepteerd
Commando: SYST - "En welk besturingssysteem heb je?" wij vragen
Reactie: 215 UNIX-type: L8 - “en dit is het” zal de server antwoorden
Commando: FUNCTIE - Wat kunt u doen, server?
Reactie: 211-Kenmerken: - en hier is wat :)
Reactie: EPRT
<... Не будем оглашать весь список...>
Reactie: UTF8
Reactie: 211 Einde - de server is klaar met het opsommen van de functies
Commando: OPTS UTF8 AAN - praat met ons in UTF-8-codering
Reactie: 200 Altijd in UTF8-modus. - geen vraag
Status: Verbonden - Wij zijn degenen die de verbinding nieuw leven inblazen.
Commando: PWD - laat ons de werkmap zien
Reactie: 257"/" - op! dit is de naam van de werkmap (we hebben /)
Commando: TYPE A - maar eerst stellen we de gegevenspresentatiemodus in
- OK
Commando: PASV - en vraag om in de passieve modus te gaan
Reactie: 227 Passieve modus betreden (37.140.192.202.249.140). - een lijst met poorten ontvangen
Commando: LIJST - geef mij een lijst met de inhoud van de directory

- op dit punt ontvingen we de inhoudsopgave via het datakanaal
Commando: TYPE A
Reactie: 200 Overschakelen naar ASCII-modus.
Status: Directorylijst ophalen...
Commando: CWD www - verander de werkmap naar www
Reactie: 250 Directory succesvol gewijzigd. -antwoord "oké"
Commando: PWD - vraag opnieuw de werkmap op
Reactie: 257 "/www" - nu is hij /www
Commando: TYPE A - en het selecteren van de gegevenspresentatiemodus
Reactie: 200 Overschakelen naar ASCII-modus.
Commando: PASV - opnieuw in passieve modus
Reactie: 227 Passieve modus betreden (37.140.192.202.252.174).
Commando: LIJST - vraag de inhoudsopgave van de catalogus aan
Reactie: 150 Hier komt de directorylijst.
Reactie: 226 Directory verzenden OK.
Status: Directoryvermelding succesvol - we hebben de inhoudsopgave ontvangen en nu
Status: Het downloaden van /www/google8f2c0456e362dfaa.html wordt gestart - we willen het bestand downloaden
Commando: TYPE A - hiervoor selecteren we het type opnieuw
Reactie: 200 Overschakelen naar ASCII-modus.
Commando: PASV - en gegevensoverdrachtmodus
Reactie: 227 Passieve modus betreden (37.140.192.202.254.190).
Commando: RETR google8f2c0456e362dfaa.html - en zeg: "Geef het aan het bestand"
Reactie: 150 Gegevensverbinding in BINARY-modus openen voor google8f2c0456e362dfaa.html (53 bytes).
Reactie: 226 Overdracht voltooid. - en nu werd het bestand ontvangen via het datakanaal
Status: Download succesvol
Status: Directorylijst ophalen...
<... Пропустим некоторые повторяющиеся действия...>
Commando: MKD fff - en hier hebben we een map gemaakt
Reactie: 257 "/www/moop-nz.ru/02-uslugi/fff" aangemaakt
Commando: RNFR /www/moop-nz.ru/02-uslugi/fff - en we willen de fff-map hernoemen
Reactie: 350 Klaar voor RNTO.
Commando: RNTO /www/moop-nz.ru/02-uslugi/eee - naar de eee-map
Reactie: 250 Hernoemen succesvol. - de operatie was succesvol
<... Пропустим некоторые повторяющиеся действия...>
Commando: RMD /www/moop-nz.ru/02-uslugi/eee/ - verwijder de eerder gemaakte map
Reactie: 250 Verwijdering van directory is gelukt. - alles is gelukt
Status: Verbonden
Status: Uploaden van C:\12345\12345 001.jpg wordt gestart - begin met het uploaden van het bestand naar de server
<... Пропустим некоторые повторяющиеся действия...>
Commando: TYPE I
Reactie: 200 Overschakelen naar binaire modus.
Commando: PASV
Reactie: 227 Passieve modus betreden (37.140.192.202.243.234).
Commando: STOR 12345 001.jpg - deze keer sturen we het bestand naar de server
Reactie: 150 Ok om gegevens te verzenden.
Reactie: 226 Overdracht voltooid.
Status: Upload succesvol
Status: Directorylijst ophalen...
Commando: TYPE A
Reactie: 200 Overschakelen naar ASCII-modus.
Commando: PASV
Reactie: 227 Passieve modus betreden (37,140,192,202,251,25).
Commando: LIJST
Reactie: 150 Hier komt de directorylijst.
Reactie: 226 Directory verzenden OK.
Status: Directoryvermelding succesvol
Commando: DELE /www/moop-nz.ru/02-uslugi/12345 001.jpg - en verwijder het uiteindelijk
Reactie: 250 Verwijderbewerking succesvol.

Mensen hebben veel FTP-servers en -clients gemaakt (het protocol bestaat immers al sinds 1971).

Er zijn speciale programma's die als FTP-client werken, zoals: FileZilla, gFTP, cURL, lftp en vele andere, maar nu kan bijna elke browser als FTP-client werken (Mozilla Firefox, Konqueror, Opera, Yandex.Browser, Google Chrome , Internet Explorer, enz.) of bestandsbeheerder (Midnight Commander, Krusader, GNOME Commander, Konqueror, Nautilus, Dolphin, FAR Manager, Total Commander, Windows Explorer, enz.), dus het is niet nodig om speciale programma's te gebruiken (hoewel ik gebruik soms gFTP).

Om uw FTP-server met voorkeur en authenticatie in te stellen, heeft u een speciaal programma nodig dat de rol van server vervult. Er zijn ook veel van dergelijke programma's, waaronder: vsftpd, ProFTPD, Pure-FTPd, glFTPd, oftpd, Serv-U File Server en vele anderen.

Het lijkt erop dat het in grote lijnen duidelijk is wat FTP is en waarvoor het nodig is.

  • Rug
  • Vooruit
  • Telemetrie in Windows 10. Schakel het uit, schakel het niet uit, u krijgt nog steeds de beste oplossing
  • Gaan. De computer wist de kampioen van de drievoudig Europees kampioen te verslaan in het spel Go
  • Nieuwe "geschenken" van Microsoft - "stabiliteit" en "privacy"

    Het wereldberoemde bedrijf heeft ons opnieuw blij gemaakt met het nieuws: na de release van de volgende patch werkt de ingebouwde coderingstool Bitlocker niet meer en kan Microsoft niet...

FTP (File Transfer Protocol) is een standaardprotocol dat is ontworpen voor de overdracht van bestanden via TCP-netwerken (bijvoorbeeld internet). FTP wordt vaak gebruikt om webpagina's en andere documenten van een particulier ontwikkelapparaat naar openbare hostingservers te downloaden.

Het protocol is gebouwd op een client-server-architectuur en gebruikt verschillende netwerkverbindingen om opdrachten en gegevens tussen de client en de server over te dragen. FTP-gebruikers kunnen zich authenticeren door een gebruikersnaam en wachtwoord in leesbare tekst door te geven, of, als de server dit toestaat, kunnen ze anoniem verbinding maken. U kunt het SSH-protocol gebruiken voor veilige overdrachten waarbij de gebruikersnaam en het wachtwoord worden verborgen (gecodeerd) en ook de inhoud wordt gecodeerd.

Een nogal opvallend kenmerk van het FTP-protocol is dat het gebruik maakt van meerdere (minstens dubbele) verbindingen. In dit geval is één kanaal het besturingskanaal, waardoor opdrachten naar de server worden verzonden en de antwoorden worden geretourneerd (meestal via TCP-poort 21), en via de rest vindt de daadwerkelijke gegevensoverdracht plaats, één kanaal voor elke verzending. Daarom kunt u binnen één sessie via het FTP-protocol meerdere bestanden tegelijkertijd en in beide richtingen overbrengen. Voor elk datakanaal wordt een eigen TCP-poort geopend, waarvan het aantal afhankelijk van de transmissiemodus door de server of de client wordt geselecteerd.

Het FTP-protocol heeft een binaire overdrachtsmodus, waardoor de verkeersoverhead wordt verminderd en de communicatietijd wordt verkort bij het overbrengen van grote bestanden. Het HTTP-protocol vereist noodzakelijkerwijs het coderen van binaire informatie in tekstvorm, bijvoorbeeld met behulp van het Base64-algoritme.

Bij het starten van het werk via het FTP-protocol komt de client in een sessie terecht en worden alle bewerkingen uitgevoerd binnen het kader van deze sessie (met andere woorden, de server onthoudt de huidige status). Het HTTP-protocol "onthoudt" niets - het is de taak om gegevens te geven en deze te vergeten, dus het onthouden van de status bij het gebruik van HTTP wordt uitgevoerd door methoden buiten het protocol.

FTP werkt op de applicatielaag van het OSI-model en wordt gebruikt om bestanden over te dragen via TCP/IP. Hiervoor moet een FTP-server actief zijn en wachten op binnenkomende verzoeken. De clientcomputer kan via poort 21 contact opnemen met de server. Deze verbinding (controlestroom) blijft open gedurende de duur van de sessie. De tweede verbinding (datastroom) kan worden geopend door de server vanaf poort 20 naar de poort van de corresponderende client (actieve modus), of door de client vanaf elke poort naar de poort van de corresponderende server (passieve modus), wat nodig om het gegevensbestand over te dragen. Controlestroom wordt gebruikt om de sessie te besturen, bijvoorbeeld de uitwisseling van opdrachten en wachtwoorden tussen de client en de server met behulp van een telnet-achtig protocol. Met "RETR bestandsnaam" wordt bijvoorbeeld het opgegeven bestand van de server naar de client overgedragen. Vanwege deze structuur met twee poorten wordt FTP beschouwd als een out-of-band protocol, in tegenstelling tot in-band HTTP.

Verbinding en gegevensoverdracht

Het protocol is gedefinieerd in RFC 959. De server reageert op de besturingsstroom met ASCII-statuscodes van drie tekens met een optioneel tekstbericht. "200" (of "200 OK") betekent bijvoorbeeld dat de laatste opdracht met succes is uitgevoerd. De cijfers vertegenwoordigen de antwoordcode en de tekst vertegenwoordigt de verduidelijking of het verzoek. De huidige transmissie op de datastroom kan worden onderbroken door een interruptbericht dat via de besturingsstroom wordt verzonden.

FTP kan in actieve of passieve modus werken, waarvan de keuze bepaalt hoe de verbinding tot stand wordt gebracht. In de actieve modus creëert de client een TCP-controleverbinding met de server en verzendt zijn IP-adres en een willekeurig clientpoortnummer naar de server, en wacht vervolgens totdat de server een TCP-verbinding start met dit adres en poortnummer. Als de client zich achter een firewall bevindt en een inkomende TCP-verbinding niet kan accepteren, kan de passieve modus worden gebruikt. In deze modus gebruikt de client de controlestroom om een ​​PASV-opdracht naar de server te sturen en ontvangt vervolgens zijn IP-adres en poortnummer van de server, die vervolgens door de client wordt gebruikt om een ​​gegevensstroom van een willekeurige clientpoort naar de server te openen. ontvangen adres en poort. Beide modi zijn in september 1998 bijgewerkt om IPv6 te ondersteunen. Op dat moment zijn er verdere wijzigingen aangebracht in de passieve modus, waarbij deze is geüpgraded naar de verbeterde passieve modus.

Bij het verzenden van gegevens via een netwerk kunnen vier gegevensrepresentaties worden gebruikt:

    ASCII - gebruikt voor tekst. De gegevens worden, indien nodig, vóór verzending geconverteerd van de karakterrepresentatie op de zendende host naar "acht-bits ASCII", en (opnieuw, indien nodig) naar de karakterrepresentatie op de ontvangende host. Als gevolg hiervan is deze modus niet geschikt voor bestanden die meer dan alleen platte tekst bevatten.

    Afbeeldingsmodus (gewoonlijk binair genoemd) - het verzendende apparaat verzendt elk bestand byte voor byte, en de ontvanger slaat de bytestream op bij ontvangst.

    Ondersteuning voor deze modus wordt aanbevolen voor alle FTP-implementaties.

    EBCDIC - gebruikt om platte tekst tussen hosts over te dragen in EBCDIC-codering.

Voor het overige is deze modus vergelijkbaar met de ASCII-modus.

Lokale modus - maakt het mogelijk dat twee computers met identieke instellingen gegevens in hun eigen formaat verzenden zonder conversie naar ASCII.

    Voor tekstbestanden zijn er verschillende beheerformaten en instellingen voor de recordstructuur beschikbaar. Deze functies zijn ontworpen om te werken met bestanden die Telnet- of ASA-opmaak bevatten.

    Gegevensoverdracht kan in drie modi worden uitgevoerd:

    Streammodus - gegevens worden verzonden als een continue stroom, waardoor FTP geen enkele verwerking hoeft uit te voeren. In plaats daarvan wordt alle verwerking gedaan door TCP.

De indicator voor het einde van het bestand is niet nodig, behalve voor het scheiden van gegevens in records.

Blokmodus - FTP verdeelt de gegevens in verschillende blokken (headerblok, aantal bytes, gegevensveld) en verzendt deze vervolgens naar TCP.

Compressiemodus - gegevens worden gecomprimeerd met behulp van een enkel algoritme (meestal door het coderen van serielengtes).Authenticatie

FTP-authenticatie gebruikt het gebruikelijke gebruikersnaam/wachtwoord-schema om toegang te verlenen. De gebruikersnaam wordt met het USER-commando naar de server verzonden en het wachtwoord wordt met het PASS-commando verzonden. Als de door de client verstrekte informatie door de server wordt geaccepteerd, stuurt de server een uitnodiging naar de client en begint de sessie. Gebruikers kunnen, als de server deze functie ondersteunt, inloggen zonder inloggegevens op te geven, maar de server kan voor dergelijke sessies slechts beperkte toegang verlenen.

Anoniem- FTP

Speciaal om het FTP-protocol door firewalls te laten werken, is er een NAT-extensie genaamd NAT-PT (rfc2766) gemaakt, waarmee inkomende verbindingen via NAT van de server naar de client kunnen worden vertaald. Tijdens een dergelijke verbinding vervangt NAT de verzonden gegevens van de client, waarbij aan de server het echte adres en de poort wordt aangegeven waarmee de server verbinding kan maken, en zendt vervolgens de verbinding van de server vanaf dit adres naar de client naar zijn adres. Ondanks alle maatregelen en innovaties die zijn genomen om het FTP-protocol te ondersteunen, wordt in de praktijk de NAT-PT-functie meestal in alle routers en routers uitgeschakeld om extra beveiliging tegen virusbedreigingen te bieden.

Anoniemen het omzeilen van firewalls

FTP verzendt doorgaans gegevens wanneer er een verbinding is tussen de server en de client, nadat de client het PORT-commando heeft verzonden. Dit creëert een probleem voor zowel NAT als firewalls, die geen verbindingen van internet met interne hosts toestaan. Voor NAT is een bijkomend probleem dat de weergave van IP-adressen en poortnummers in het PORT-commando verwijst naar het IP-adres en de poort van de interne host, in plaats van naar het openbare IP-adres en de poort van de NAT. Er zijn twee benaderingen voor dit probleem. De eerste is dat de FTP-client en FTP-server de PASV-opdracht gebruiken, die een gegevensverbinding tot stand brengt tussen de client en de server. De tweede benadering is om de PORT-opdrachtwaarden voor NAT te wijzigen met behulp van de gateway op de applicatielaag.

Ondersteuning voor webbrowsers

De meeste reguliere webbrowsers kunnen bestanden ophalen die zich op FTP-servers bevinden, hoewel deze mogelijk geen protocolextensies zoals FTPS ondersteunen. Wanneer er een FTP-adres wordt opgegeven in plaats van een HTTP-adres, wordt de beschikbare inhoud op de externe server op dezelfde manier gepresenteerd als andere webinhoud. Een volledig functionele FTP-client kan in Firefox worden uitgevoerd als een FireFTP-extensie.

Veiligheid

FTP is niet ontworpen als een veilig protocol (vooral niet volgens de huidige normen) en kent talloze beveiligingsproblemen. In mei 1999 vatten de auteurs van RFC 2577 de kwetsbaarheden samen in de volgende lijst met problemen:

    Verborgen aanvallen (bounce-aanvallen)

    Spoof-aanvallen

    Brute force-aanvallen

    Pakket vastleggen, snuiven

    Gebruikersnaambescherming

    Haven stelen

FTP kan zijn verkeer niet coderen, alle transmissies zijn cleartext, dus gebruikersnamen, wachtwoorden, opdrachten en gegevens kunnen worden gelezen door iedereen die het pakket via het netwerk kan onderscheppen. Dit probleem is typerend voor veel internetprotocolspecificaties (waaronder SMTP, Telnet, POP, IMAP) die zijn ontwikkeld vóór de introductie van coderingsmechanismen zoals TLS en SSL. De gebruikelijke oplossing voor dit probleem is het gebruik van "veilige", TLS-beveiligde versies van de kwetsbare protocollen (FTPS voor FTP, TelnetS voor Telnet, etc.) of een ander, veiliger protocol, zoals SFTP/SCP, voorzien van de meeste Secure Shell-protocolimplementaties.

VeiligAuthenticatie

Er zijn verschillende methoden voor veilige bestandsoverdracht, die soms "Veilige FTP" worden genoemd: FTPS, SFPS, FTP via SSH.

Expliciete FTPS is een uitbreiding op de FTP-standaard waarmee clients kunnen eisen dat de FTP-sessie wordt gecodeerd. Dit wordt geïmplementeerd door het verzenden van de opdracht "AUTH TLS". De server heeft de mogelijkheid om verbindingen die geen TLS aanvragen toe te staan ​​of te weigeren. Deze protocoluitbreiding is gedefinieerd in RFC 4217. Impliciete FTPS is een oudere standaard voor FTP waarvoor het gebruik van een SSL- of TLS-verbinding vereist is. Deze standaard zou andere poorten gebruiken dan normale FTP.

SFTP, of "SSH File Transfer Protocol", is niet gerelateerd aan FTP, behalve dat het ook bestanden overdraagt ​​en een vergelijkbare reeks opdrachten voor gebruikers heeft. SFTP, of Secure FTP, is een programma dat SSH (Secure Shell) gebruikt om bestanden over te dragen. In tegenstelling tot standaard FTP worden zowel opdrachten als gegevens gecodeerd, waardoor wordt voorkomen dat wachtwoorden en gevoelige informatie openlijk via het netwerk worden verzonden. SFTP is qua functionaliteit vergelijkbaar met FTP, maar omdat het een ander protocol gebruikt, kunnen standaard FTP-clients niet communiceren met de SFTP-server en omgekeerd.

AuthenticatiedoorSSH(NietSFTP)

FTP over SSH (niet SFTP) verwijst naar het tunnelen van een reguliere FTP-sessie via een SSH-verbinding. Omdat FTP meerdere TCP-verbindingen gebruikt, is tunneling via SSH bijzonder moeilijk. Wanneer veel SSH-clients proberen een tunnel tot stand te brengen voor het controlekanaal (de oorspronkelijke client-serververbinding op poort 21), wordt alleen dit kanaal beschermd; bij het overbrengen van gegevens zal de FTP-software aan beide uiteinden nieuwe TCP-verbindingen (datakanalen) tot stand brengen die de SSH-verbinding zullen omzeilen en daardoor de integriteit verliezen.

Anders moet de SSH-clientsoftware enige kennis van FTP hebben om FTP-controlestroomberichten te monitoren en te herschrijven en autonoom nieuwe omleidingen voor de FTP-gegevensstroom te openen.

FTP via SSH wordt ook wel beveiligde FTP genoemd; maar het moet niet worden verward met andere methoden zoals SSL/TLS (FTPS). Andere methoden voor bestandsoverdracht die gebruik maken van SSH en die geen verband houden met FTP zijn SFTP en SCP; in elk van hen worden zowel de inloggegevens als de bestandsgegevens altijd beschermd door het SSH-protocol.

FXP (File eXchange Protocol) is een manier om bestanden rechtstreeks tussen twee FTP-servers over te dragen zonder ze naar uw computer te downloaden. In een FXP-sessie opent de client twee FTP-verbindingen met twee verschillende servers, waarbij hij een bestand op de eerste server opvraagt, waarbij hij het IP-adres van de tweede server opgeeft in de PORT-opdracht.

Een onbetwist voordeel van het ondersteunen van de FXP-standaard is dat eindgebruikers die bestanden van de ene FTP-server naar de andere willen kopiëren, niet langer onderworpen zijn aan de bandbreedtebeperkingen van hun eigen internetverbinding. Het is niet nodig om zelf een bestand te downloaden en het vervolgens naar een andere FTP-server te uploaden. De tijd voor bestandsoverdracht zal dus alleen afhangen van de verbindingssnelheid tussen twee externe FTP-servers, die in de meeste gevallen uiteraard hoger is dan die van de “gebruiker”.

FXP werd door aanvallers gebruikt om andere servers aan te vallen: het PORT-commando specificeert het IP-adres en de poort van de aangevallen service op de computer van het slachtoffer, en de RETR/STOR-commando's hebben toegang tot deze poort namens de FTP-server, en niet de aanvallende server. machine, die het mogelijk maakte om grootschalige DDoS-aanvallen uit te voeren met behulp van veel FTP-servers tegelijk, of om het beveiligingssysteem van de computer van het slachtoffer te omzeilen als deze alleen afhankelijk is van client-IP-verificatie en de FTP-server die voor de aanval wordt gebruikt zich op een vertrouwd netwerk of gateway. Als gevolg hiervan controleren bijna alle servers nu of het IP-adres dat is opgegeven in de PORT-opdracht overeenkomt met het IP-adres van de FTP-client en verbieden ze daar standaard het gebruik van IP-adressen van derden. Daarom is het gebruik van FXP niet mogelijk als u met openbare FTP-servers werkt.

Basiscommando's

    ABOR - Bestandsoverdracht afbreken

    CDUP - Wijzig de map naar een hogere map.

    CWD - Wijzig map.

    DELE - Verwijder een bestand (DELE-bestandsnaam).

    EPSV - Ga naar de uitgebreide passieve modus.

    Gebruikt in plaats van PASV.

    LIST - Retourneert een lijst met bestanden in een map.

    De lijst wordt via een dataverbinding verzonden.

    MDTM - Geeft de wijzigingstijd van het bestand terug.

    MKD - Maak een map.

    NLST - Retourneert een lijst met bestanden in een map in een korter formaat dan LIST.

    De lijst wordt via een dataverbinding verzonden.

    NOOP - Lege operatie

    PASV - Ga naar de passieve modus. De server retourneert het adres en de poort waarmee u verbinding moet maken om de gegevens te verzamelen. De overdracht begint wanneer de volgende opdrachten worden ingevoerd: RETR, LIST, enz.

    POORT - Activeer de actieve modus. Bijvoorbeeld POORT 12,34,45,56,78,89. In tegenstelling tot de passieve modus maakt de server zelf verbinding met de client om gegevens over te dragen.

    PWD - Geeft de huidige map terug.

    AFSLUITEN - Verbinding verbreken

    REIN - Herinitialiseer de verbinding

    RETR - Bestand downloaden. RETR moet worden voorafgegaan door een PASV- of PORT-commando.

    RMD - Verwijder map

    RNFR en RNTO - Hernoem het bestand. RNFR - wat te hernoemen, RNTO - wat te hernoemen.

    SIZE - Geeft de bestandsgrootte terug

    STOR - Bestand uploaden. STOR moet worden voorafgegaan door een PASV- of PORT-commando.

    SYST - Geeft het systeemtype terug (UNIX, WIN, ...)

TYPE - Stel het type bestandsoverdracht in (binair, tekst)

GEBRUIKER - Gebruikersnaam om in te loggen op de server

Het FTP-protocol wordt al heel lang gebruikt en is op het eerste gezicht uiterst eenvoudig. Deze eenvoud is echter duidelijk en velen beginnen problemen te ondervinden bij het tot stand brengen van een FTP-verbinding, vooral wanneer de server of client zich achter een firewall of NAT bevindt. Daarom zullen we het vandaag hebben over de kenmerken van het FTP-protocol in verschillende modi.

Het FTP-protocol is het oudste netwerkprotocol (opgericht in 1971), maar wordt nog steeds veel gebruikt. Een belangrijk kenmerk van het protocol is dat het meerdere verbindingen gebruikt: één voor besturingsopdrachten, de rest voor data. Bovendien kunnen er meerdere verbindingen voor gegevensoverdracht worden geopend, waarbij bestanden in beide richtingen kunnen worden overgedragen. Met deze functie zijn een aantal problemen verbonden.

Afhankelijk van de methode voor het tot stand brengen van een verbinding voor gegevensoverdracht, worden actieve en passieve FTP-bedrijfsmodi onderscheiden. In de actieve modus brengt de server zelf een dataverbinding met de client tot stand, in de passieve modus omgekeerd. Laten we deze modi in meer detail bekijken.

Nog een belangrijk punt: als u poorten voor meerdere FTP-servers doorstuurt, moet u op elk daarvan een eigen reeks dynamische poorten opgeven en doorsturen naar dezelfde poortnummers van de externe interface. Waarom? Omdat het poortnummer door de server wordt verzonden in het besturingscommando en niets weet over het doorsturen, zal de client, als het door de server verzonden poortnummer niet overeenkomt met het poortnummer op de externe interface, geen verbinding tot stand kunnen brengen. verbinding. Terwijl de controlepoort en de actieve moduspoort kunnen worden doorgestuurd naar externe poorten.

We hopen dat dit artikel u zal helpen het mechanisme van het FTP-protocol beter te begrijpen en het configuratie- en diagnoseproces bewust te benaderen.