Jaka jest różnica między aktywnym a pasywnym FTP?

312

Czy ktoś może mi powiedzieć, jaka jest różnica między aktywnym a pasywnym FTP?
Który jest lepszy?

karthik
źródło

Odpowiedzi:

474

Aktywny i pasywny to dwa tryby, w których FTP może działać.

W tle FTP używa dwóch kanałów między klientem a serwerem, kanału poleceń i danych, które są w rzeczywistości osobnymi połączeniami TCP.

Kanał poleceń służy do poleceń i odpowiedzi, podczas gdy kanał danych służy do przesyłania plików.

To rozdzielenie informacji o poleceniach i danych na osobne kanały to sprytny sposób na wysyłanie poleceń na serwer bez konieczności oczekiwania na zakończenie bieżącego przesyłania danych. Zgodnie z RFC jest to obowiązkowe tylko dla podzbioru poleceń, takich jak wychodzenie, przerywanie bieżącego transferu i uzyskiwanie statusu.


W trybie aktywnym klient ustanawia kanał poleceń, ale serwer jest odpowiedzialny za ustanowienie kanału danych. Może to stanowić problem, jeśli na przykład komputer kliencki jest chroniony przez zapory ogniowe i nie zezwala na nieautoryzowane żądania sesji od podmiotów zewnętrznych.

W trybie pasywnym klient ustanawia oba kanały. Wiemy już, że ustanawia kanał poleceń w trybie aktywnym i robi to samo tutaj.

Następnie jednak prosi serwer (w kanale poleceń), aby zaczął nasłuchiwać na porcie (według uznania serwerów), zamiast próbować ponownie nawiązać połączenie z klientem.

W ramach tego serwer zwraca również klientowi numer portu, na którym nasłuchiwał, aby klient wiedział, jak się z nim połączyć.

Gdy klient się o tym dowie, może z powodzeniem utworzyć kanał danych i kontynuować.

Więcej szczegółów dostępnych jest w RFC: https://www.ietf.org/rfc/rfc959.txt

paxdiablo
źródło
1
Nie sądzę, aby instrukcja wokół portu Y była poprawna, w trybie aktywnym klient nie określa portu Y, serwer próbuje losowo wybrać numer portu i próbuje sprawdzić, czy klient zezwoli na komunikację przez ten wybrany port . Mówię to dlatego, że jeśli nie jest to prawdą (mój argument), to po stronie klienta, nawet jeśli znajduje się on za zaporą ogniową, zawsze można utworzyć dwie reguły ściany ogniowej: jedną dla połączenia wychodzącego, a drugą dla połączenia przychodzącego.
arun.raj.mony
1
@arun, klient niekoniecznie kontroluje zaporę ogniową. Przykład: w środowiskach korporacyjnych zazwyczaj istnieje zapora ogniowa między siecią obejmującą całą firmę a światem zewnętrznym, przez którą klient korzystający z FTP ma zerową moc.
paxdiablo
W trybie pasywnym, dlaczego serwer wysyła klientowi losowy port do klienta, a klient łączy się bezpośrednio z portem serwera 20?
chengbo
@paxdiablo Dlaczego w trybie pasywnym serwer przypisuje losowy port nr i wysyła go do klienta w celu połączenia danych? Dlaczego klient nie może bezpośrednio otworzyć kanału danych od portu klienta nr do portu nr 20 po stronie serwera?
Zephyr
1
Zadałem pytanie tutaj teraz networkengineering.stackexchange.com/q/43680/37406
Zephyr
166

Niedawno natknąłem się na to pytanie w miejscu pracy, więc myślę, że powinienem tutaj coś powiedzieć. Użyję obrazu, aby wyjaśnić, jak FTP działa jako dodatkowe źródło poprzedniej odpowiedzi.

Tryb aktywny:

tryb aktywny


Tryb pasywny:

wprowadź opis zdjęcia tutaj


