/home/network

Senast ändrad: January 5, 2008

Varför strular FTP?

Problematik

Du försöker koppla dig till en ftp-server men det misslyckas. Du lyckas logga in men du kan inte lista filer eller föra över filer.

Historia

FTP är ett protokoll som går ovanpå TCP/IP. När FTP-protokollet skapades fanns det inte så många datorer på internet, och IP-addresser fanns det gått om. Först på 90-talet kom man fram till att IP-addressområdet inte skulle räcka och 2 lösningar blev aktualiserade: NAT och IPv6. IPv6 är ett nytt protokoll som fortfarande inte är i bruk. IPv6 innebär tusentals IP-addresser per kvadratmeter över hela jorden, vilket borde räcka ett tag. Dock är det ett dyrt och stort projekt att gå över till IPv6 så för att lösa de mest akuta problemen så skapades en funktion som kallas NAT. NAT eller Network Address Translation som NAT står för är billigt att implementera i existerande nätverk. Tanken är att ett företag endast behöver några få IP-addresser som syns på internet, övriga addresser kan användas på mängder av ställen samtidigt. På så vis kan man återanvända IP-addresser. Dock så är det många protokoll inklusive FTP som inte stödjer NAT och jag tänkte försöka förklara varför nedan.

Teknisk förklaring

FTP använder sig i grunden av TELNET-protokollet, men har lagt till nya kommandon och en kanal för datatrafik. En bra idé för att bättre skaffa sig en bild om hur det funkar är att köra en nätverkslyssnare samtidigt som man kör en FTP-session. En bra sådan är ethereal där man tydligt kan se exakt vad som sker.

FTP i klartext. Alla rader med siffor kommer från servern. Siffrorna är olika kommandon. Dom utan är från klienten.

220-Some FTP-server
220 FTP Deamon: Connection detected
USER username
331 Password required for 69link.
PASS password
230-Hello 69link, welcome to 69link.net
230 User 69link logged in.
PORT 192,168,0,100,12,64
200 PORT command successful.
NLST
150 Opening ASCII mode data connection for file list.
226 Transfer complete.
PORT 192,168,0,100,12,65
200 PORT command successful.
RETR tuxperience.jpg
150 Opening ASCII mode data connection for tuxperience.jpg (375374 bytes).
226 Transfer complete.
QUIT
221 Goodbye.

Kommandot PORT 192,168,0,100,12,65 betyder att klienten vill att server kopplar sig till klienten på port 3137.
12,65 betyder (12*256)+65.

FTP kan köras i 2 lägen, PORT och PASV (olika applikationer kallar detta för olika) och jag beskriver dessa nedan.

PASV

PASV - Passive mode (passiv FTP)
Servern lyssnar på port 21. När en dataöverföring skall ske så öppnar servern en ny port mellan 1024-65535 som klienten kopplar sig till.

Problem med PASV
Om ftpservern sitter bakom en NAT/Firewall som inte förstår FTP-protokollet så blir det ofta problem. Servern lyssnar på PORT 21 (vilken forwardas till i NAT'en eller är öppen i Firewallen). Men eftersom servern skapar en random PORT så förstår inte NAT-routern/Firewallen det och kan inte hantera klientens uppkopplingsförsök mot serverns random PORT.

PASV är normalt ett säkrare läge för klienten eftersom klientdatorn slipper öppna en port för dataöverföring.

Kommandon: Klient 1024-65536 -> Server 21
Data:                Klient 1024-65536 -> Server 1024-65536

PORT

PORT - Port mode (aktiv FTP)
Servern lyssnar på port 21. När en dataöverföring skall ske så talar klienten om för servern att den har öppnat en port mellan 1024-65535 som servern kopplar sig till från port 20.

2 vanliga problem med PORT.
1. Eftersom klienten öppnar en random port så gäller det att klientens Firewall förstår FTP-protokollet och kan läsa att den nya random porten är OK. Ibland så är FTP-serverns PORT något annant än 21, då kan Firewallen hos klienten missa att läsa FTP-protokollet eftersom den räknar med att man kör FTP mot PORT 21. Effekten blir att listningar och överföringar inte fungerar

2. Om du sitter bakom en router som NAT'ar och inte förstår FTP-protokollet (i princip alla vanliga hemmaroutrar) så blir det samma effekt som ovan. Klientdatorn har öppnat en random PORT för dataöverföring, men routern vet inte om detta och kan inte vidarebefodra datatrafiken från servern.

Kommandon: Klient 1024-65536 -> Server 21
Data:                Klient 1024-65536 <- Server 20

Lösningar

Dessa lösningar sänker säkerheten en aning och är inte 100% problemfria eftersom ett annat program än FTP-applikationen kan använda sig av portar mellan 1024-65535.

PASV: Vissa FTP-servrar kan specificera vilka random portar som ska användas. Dessa kan man då forwarda i NAT-routern mot servern, eller öppna i firewallen.

PORT: Vissa FTP-klienter kan specificera vilka random portar som ska användas. Dessa kan man då forwarda i NAT-routern mot klienten, eller öppna i firewallen.

Tips för Linux

Tips för BulletProof FTP

Länkar

http://cr.yp.to/ftp/security.html
http://slacksite.com/other/ftp.html

Kommentera gärna på kommentar@69link.net