Voer een zoektekst in:
Op het web Op Aesir.nl

INFORMATIE

Home

Download
   FloppyT (Mirrored)
   FloppyT modules (Mirrored)
   Overige Downloads

Documentatie
   FloppyT HOWTO
   RAID Gids
   Active vs Passive FTP
   SCSI Technieken
   Wireless Networking beveiliging

Artikelen
   Linux mythen en fabels
   Netwerkbeveiliging met FloppyT
   Review FloppyT 0.9

Vaste prik
   Dagboek van een Geek
   Geekworld

Resources
   FloppyT Forum
   FloppyT FAQ (Officieel)
   FloppyT FAQ (Onofficieel)
   FloppyT Links
   Links

Bazar
   Software
   Hardware
   Boeken
   Diversen

ACTIVE vs PASSIVE FTP

Active FTP versus Passive FTP

Inhoud:


Introductie

Een van de meest voorkomende vragen bij het werken met firewalls en ander internet connectivity problemen is het verschil tussen Active en Passive FTP en hoe je ze beide of afzonderlijk het best kunt ondersteunen. Hopelijk kan deze uitleg helpen met het ophelderen van de verwarring die er bestaat over het ondersteunen van FTP in een firewalled omgeving.

Dit is waarschijnlijk niet DE definitieve uitleg zoals de titel claimt maar ik heb genoeg positieve feedback gekregen en heb dit document veelvuldig gelinkt gezien om te vermoeden dat het voor veel mensen bruikbaar is. Ik ben echter altijd op zoek om zaken te verbeteren en als je iets hebt gevonden wat niet helder genoeg is of meer uitleg behoeft laat het me dan weten!. Recente toevoegingen zijn de voorbeelden van zowel active als passive command line (prompt) FTP sessies. Deze sessie voorbeelden kunnen een aantal dingen verhelderen. Daarnaast laten ze mooi zien wat er achter de schermen gebeurt bij een FTP sessie. Nou, op naar de info....

De Basis

FTP is een exclusief op TCP gebaseerde service. Er is geen UDP component bij FTP. FTP is een bijzondere service omdat het twee poorten gebruikt tijdens een sessie, een "data" poort en een "command" (ook wel bekend als de"control" ) poort. Traditioneel zijn dit poort 21 voor de command poort en 20 voor de data poort. De verwarring begint echter dat, afhankelijk van de modus, de data poort niet altijd poort 20 is.

Active FTP

In active mode FTP maakt de cliënt kant een verbinding vanaf een willekeurige hoge poort (N>1024) met de FTP server's command poort, poort 21. Dan begint de cliënt te luisteren naar poort N+1 van de FTP server en stuurt het FTP commando "PORT N+1" naar de FTP server. Deze zal op zijn beurt een verbinding leggen naar de door de cliënt aangeven poort vanaf zijn locale data poort 20.

