FTP server na Windows I.

Dnes jsem po docela dlouhé době musel zprovozňovat FTPS server na Windows. A jelikož to bylo vskutku po dlouhé době, divil jsem se, co člověk v hlavě neudrží. Toto je soupis základních termínů.

FTP server používá dva základní porty:
- hlavní port (obvykle TCP/21) pro příkazy (USER, PASS, CWD atd.)
- datový port (hlavní port – 1, obvykle tedy TCP/20) pro přenos dat (výpis adresářů, upload/download dat)

V FTP komunikaci mohou být použity dva módy:
- aktivní, někde zvaný normální, FTP příkaz PORT
- pasívní, FTP příkaz PASV

Když se použije PASV (pasivní mód), klient se zeptá serveru, zdali bude muset (klient) iniciovat datové připojení:

Client > PASV
Server > 227 Entering Passive Mode (194,228,168,184,249,155)

FTP klient se bude muset připojit k FTP serveru s IP adresou 194.228.168.184 na port 249*256 + 155 = 63899. Tento příklad zároveň vysvětluje, proč se při konfiguraci pasívního módu na FTP serveru umístěném za firewallem volí rozsah portů, které bude FTP server aktivně klientům nabízet. Tento rozsah musí být na firewallu povolen pro inbound spojení. Pokud je FTP server navíc umístěn za NATem, musí se v konfiguraci FTP služby nastavit skutečná veřejná IP adresa. Pokud by se veřejně dostupná IP adresa nenastavila, FTP server by poslal svoji překládanou (NATem) interní adresu.

Pokud se použije PORT (aktivní/normální mód), tak klient specifikuje IP adresu a port, na kterou se FTP server musí připojit a iniciovat tak datové spojení:

Client > PORT 192,168,0,10,5,114
Server > 200 PORT command successful.

V tomto případě se FTP server připojí z datového portu (standardně z TCP/20) k FTP klientovi na IP adrese 192.168.0.10 na portu 5*256 + 114 = 1394. Výhodou aktivního módu je, že se na FTP serveru nemusí kromě TCP/21 povolit žádný příchozí provoz. Na druhou stranu zároveň příklad demonstruje, že server může mít problém s připojením ke klientovi, pokud se k němu dostane interní IP adresa.

V dnešní době je čím dál běžnější, že domácí počítače jsou umístěny v privátní síti a přístup do Internetu zprostředkovává nějaké SOHO zařízení, ať už ADSL router, router kabelovky, wifi router atd. Pokud je toto zařízení “hloupější”, nezmodifikuje výše uvedený PORT příkaz, v němž by měl nahradit interní IP adresu za svoji externí (a zapamatovat si překladovou tabulku), ale pošle obsah s interní IP adresou klidně dál. A rázem je aktivní FTP mód nefunkční.

Dalším problémem aktivních přenosů je fakt, že vybavení perzonálním firewallem začíná být životní nutností – ovšem v případě aktivního přenosu na uživatele vyskočí upozornění, že se něco snaží připojit k počítači a nechť rozhodne, zdali ano či ne. To je druhý zádrhel. A konečně třetím problémem může být použití FTPS, ale o tom až později.

Takže ještě jednou rekapitulace:
PASV = klient se připojuje k serveru pro datový přenos
PORT = server se připojuje ke klientu pro datový přenos