W konfiguracji w trybie aktywnym serwer będzie próbował połączyć się z losowym portem po stronie klienta. Są więc szanse, że ten port nie byłby jednym z tych predefiniowanych portów. W rezultacie próba połączenia z nim zostanie zablokowana przez zaporę i nie zostanie nawiązane połączenie.

wprowadź opis zdjęcia tutaj


Konfiguracja pasywna nie będzie miała tego problemu, ponieważ to klient inicjuje połączenie. Oczywiście po stronie serwera może być również zapora ogniowa. Ponieważ jednak oczekuje się, że serwer otrzyma większą liczbę żądań połączenia w porównaniu do klienta, byłoby logiczne, aby administrator serwera dostosował się do sytuacji i otworzył wybór portów, aby spełnić konfiguracje trybu pasywnego.

Dlatego najlepiej byłoby skonfigurować serwer do obsługi trybu pasywnego FTP. Jednak tryb pasywny naraziłby system na ataki, ponieważ klienci powinni łączyć się z losowymi portami serwera. Dlatego, aby obsługiwać ten tryb, nie tylko serwer musi mieć dostępnych wiele portów, ale zapora ogniowa powinna również umożliwiać połączenia przez wszystkie te porty!

Aby zminimalizować ryzyko, dobrym rozwiązaniem byłoby określenie zakresu portów na serwerze, a następnie dopuszczenie tylko tego zakresu portów w zaporze.

Aby uzyskać więcej informacji, przeczytaj oficjalny dokument .

Yuantao
źródło
Zgaduję, co jest kwestią bezpieczeństwa. Jeśli serwer nasłuchuje na tym samym porcie (20), nie może zrozumieć, który klient mówi, więc wybiera losowy port i wysyła go do klienta, zaczynając nasłuchiwać na tym porcie. Gdy klient łączy się z tym portem, serwer wie, do którego klienta należy. Ale wystarczy, aby MITM połączył się z tym samym klientem. (cóż, atak mitm i tak jest trudny ...)
Daniele Cruciani
2
Świetna odpowiedź, zwłaszcza informacje o problemie z zaporą ogniową
Anh Tuan
14

Zredagowana wersja mojego artykułu Tryby połączenia FTP (aktywne vs. pasywne) :

Tryb połączenia FTP (aktywny lub pasywny) określa sposób ustanowienia połączenia danych. W obu przypadkach klient tworzy połączenie kontrolne TCP z portem poleceń serwera FTP 21. Jest to standardowe połączenie wychodzące, jak w przypadku każdego innego protokołu przesyłania plików (SFTP, SCP, WebDAV) lub dowolnej innej aplikacji klienta TCP (np. Przeglądarki internetowej ). Tak więc zwykle nie ma problemów z otwarciem połączenia sterującego.

Tam, gdzie protokół FTP jest bardziej skomplikowany w porównaniu z innymi protokołami przesyłania plików, są transfery plików. Podczas gdy inne protokoły używają tego samego połączenia zarówno do kontroli sesji, jak i do przesyłania plików (danych), protokół FTP używa osobnego połączenia do przesyłania plików i list katalogów.

W trybie aktywnym klient zaczyna nasłuchiwać na losowym porcie dla przychodzących połączeń danych z serwera (klient wysyła polecenie FTP, PORTaby poinformować serwer, na którym porcie nasłuchuje). W dzisiejszych czasach typowe jest to, że klient znajduje się za zaporą (np. Wbudowana zapora systemu Windows) lub routerem NAT (np. Modem ADSL) i nie może przyjmować przychodzących połączeń TCP.

Z tego powodu wprowadzono tryb pasywny , który jest obecnie najczęściej używany. Korzystanie z trybu pasywnego jest preferowane, ponieważ większość złożonej konfiguracji jest wykonywana tylko raz po stronie serwera przez doświadczonego administratora, a nie indywidualnie po stronie klienta przez (prawdopodobnie) niedoświadczonych użytkowników.