Van het standpunt van de firewall aan de serverkant Bezien moeten voor de active mode de volgende communicatie kanalen ge-opend worden:

  1. naar FTP server poort 21 van overal (Cliënt initieerd de verbinding)
  2. van FTP server poort 21 naar poorten > 1024 (Server reageert op de client's control poort)
  3. van FTP server poort 20 naar poorten > 1024 (Server initieerd de data verbinding naar de cliënt's data poort)
  4. naar FTP server poort 20 vanaf poorten > 1024 (Cliënt stuurt ACKs naar de server's data poort)

Uitgetekend ziet het er als volgt uit:

In stap 1, de cliënt's command poort contacteerd de server's command poort en stuurt het commando "PORT 1027". De server stuurt een ACK terug naar de cliënt's command poort in stap 2. In stap 3 initieert de server een verbinding met zijn lokale data poort naar de data poort die door de cliënt eerder werd opgegeven (1027). Tot slot stuurt de cliënt een ACK terug zoals te zien is in stap 4.

Het grootste probleem met active mode FTP is echter te vinden aan de cliënts kant. De FTP cliënt maakt niet de uiteindelijke connectie naar de data poort op de server. Het vertelt simpelweg aan de server op welke poort hij luistert en de server legt de uiteindelijke verbinding naar de door de cliënt opgegeven poort. Van de kant van de cliënt's firewall ziet het eruit alsof iemand van buitenaf verbinding probeert te maken naar een interne cliënt. Laat dat nu meestal geblokkeerd zijn op de firewall.

Active FTP voorbeeld

Hieronder vind je een voorbeeld van een Active FTP sessie. Het enige wat veranderd is zijn de server namen, IP adressen en gebruikersnamen. In dit voorbeeld wordt eR een FTP sessie ge-initieert vanaf testbox1.slacksite.com (192.168.150.80), een linux systeem wat de standaard FTP command line cliënt gebruikt, naar testbox2.slacksite.com (192.168.150.90), een linux box waarop ProFTPd 1.2.2RC2 draait. De debugging (-d) flag is gebruikt om te laten zien wat eR achter de schermen gebeurd. Alles in rood is de debugging output die laat zien wat de werkelijke commando's zijn die verstuurd worden naar de FTP server en de respons hierop. Normale server output is in zwart, en gebruikers input is bold.

Er zijn een paar interessante dingen aan deze dialoog. Kijk bijvoorbeeld maar eens naar wat er gebeurd wanneer het PORT commando wordt verstuurd, Het specifiseert een poort op het cliënt (192.168.150.80) systeem in plaats van op de server. We zullen het omgekeerde zien wanneer we passive FTP gebruiken. Terwijl we nu toch op dit onderwerp zijn even een kleine opmerking over de format van het PORT commando. Zoals je in het voorbeeld beneden kunt zien is het opgebouwd als een serie van 6 cijfers gescheiden door een komma. De eerste vier octets zijn het IP adres terwijl de laatste twee de poort vormen die gebruikt wordt voor de data connectie. In het voorbeeld hieronder is de poort dus ((14*256) + 178), of 3762. Een snelle controle met netstat kan deze informatie bevestigen.

testbox1: {/home/p-t/slacker/public_html} % ftp -d testbox2

Connected to testbox2.slacksite.com.
220 testbox2.slacksite.com FTP server ready.
Name (testbox2:slacker): slacker
---> USER slacker
331 Password required for slacker.
Password: TmpPass
---> PASS XXXX
230 User slacker logged in.
---> SYST
215 UNIX Type: L8

Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
ftp: setsockopt (ignored): Permission denied
---> PORT 192,168,150,80,14,178
200 PORT command successful.
---> LIST
150 Opening ASCII mode data connection for file list.
drwx------   3 slacker    users         104 Jul 27 01:45 public_html
226 Transfer complete.
ftp> quit

---> QUIT
221 Goodbye.

Passive FTP

Om het probleem op te lossen van een server die de connectie initieert naar de cliënt is er een aandere methode ontwikkeld. Deze is bekend als passive mode, ofwel PASV, naar het commando wat gebruikt word door de cliënt om de server te vertellen dat hij passive mode is.

In passive mode FTP initieert de cliënt de beide connecties naar de server waardoor het probleem van de firewall die de inkomende data poort van de server naar de cliënt blokkeert wordt opgelost. Bij het openen van een FTP connectie opent de cliënt 2 willekeurige hoge lokale poorten (N > 1024 and N+1). De eerste maakt een connectie met de server op poort 21 maar in plaats van een PORT commando te sturen en toestaan dat de server terugverbindt naar zijn data poort stuurt de cliënt een PASV commando. Het resultaat hiervan is dat de server dan een willekeurige hoge lokale poort opent (P > 1024) en het PORT P commando terugstuurd naar de cliënt. De cliënt initieert dan een verbinding van port N+1 naar port P op de server om data te versturen.

Van de serverkant zijn firewall's standpunt bezien om passive mode FTP te ondersteunen zijn de volgende communicatie kanalen geopend:

  1. naar FTP server's poort 21 van overal (Client initieert de verbinding)
  2. van FTP server's poort 21 naar poorten > 1024 (Server reageert op de cliënt's control poort)
  3. naar FTP server's poorten > 1024 van overal (Cliënt initieert de data connectie naar een willekeurige poort als gespecificeert door de server)
  4. van FTP server's poorten > 1024 naar poorten > 1024 (Server zend ACKs (en data) naar de cliënt's data poort)

Als dit wordt uitgetekent ziet een passive mode FTP connectie er als volgt uit:

In stap 1, maakt de cliënt contact met de server op de command port en verstuurt het PASV commando. De server antwoord in stap 2 met "PORT 2024" waarmee hij de cliënt vertelt welke poort hij gebruikt om te luisteren naar een data connectie. In stap 3 initieert de cliënt de data connectie vanaf zijn data port naar de opgegeven server data port. Als laatste stuurt de server een ACK in stap 4 naar de cliënt's data poort.

Terwijl passive mode FTP een groot deel van de problemen oplost aan de zijde van cliënt opent het een hele reeks van problemen aan de kant van de server. Het belangrijkste probleem is de noodzaak om verbindingen toe te staan op hoge poorten aan de kant van de server. Gelukkig stellen de meest FTP Deamons, inclusief de populaire WU-FTPD de administrator in staat om een reeks van poorten te specificeren die server kan gebruiken. Zie Appendix 1 voor meer informatie.

Het tweede probleem houdt in, het ondersteunen en troubleshooten van cliënts die geen passive mode ondersteunen. Een voorbeeld is de command line FTP utility die bij Sun's Solaris besturingssyteem is meegeleverd waardoor het noodzakelijk is om third-arty FTP cliënts, als ncftp te installeren.

Door de enorme populariteit van het World Wide Web, gebruiken veel mensen hun webbrowser als FTP cliënt. De meeste browsers ondersteunen passive mode alleen wanneer zij ftp:// URLs gebruiken. Afhankelijk van de instellingen van de firewall en de server kan dit zowel goud als slecht uitpakken.

Passive FTP voorbeeld

Hieronder vind je een voorbeeld van een Passive FTP sessie. Het enige wat veranderd is zijn de server namen, IP adressen en gebruikersnamen. In dit voorbeeld wordt er een FTP sessie ge-initieert vanaf testbox1.slacksite.com (192.168.150.80), een linux systeem wat de standaard FTP command line cliënt gebruikt, naar testbox2.slacksite.com (192.168.150.90), een linux box waarop ProFTPd 1.2.2RC2 draait. De debugging (-d) flag is gebruikt om te laten zien wat er achter de schermen gebeurd. Alles in rood is de debugging output die laat zien wat de werkelijke commando's zijn die verstuurd worden naar de FTP server en de respons hierop. Normale server output is in zwart, en gebruikers input is bold.

Let op het verschil in het PORT commando in dit voorbeeld ten opzichte van dat in het active FTP voorbeeld. Hier zien we een poort die geopend wordt op de server (192.168.150.90) in plaats van op de cliënt. Zie ook de discussie over het format van het PORT commando hierboven in de Active FTP Example sectie.

testbox1: {/home/p-t/slacker/public_html} % ftp -d testbox2
Connected to testbox2.slacksite.com.
220 testbox2.slacksite.com FTP server ready.
Name (testbox2:slacker): slacker
---> USER slacker
331 Password required for slacker.
Password: TmpPass
---> PASS XXXX

230 User slacker logged in.
---> SYST
215 UNIX Type: L8
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> passive
Passive mode on.
ftp> ls
ftp: setsockopt (ignored): Permission denied
---> PASV

227 Entering Passive Mode (192,168,150,90,195,149).
---> LIST
150 Opening ASCII mode data connection for file list
drwx------   3 slacker    users         104 Jul 27 01:45 public_html
226 Transfer complete.
ftp> quit
---> QUIT
221 Goodbye.

Samenvatting

De volgende tabel moet administators helpen hoe beide FTP modes werken:

 Active FTP :
     command : client >1024 -> server 21
     data    : client >1024 <- server 20

 Passive FTP :
     command : client >1024 -> server 21
     data    : client >1024 -> server >1024

Een snelle samenvatting van de voor- en nadelen van active versus passive FTP is ook wel makkelijk:

Active FTP is gemakkelijk voor de FTP server admin, maar moeilijk voor de cliënt's kant admin. De FTP server doet een poging om een willekeurige hoge poort te contacteren aan de kant van de cliënt, welke vrijwel zeker is geblokkeerd door de firewall aan de kant van de cliënt. Is dit niet zo dan is de firewall niet goed geconfigureerd.

Passive FTP is gemakkelijk aan de kant van de cliënt, maar lastig voor de FTP server admin. De cliënt zal beide connecties met de server opbouwen maar 1 daarvan met een willekeurige hoge poort die naar alle waarschijnlijkeid op de firewall van de server's kant geblokkeerd zal zijn.

Gelukkig is er een compromis. Omdat admins die een FTP server hebben draaien dat naar alle waarschijnlijkheid doen voor meerdere cliënts zullen ze vrijwel altijd passive FTP moeten ondersteunen. De openheid van hoge porten op de server kan geminimaliseerd worden door een range te specificeren die de FTP server kan en mag gebruiken. Dus alles behalve deze poorten kunnen geblokkeerd worden door de firewall. Ondanks dat ze niet het gevaar wegneemt aan de server kant kan deze oplossing het risico behoorlijk minimaliseren. Zie Appendix 1 voor meer informatie.


Referenties

Een uitstekende referentie over hoe de verschillende internet protocollen werken en de zaken die gemoeid zijn met het firewallen van deze protocollen kan gevonden worden in het O'Reilly and Associates boek, Building Internet Firewalls, 2nd Ed, van Brent Chapman en Elizabeth Zwicky.

Als laatste, de definitieve referentie over FTP is RFC 959, welke de officiele specificaties van het FTP protocol vermeld. RFC's kunnen gedonwload worden van verschillende plaatsen. Onder andere van ftp://nic.merit.edu/documents/rfc/rfc0959.txt. Andere sites zijn te vinden via Google.


Vertaald uit het engels. Origineel (in het engels) is geschreven door Jay Ribak en is te vinden op zijn site: http://www.slacksite.com
© 2003 Walther Ligtvoet. Powered by Linux, Apache, Perl and MySQL.