Porty FTP umożliwiają przesyłanie plików między komputerem a serwerem, ale ich nieprawidłowa konfiguracja może utrudnić połączenie lub narazić dane na niebezpieczeństwo. W artykule wyjaśnię, jak działają porty FTP, czym różnią się tryb aktywny i pasywny oraz które ustawienia warto sprawdzić przed uruchomieniem usługi. Podpowiem też, jak uniknąć typowych błędów i skonfigurować połączenie krok po kroku.
- FTP korzysta z portu 21 do poleceń i osobnego połączenia do transferu danych.
- Tryb pasywny i EPSV zwykle lepiej działają za NAT-em, ale wymagają otwartego zakresu portów.
- Ustaw stały zakres portów pasywnych i zezwól na niego we wszystkich zaporach.
- Za NAT-em skonfiguruj publiczny adres serwera i sprawdź go w odpowiedzi PASV.
- Testuj logowanie, listowanie katalogów i transfer z zewnętrznej maszyny.
- FTP nie szyfruje haseł; wybierz FTPS lub rozważ SFTP przez SSH na porcie 22.
FTP używa dwóch połączeń TCP: kanału sterującego i kanału danych. Pierwszy zwykle działa na porcie 21 i przenosi logowanie, polecenia oraz odpowiedzi, na przykład kod 230 po poprawnym uwierzytelnieniu. Nie przesyła plików — osobne połączenie kanału danych obsługuje każdą listę katalogów, wysyłanie i pobieranie.
W trybie aktywnym klient wskazuje port nasłuchujący, a serwer łączy się z nim ze swojego portu 20. Takie połączenie przychodzące często blokują firewalle i routery NAT. W trybie pasywnym serwer podaje port, a klient sam się z nim łączy — dlatego ten tryb zwykle lepiej działa za domowym routerem. Odpowiedź PASV może zawierać adres i port, natomiast EPSV, opisany w RFC 2428, podaje tylko port i korzysta z adresu istniejącego połączenia. Ponieważ oba tryby przydzielają port danych osobno, samo otwarcie portu 21 nie wystarczy.
Zawieszona lista katalogów? Winny może być zablokowany kanał danych
Ustaw na serwerze stały zakres portów pasywnych, na przykład 30000–30099, a następnie zezwól na połączenia TCP w tym zakresie w firewallu systemowym i — jeśli działa — zaporze dostawcy. Dobierz zakres do liczby równoczesnych transferów i uwzględnij porty pozostające przez pewien czas w stanie TIME_WAIT. Sprawdź też, czy zakres nie pokrywa się z portami wychodzącymi systemu; w typowej konfiguracji Ubuntu mogą to być porty 32768–60999. Jeśli serwer działa za NAT-em, ustaw także jego publiczny adres IP, aby klienci nie łączyli się z adresem prywatnym.
Jeśli logowanie działa, ale lista katalogów się zawiesza, prawdopodobną przyczyną jest blokada kanału danych, a nie błędne hasło. Przy FTPS TLS szyfruje kanał sterujący i dane, więc starsze mechanizmy śledzące FTP nie odczytują ogłoszonego portu. Dlatego pewniej jest skonfigurować stały zakres portów i reguły firewalla. Przy nowych wdrożeniach warto rozważyć SFTP: przesyła pliki w jednym połączeniu SSH na porcie 22, bez osobnego kanału danych.
Jak poprawnie skonfigurować porty FTP
Aby skonfigurować FTP, rozdziel kanał sterujący od kanału danych, ustal zakres portów pasywnych i zezwól na niego w zaporach. Uwzględnij też NAT, FTPS i testy połączenia.
- Rozdziel kanał sterujący i kanał danych. TCP 21 służy do logowania i przesyłania poleceń, natomiast pliki i listy katalogów wymagają osobnego połączenia danych. Jeśli logowanie działa, ale lista plików się zawiesza, sprawdź, czy zapora nie blokuje tego połączenia.
- Wybierz tryb pasywny i ustal zakres portów. W tym trybie klient otwiera oba połączenia, co ułatwia pracę za NAT-em. Serwer wybiera port danych także przy użyciu EPSV, ale nie podaje w odpowiedzi adresu IP. Ustaw stały zakres, na przykład 30000–30099: w vsftpd służą do tego
pasv_min_portipasv_max_port, w ProFTPD —PassivePorts, a w Pure-FTPd — opcja-p. Dobierz zakres do liczby równoczesnych transferów i unikaj kolizji z systemowym zakresem portów wychodzących. - Otwórz te same porty w każdej zaporze. Zezwól na TCP 21 i cały ustalony zakres pasywny zarówno w zaporze systemowej, jak i sieciowej zaporze dostawcy. W UFW zapisz zakres jako
30000:30099/tcp, a w firewalld —30000-30099/tcp. Sam port 21 umożliwia logowanie, ale nie listowanie katalogów ani transfer plików. - Skonfiguruj publiczny adres serwera za NAT-em. Jeśli serwer ma prywatny adres IP, ustaw publiczny adres, który będzie ogłaszał klientom w odpowiedzi PASV. Użyj
pasv_addressw vsftpd,MasqueradeAddressw ProFTPD albo opcji-Pw Pure-FTPd. Błędny adres może sprawić, że klient spróbuje połączyć się z niedostępnym adresem prywatnym. - Przetestuj połączenie z zewnętrznej maszyny. Sprawdź logowanie, listowanie katalogu i transfer pliku. Upewnij się, że port z odpowiedzi PASV mieści się w ustalonym zakresie, a ogłaszany adres jest osiągalny. Brak odpowiedzi lub przekroczenie limitu czasu może oznaczać blokadę na jednej z zapór. Po zmianach poprawnie uruchom ponownie usługę FTP.
- Wybierz bezpieczny protokół. Zwykłe FTP przesyła dane logowania jawnym tekstem. Jeśli musisz używać FTP, wybierz FTPS, ale pamiętaj, że nadal wymaga kanału danych i odpowiednich reguł zapory. W nowych wdrożeniach rozważ SFTP: korzysta z jednego połączenia SSH na porcie 22, więc nie wymaga zakresu portów pasywnych. Nie polegaj na automatycznych pomocnikach śledzenia FTP — w aktualnych systemach działają w ograniczonym zakresie, a szyfrowanie FTPS uniemożliwia im odczyt informacji o portach.
| Tryb | Kierunek danych | Port / zakres | Adres za NAT |
|---|---|---|---|
| Aktywny | Serwer → klient | TCP 20 → port klienta | Problem po stronie klienta |
| Pasywny (PASV) | Klient → serwer | TCP 21 + zakres pasywny, np. 30000–30099 | Ustaw publiczny adres w odpowiedzi PASV |
| EPSV | Klient → serwer | TCP 21 + ten sam zakres pasywny | Adres połączenia sterującego; brak adresu w odpowiedzi |
| Firewall | Przychodzące TCP | 21 + zakres pasywny | Otwórz na serwerze i w firewallu dostawcy |
Czym różnią się tryb aktywny, pasywny i EPSV
FTP używa dwóch połączeń TCP: kanału sterującego, zwykle przez port 21, oraz kanału danych do listowania katalogów i przesyłania plików. W trybie aktywnym klient wskazuje port, na którym czeka, a serwer łączy się z nim — zwykle ze swojego portu 20. Dlatego router lub zapora po stronie klienta może zablokować połączenie przychodzące.
W trybie pasywnym klient otwiera oba połączenia: sterujące i danych. Serwer podaje adres IP oraz port, na przykład w odpowiedzi „227 Entering Passive Mode”. Port wylicza się, mnożąc przedostatnią wartość przez 256 i dodając ostatnią. Tryb pasywny zwykle lepiej działa za NAT-em po stronie klienta, jednak wymaga skonfigurowania zakresu portów na serwerze i odblokowania ich w zaporze. Bez tego logowanie może się udać, ale lista katalogów utknie, gdy klient będzie czekać na kanał danych.
Mniej problemów z NAT-em i łatwiejsza obsługa IPv6
EPSV, czyli rozszerzony tryb pasywny, również sprawia, że klient inicjuje połączenie danych. Serwer zwraca jednak tylko port, a nie adres IP i port jak w komunikacie „227”. Przykładowa odpowiedź to „229 Entering Extended Passive Mode (|||50000|)”. Klient korzysta wtedy z adresu użytego w połączeniu sterującym, co ogranicza problemy z błędnym adresem za NAT-em i ułatwia działanie w sieciach IPv6. EPSV wymaga nadal otwarcia odpowiedniego zakresu portów na serwerze. Dlatego EPSV warto traktować jako wygodniejszą odmianę trybu pasywnego, a nie sposób na ominięcie konfiguracji zapory.
Wskazówka: jeśli logowanie do FTP działa, ale listowanie katalogów lub pobieranie plików zawodzi, sprawdź, czy zapora serwera przepuszcza skonfigurowany zakres portów pasywnych — EPSV również z niego korzysta.
Jak dobrać zakres portów pasywnych i otworzyć go w firewallu
FTP w trybie pasywnym używa dwóch połączeń TCP: port 21 obsługuje logowanie i polecenia, a drugie połączenie — listy katalogów i transfer plików. Dlatego samo otwarcie portu 21 często nie wystarcza: logowanie może się udać, ale lista plików nie zostanie pobrana. Klient inicjuje oba połączenia, natomiast port kanału danych wybiera serwer. Bez ustalonego zakresu może za każdym razem użyć innego portu.