W trybie pasywnym klient używa połączenia sterującego, aby wysłać PASVpolecenie do serwera, a następnie odbiera adres IP serwera i numer portu serwera z serwera, którego następnie używa klient do otwarcia połączenia danych z adresem IP serwera i serwerem otrzymano numer portu.

Konfiguracja sieci w trybie pasywnym

W trybie pasywnym większość obciążeń konfiguracyjnych spoczywa na serwerze. Administrator serwera powinien skonfigurować serwer zgodnie z poniższym opisem.

Zapora i NAT po stronie serwera FTP muszą być skonfigurowane nie tylko w celu umożliwienia / kierowania połączeń przychodzących na porcie FTP 21, ale także szeregu portów dla połączeń danych przychodzących. Zazwyczaj oprogramowanie serwera FTP ma opcję konfiguracji umożliwiającą ustawienie zakresu portów, z których będzie korzystać serwer. Ten sam zakres musi zostać otwarty / przekierowany na firewallu / NAT.

Gdy serwer FTP znajduje się za NAT, musi znać swój zewnętrzny adres IP, aby mógł podać go klientowi w odpowiedzi na PASVpolecenie.

Konfiguracja sieci w trybie aktywnym

W trybie aktywnym większość obciążeń związanych z konfiguracją spoczywa na kliencie.

Zapora ogniowa (np. Zapora systemu Windows) i NAT (np. Reguły routingu modemu ADSL) po stronie klienta muszą być skonfigurowane w taki sposób, aby zezwalać / kierować zakres portów dla przychodzących połączeń danych. Aby otworzyć porty w systemie Windows, wybierz Panel sterowania> System i zabezpieczenia> Zapora systemu Windows> Ustawienia zaawansowane> Reguły ruchu przychodzącego> Nowa reguła . Informacje na temat routingu portów na NAT (jeśli istnieją) można znaleźć w jego dokumentacji.

Gdy w twojej sieci znajduje się NAT, klient FTP musi znać swój zewnętrzny adres IP, który WinSCP musi podać serwerowi FTP za pomocą PORTpolecenia. Aby serwer mógł poprawnie połączyć się ponownie z klientem, aby otworzyć połączenie danych. Niektóre klienty FTP są zdolne do automatycznego wykrywania zewnętrznego adresu IP, niektóre muszą zostać skonfigurowane ręcznie.

Inteligentne zapory ogniowe / NAT

Niektóre zapory ogniowe / NAT próbują automatycznie otwierać / zamykać porty danych, sprawdzając połączenie sterujące FTP i / lub tłumacząc adresy IP połączenia danych w ruchu kontrolnym.

Przy takim firewallu / NAT powyższa konfiguracja nie jest konieczna dla zwykłego niezaszyfrowanego FTP. Ale to nie może działać z FTPS, ponieważ ruch połączenia sterującego jest szyfrowany, a zapora sieciowa / NAT nie może go kontrolować ani modyfikować.

Martin Prikryl
źródło
11

Tryb aktywny: -server inicjuje połączenie.

Tryb pasywny: -client inicjuje połączenie.

Saeed Aliakbari
źródło
1

Tryb aktywny - klient wydaje serwerowi polecenie PORT, sygnalizując, że „aktywnie” poda adres IP i numer portu, aby ponownie otworzyć połączenie danych z klientem.

Tryb pasywny - klient wydaje polecenie PASV, aby wskazać, że będzie „pasywnie” czekał na podanie przez serwer adresu IP i numeru portu, po czym klient utworzy połączenie danych z serwerem.

Istnieje wiele dobrych odpowiedzi powyżej, ale ten post na blogu zawiera przydatne grafiki i dość solidne wyjaśnienie: https://titanftp.com/2018/08/23/what-is-the-difference-between-active-and -passive-ftp /

DaveW2122
źródło