1. Dwa połączenia w FTP
Protokół Transferu Plików (FTP) rozdziela wymianę poleceń od przesyłania danych. To rozróżnienie wyjaśnia różnicę między trybem aktywnym a pasywnym. W typowej sesji FTP między klientem a serwerem występują dwa rodzaje połączeń:
- Połączenie sterujące: Jest ustanawiane, gdy klient FTP łączy się z serwerem, zwykle na jego porcie . Zwykle pozostaje otwarte przez sesję. Służy do przesyłania poleceń klienta, takich jak USER, PASS, LIST i RETR, oraz do odbierania odpowiedzi. Odpowiedzi sterujące mogą informować o rozpoczęciu transferu kodem 150 oraz o jego zakończeniu kodem 226. Dane plików i listy katalogów są przesyłane osobnym kanałem. Sesję można zakończyć poleceniem QUIT, lecz połączenie może też zostać zamknięte po błędzie lub przekroczeniu limitu czasu. Port 21 jest domyślnym portem usługi, a konfiguracja może wskazać inny.
- Połączenie danych: Jest tworzone na żądanie do przesyłania zawartości plików podczas wysyłania lub pobierania oraz list katalogów. Po zakończeniu transferu jest zamykane, dlatego kolejny transfer wymaga nowego połączenia danych. Połączenie może przenosić strumień binarny albo tekstowy, zgodnie z trybem transmisji uzgodnionym przez klienta i serwer.
Tryb aktywny i pasywny różnią się sposobem ustanawiania tego drugiego, tymczasowego połączenia danych. W trybie aktywnym inicjuje je serwer, a w pasywnym klient. Połączenie sterujące pozostaje otwarte i przenosi polecenia oraz odpowiedzi związane z transferem. Różnica wpływa na działanie zapór sieciowych i translacji adresów sieciowych (NAT). Serwer musi udostępnić skonfigurowany zakres portów pasywnych, a klient może użyć PASV, gdy EPSV nie jest obsługiwane.
2. Aktywny tryb FTP
Aktywny tryb FTP opisano we wczesnych standardach FTP. W tym modelu serwer inicjuje połączenie danych do klienta. W klasycznej konfiguracji serwer używa źródłowego portu , natomiast klient wskazuje port nasłuchu poleceniem PORT. W klasycznym formacie IPv4 dwa ostatnie pola PORT kodują port jako p1*256+p2. W odniesieniu do transferu danych jest to model "serwer łączy się z klientem".
Przepływ połączenia w trybie aktywnym
Sekwencja zdarzeń w trybie aktywnym wygląda następująco:
- Komputer klienta otwiera port (oznaczmy go jako , w przykładzie > 1023) i używa go do zainicjowania połączenia sterującego z portem serwera FTP. Sesja rozpoczyna się od uwierzytelnienia i wymiany poleceń.
- Gdy klient potrzebuje przesłać dane, na przykład po wydaniu polecenia LIST lub RETR, wybiera kolejny port, w przykładzie , i zaczyna nasłuchiwać na nim na przychodzące połączenie TCP.
- Klient informuje serwer, na którym porcie nasłuchuje, wysyłając polecenie PORT przez istniejące połączenie sterujące. Polecenie PORT zawiera adres IP klienta i wybrany numer portu, sformatowane jako sześć wartości oddzielonych przecinkami. Dla klienta o adresie IP nasłuchującego na porcie (), polecenie wyglądałoby tak:
PORT 192,168,1,100,20,80 - Serwer odbiera polecenie PORT, potwierdza je, a następnie inicjuje połączenie TCP do wskazanego adresu i portu ( oraz ). W klasycznej konfiguracji używa przy tym portu źródłowego . Wdrożenie może użyć innego portu zgodnie z konfiguracją.
- Po ustanowieniu tego połączenia danych, plik lub lista katalogów jest transferowana. Po zakończeniu transferu serwer zamyka połączenie danych. Połączenie sterujące na porcie pozostaje otwarte, aby klient mógł wydać kolejne polecenie lub zakończyć sesję.
Ograniczenia trybu aktywnego
Połączenie inicjowane przez serwer może być trudniejsze do zestawienia w sieciach z filtracją ruchu lub NAT. Jeśli klient ma publiczny adres i regułę dopuszczającą ruch, tryb aktywny może działać bez tych ograniczeń. Najczęstsze przyczyny problemów to:
- Zapory sieciowe: Reguły zapory mogą blokować przychodzące połączenie serwera do portu klienta (). Wtedy pakiety są odrzucane, a transfer kończy się błędem lub przekroczeniem czasu oczekiwania. Skutek zależy od reguł zapory i sposobu śledzenia połączeń.
- Translacja adresów sieciowych (NAT): Klient może mieć prywatny adres IP, na przykład z zakresu , a serwer otrzyma ten adres w poleceniu PORT. Taki adres nie jest routowalny w publicznym internecie, więc połączenie może nie dotrzeć do klienta. Niektóre urządzenia z funkcją Application Layer Gateway (ALG) analizują FTP i modyfikują adres lub reguły translacji, lecz ich działanie zależy od konfiguracji i implementacji.
Z tych powodów tryb aktywny może wymagać dodatkowej konfiguracji po stronie klienta, serwera lub urządzeń pośrednich.
3. Pasywny tryb FTP (PASV)
Tryb pasywny, oznaczany poleceniem PASV, przenosi inicjowanie połączenia danych z serwera na klienta. Serwer otwiera port nasłuchu i przekazuje go w odpowiedzi 227. Klient inicjuje wtedy połączenie sterujące i połączenie danych, co często ułatwia przejście przez filtrację ruchu po stronie klienta.
Przepływ połączenia w trybie pasywnym
Sekwencja zdarzeń w trybie pasywnym wygląda następująco:
- Komputer klienta otwiera port () i używa go do zainicjowania połączenia sterującego z portem serwera FTP, tak samo jak w trybie aktywnym.
- Gdy klient potrzebuje przesłać dane, zamiast otwierać port do nasłuchiwania, wysyła polecenie PASV do serwera przez połączenie sterujące. To polecenie jest prośbą do serwera o przygotowanie się do połączenia danych.
- Serwer odbiera polecenie PASV, wybiera dostępny port na swojej maszynie (oznaczmy go jako ) i zaczyna na nim nasłuchiwać na połączenie danych. Zakres takich portów jest zwykle ustalany w konfiguracji serwera.
- Serwer odsyła w odpowiedzi na PASV adres i numer portu (). Odpowiedź zaczyna się kodem 227 i zawiera informacje adresowe w formacie zbliżonym do polecenia PORT. Adres może zostać zmieniony przez NAT lub urządzenie pośredniczące. Dla serwera o adresie , który otworzył port (), odpowiedź brzmiałaby:
227 Entering Passive Mode (203,0,113,50,192,5) - Klient odbiera odpowiedź, analizuje adres i numer portu, a następnie inicjuje nowe połączenie TCP z własnego portu, w przykładzie , na adres i port wskazane przez serwer.
- Po ustanowieniu tego połączenia danych, plik lub lista katalogów jest transferowana. Po zakończeniu klient zamyka połączenie danych. Połączenie sterujące pozostaje otwarte i może przenosić odpowiedzi kontrolne.
Konfiguracja i ograniczenia trybu pasywnego
Zmiana strony inicjującej połączenie zmniejsza wpływ części reguł zapór i translacji po stronie klienta, lecz wymaga konfiguracji serwera. Serwer musi ujawnić klientowi osiągalny adres i port oraz zezwolić na połączenia w wybranym zakresie.
- Przechodzenie przez NAT: Klient inicjuje oba połączenia, więc urządzenie NAT może utworzyć mapowania dla ruchu wychodzącego i powrotnego. Działanie zależy od konfiguracji urządzenia oraz od adresu podanego w odpowiedzi PASV.
- Zgodność z firewallem klienta: Oba połączenia są inicjowane przez klienta, więc reguły zezwalające na ruch wychodzący mogą dopuścić transfer. Zapora może jednak nadal filtrować ruch na podstawie adresu, portu lub polityki aplikacji.
- Konfiguracja po stronie serwera: Administrator musi dopuścić połączenia przychodzące na porcie oraz w skonfigurowanym zakresie portów używanych do pasywnych połączeń danych, na przykład -.
Tryb pasywny jest często wybierany w sieciach, w których klient nie przyjmuje nieoczekiwanych połączeń przychodzących. Ostateczny wybór zależy od konfiguracji obu końców i urządzeń pośrednich.
4. Podsumowanie Porównawcze: Tryb Aktywny vs. Pasywny FTP
| Cecha | Tryb Aktywny | Tryb Pasywny |
|---|---|---|
| Kto inicjuje Połączenie Danych? | Serwer | Klient |
| Port Danych Serwera | Zwykle port (źródłowy) | Port wybrany przez serwer, na przykład (docelowy) |
| Problem z Firewallem Klienta | Możliwy. Zapora może zablokować połączenie przychodzące. | Często mniejszy. Klient inicjuje połączenie. |
| Problem z NAT | Możliwy. Adres z PORT może nie być osiągalny. | Zależy od adresu z PASV i konfiguracji NAT. |
| Konfiguracja Firewalla Serwera | Dopuść port i odpowiedni ruch do klienta. | Dopuść port oraz skonfigurowany zakres portów pasywnych. |
| Nowoczesne Zastosowanie | Wymaga akceptacji połączenia przez klienta. | Często lepiej pasuje do filtracji po stronie klienta. |
5. Rozszerzony tryb pasywny (EPSV)
Oryginalne polecenia PORT i PASV przekazują adres oraz port w formacie sześciu pól właściwym dla IPv4. Ten format nie opisuje adresów IPv6. RFC 2428 definiuje rozszerzenia EPRT i EPSV dla IPv6 oraz innych protokołów sieciowych. EPSV ogranicza liczbę informacji adresowych zwracanych przez serwer, co ułatwia obsługę połączenia sterującego i danych.
- Polecenie EPSV: Klient może użyć EPSV zamiast PASV, aby poprosić serwer o przygotowanie portu danych bez przekazywania adresu w formacie IPv4. Rozszerzenie może działać z IPv4 i IPv6, jeśli obsługują je obie strony.
- Odpowiedź na EPSV: Serwer podaje tylko numer portu. Klient łączy się z adresem używanym dla połączenia sterującego, a numer portu jest oddzielony znakami wybranymi w odpowiedzi. Odpowiedź ma kod 229 i nie wymaga od serwera przekazywania adresu IPv4.
Znaki ||| są separatorami, a 49157 to numer portu TCP, z którym klient powinien się połączyć.229 Entering Extended Passive Mode (|||49157|) - Korzyści: Format nie przenosi adresu IPv4 w odpowiedzi i może być używany z IPv4 oraz IPv6. Konkretna kolejność prób zależy od możliwości klienta i serwera. Zachowanie rozszerzenia pozostaje zależne od obsługi po obu stronach. W odpowiedzi EPSV klient nie otrzymuje adresu IPv4 zakodowanego w sześciu polach. Odpowiadające polecenie EPRT rozszerza tryb aktywny, lecz nadal wymaga połączenia inicjowanego przez serwer, więc reguły zapór mogą mieć znaczenie. EPSV może także ograniczyć problemy wynikające z przepisywania adresu zwracanego w odpowiedzi PASV. Żadne z tych rozszerzeń nie zmienia rozdzielenia połączenia sterującego i danych. Podczas transferu polecenia i odpowiedzi nadal korzystają z połączenia sterującego, a kanał danych pozostaje tymczasowy.