Ustaw na serwerze stały zakres portów, na przykład 31000–31099. Taka pula może wystarczyć przy niewielkim ruchu; przy wielu równoczesnych transferach poszerz ją, pamiętając, że zamknięte połączenia TCP przez pewien czas pozostają w stanie TIME_WAIT. Sprawdź też zakres portów tymczasowych poleceniem sysctl net.ipv4.ip_local_port_range i unikaj nakładania się zakresów. W vsftpd ustaw pasv_min_port=31000 oraz pasv_max_port=31099, a w ProFTPD użyj dyrektywy PassivePorts 31000 31099. Przed zmianą zapisz obecne ustawienia, by porównać je po teście.
Jedna niezgodna reguła może zablokować transfer plików

Otwórz w firewallu port 21/TCP oraz ten sam zakres portów danych. W UFW dodaj reguły sudo ufw allow 21/tcp i sudo ufw allow 31000:31099/tcp, a ich stan sprawdź poleceniem sudo ufw status verbose. W firewalld dodaj usługę FTP i zakres portów: sudo firewall-cmd --permanent --add-service=ftp, sudo firewall-cmd --permanent --add-port=31000-31099/tcp, a następnie wykonaj sudo firewall-cmd --reload. Jeśli serwer działa za NAT-em, skonfiguruj też publiczny adres, by klient nie otrzymał prywatnego, nieosiągalnego adresu.
Po zapisaniu zmian zrestartuj usługę FTP i przetestuj połączenie z innego komputera. Sprawdź, czy odpowiedź PASV podaje port z wybranego zakresu oraz czy firewall dostawcy, na przykład w panelu VPS, przepuszcza te połączenia. Przy FTPS nie polegaj na pomocnikach śledzących FTP, ponieważ szyfrowany kanał sterujący nie pozwala im odczytać numeru portu. Jeśli oba urządzenia obsługują SFTP, rozważ tę prostszą alternatywę: przesyłanie plików odbywa się przez jedno połączenie SSH.
Wskazówka: Połączenie testowe wykonaj z sieci zewnętrznej — test z samego serwera może nie ujawnić problemu z NAT-em ani regułami firewalla u dostawcy VPS.
Jak skonfigurować adres publiczny serwera za NAT-em i sprawdzić połączenie
Skonfiguruj publiczny adres, porty pasywne i reguły zapory, a następnie przetestuj FTP z zewnętrznej maszyny.
- Sprawdź, czy serwer znajduje się za NAT-em. Uruchom
ip -4 addr show, aby sprawdzić adres interfejsu. Jeśli jest prywatny, a klienci łączą się z publicznym adresem routera lub dostawcy, skonfiguruj serwer tak, by w odpowiedziach FTP podawał ten adres publiczny. W przeciwnym razie klient może próbować połączyć się z niedostępnym adresem prywatnym. - Skonfiguruj publiczny adres i zakres portów pasywnych. W trybie pasywnym klient nawiązuje połączenia sterujące i danych; to drugie jest potrzebne do wyświetlania katalogów i każdego transferu. We vsftpd ustaw na przykład
pasv_min_port=30000,pasv_max_port=30099ipasv_address=203.0.113.10. W ProFTPD użyjPassivePorts 30000 30099orazMasqueradeAddress, a w Pure-FTPd — flag-p(zakres portów) i-P(adres publiczny). Zastąp przykładowy adres własnym. - Otwórz port sterujący i porty danych we wszystkich zaporach. Zezwól na TCP 21 oraz ten sam zakres portów pasywnych, który skonfigurowałeś w serwerze. W UFW dodaj reguły
sudo ufw allow 21/tcpisudo ufw allow 30000:30099/tcp. Sprawdź również zaporę w panelu dostawcy, ponieważ działa niezależnie od zapory systemowej. Dobierz zakres do liczby równoczesnych transferów i upewnij się, że nie koliduje z zakresem portów wychodzących:sysctl net.ipv4.ip_local_port_range. - Zastosuj zmiany i przetestuj konfigurację. Po edycji pliku zrestartuj usługę, na przykład poleceniem
sudo systemctl restart vsftpd, a następnie sprawdź jej status i logi. Test wykonaj z innej maszyny:curl -v --disable-epsv --user użytkownik:hasło ftp://publiczny-adres/. Odpowiedź PASV powinna zawierać publiczny adres i port z wybranego zakresu. Prywatny adres wskazuje na błędną konfigurację NAT, a port spoza zakresu — na niezaładowaną konfigurację. - Ustal przyczynę blokady i rozważ bezpieczniejszy protokół. Jeśli logowanie się powiedzie, ale lista katalogów się zawiesi, problem zwykle dotyczy kanału danych, nie hasła. Zewnętrzny test
nc -vz publiczny-adres 30000pomoże zdiagnozować połączenie: przekroczenie czasu oczekiwania może wskazywać na blokadę po drodze, a natychmiastowe „Connection refused” — że pakiet dotarł, lecz na tym porcie nie nasłuchuje obecnie żaden proces. Pomocniki conntrack FTP nie obsługują szyfrowanego kanału FTPS. Jeśli obie strony obsługują SFTP, wybierz ten protokół: przesyła dane przez jedno połączenie SSH na porcie 22.
Źródła:
- https://www.ssdnodes.com/learn/lang/pl/ftp-passive-mode-firewall-ports
FAQ - Najczęstsze pytania
Jakie porty wykorzystuje FTP?FTP używa portu TCP 21 do kanału sterującego, który obsługuje logowanie i polecenia. Listowanie katalogów oraz przesyłanie plików odbywa się przez osobne połączenie danych, którego port zależy od trybu i konfiguracji serwera.
Czym różnią się aktywny i pasywny tryb FTP?W trybie aktywnym serwer łączy się z portem nasłuchującym klienta, co często blokują jego firewall lub router NAT. W trybie pasywnym klient inicjuje także połączenie danych, dlatego ten tryb zwykle lepiej działa za routerem, ale wymaga otwarcia na serwerze ustalonego zakresu portów.
Dlaczego logowanie do FTP działa, ale lista katalogów się zawiesza?Najczęściej blokowane jest połączenie kanału danych, a nie popełniono błędu przy logowaniu. Sprawdź, czy zapory systemowa i sieciowa przepuszczają skonfigurowany zakres portów pasywnych oraz czy serwer ogłasza prawidłowy adres publiczny, jeśli działa za NAT-em.
Jak skonfigurować porty pasywne i zaporę?Ustaw na serwerze stały zakres, na przykład TCP 30000–30099, i otwórz go w każdej zaporze wraz z portem TCP 21. Zakres powinien odpowiadać ustawieniom serwera, wystarczać dla równoczesnych transferów i nie kolidować z zakresem portów wychodzących systemu.
Czym EPSV różni się od PASV i czy SFTP wymaga portów pasywnych?EPSV podaje tylko port danych, a klient korzysta z adresu użytego w połączeniu sterującym; PASV podaje zarówno adres, jak i port. SFTP nie korzysta z FTP ani z osobnego kanału danych — przesyła pliki przez jedno połączenie SSH, zwykle na porcie 22.










