Sprawdzanie zakresu portów pasywnych FTP

Sprawdź, czy zakres portów trybu pasywnego na twoim serwerze FTP jest otwarty i osiągalny przez zapory. Niezbędne przy diagnozowaniu błędów typu "unable to open data connection".

Gotowe zakresy:

Czym jest tryb pasywny?

W trybie pasywnym FTP (PASV) serwer otwiera losowy port o wysokim numerze do przesyłania danych i informuje klienta, z którym portem ma się połączyć. Jeśli zapora blokuje te porty, przesyłanie plików się nie udaje, choć połączenie sterujące na porcie 21 działa bez zarzutu.

Połączenie sterujące na porcie 21 przechodzi przez zaporę, ale drugie połączenie danych do portu 50000 zostaje zablokowane; odpowiedź 227 serwera koduje port jako 195 x 256 + 80
To nie połączenie sterujące zawodzi, a odpowiedź 227 mówi, który port trzeba otworzyć.

Typowe zakresy portów pasywnych

Zakres Kto go używa
49152–65535Dynamiczny (efemeryczny) zakres IANA (domyślny na wielu serwerach)
40000–40100Popularny zakres własny (cPanel, Plesk)
30000–31000Popularny zakres własny (domyślny w FileZilla Server)

Tryb aktywny a tryb pasywny

FTP używa dwóch połączeń: połączenia sterującego na porcie 21 do poleceń i osobnego połączenia danych dla każdego przesyłanego pliku i każdego listowania katalogu. Tryb decyduje o tym, która strona otwiera to drugie połączenie.

Tryb aktywny (PORT) Tryb pasywny (PASV)
Kto otwiera połączenie danychSerwer, z powrotem do klientaKlient, do serwera
Co wysyła klientPORT (lub EPRT) z własnym adresem i własnym portemPASV (lub EPSV)
Co musi być osiągalnePort na kliencie, który blokują domowe routery i firmowe zaporyZakres portów pasywnych serwera
Kto go używaWbudowany w Windows ftp.exe, stare skryptyPrawie każdy nowoczesny klient, domyślnie

Tryb pasywny potrzebuje tylko połączeń wychodzących od klienta, dlatego działa za NAT-em i dlatego nowoczesne klienty używają go domyślnie. Praca przenosi się na serwer: jego zapora musi wpuszczać klientów na cały zakres pasywny, a nie tylko na port 21.

Jak czytać odpowiedź 227

Serwer odpowiada na PASV sześcioma liczbami, na przykład 227 Entering Passive Mode (203,0,113,10,195,80). Pierwsze cztery to adres IP, z którym należy się połączyć. Ostatnie dwie dają port: 195 x 256 + 80 = 50000. Dwie rzeczy często idą źle:

  • Port leży poza zakresem dozwolonym przez zaporę. Ustaw zakres pasywny serwera na ten, który otworzyłeś, albo otwórz zakres, którego serwer faktycznie używa.
  • Adres jest prywatny, na przykład 192.168.1.10, bo serwer stoi za NAT-em i podaje swój adres wewnętrzny. Klienty zawieszają się wtedy przy każdym listowaniu katalogu. Podaj serwerowi jego adres publiczny w ustawieniach opisanych niżej; niektóre klienty obchodzą problem, używając ponownie adresu serwera, ale naprawić trzeba to po stronie serwera.

Przy EPSV odpowiedź brzmi 229 Entering Extended Passive Mode (|||50000|): sam port, bez adresu, więc problem z prywatnym adresem znika. Port i tak musi być otwarty.

Jak ustawić zakres pasywny na popularnych serwerach

  • vsftpd: w vsftpd.conf pasv_min_port=40000, pasv_max_port=40100 oraz pasv_address z publicznym IP, gdy serwer stoi za NAT-em.
  • ProFTPD: PassivePorts 40000 40100, do tego MasqueradeAddress z adresem publicznym.
  • Pure-FTPd: PassivePortRange 40000 40100 i ForcePassiveIP.
  • FileZilla Server: jego ustawienia trybu pasywnego przyjmują własny zakres portów i publiczny adres IP, który ma podawać.
  • IIS: na poziomie serwera, w funkcji FTP Firewall Support (obsługa zapory FTP), zakres portów kanału danych i zewnętrzny adres IP zapory. Może być potrzebny restart usługi FTP, żeby nowy zakres zaczął działać.

Potem otwórz ten sam zakres dla TCP wszędzie przed serwerem (w zaporze systemu operacyjnego, w grupie zabezpieczeń w chmurze, w przekierowaniu portów na routerze) i sprawdź kilka portów z tego zakresu narzędziem powyżej.

Jak czytać wynik

Otwarty oznacza, że połączenie TCP z tym portem zostało przyjęte z internetu, więc nic po drodze go nie blokuje. Brak odpowiedzi zwykle oznacza, że zapora po cichu odrzuciła próbę. Zamknięty oznacza, że coś odpowiedziało odmową, często sam serwer, bo wiele serwerów FTP nasłuchuje na porcie pasywnym tylko przez chwilę po tym, jak klient wyśle PASV.

Na serwerze, który akurat nic nie przesyła, zamknięte porty w zakresie są więc czymś normalnym; prawdziwym sygnałem ostrzegawczym jest cały zakres bez odpowiedzi. Ostatecznym dowodem jest listowanie katalogu w trybie pasywnym z prawdziwego klienta: jeśli logowanie działa, a potem listowanie się zawiesza, zablokowane jest połączenie danych. Tester połączenia FTP sprawdza pierwszą połowę, czyli czy serwer odpowiada i przyjmuje twoje dane logowania.