Jeśli zablokujesz wszystkie połączenia przychodzące, jak możesz nadal korzystać z Internetu?

22

Jeśli Twój dostawca usług internetowych lub zapora blokuje wszystkie połączenia przychodzące, w jaki sposób serwery sieciowe mogą nadal wysyłać dane do przeglądarki? Wysyłasz żądanie (wychodzące), a serwer wysyła dane (przychodzące). Jeśli zablokujesz wszystkie przychodzące, jak serwer WWW może zareagować?

Co z transmisją strumieniową wideo i grami wieloosobowymi, w których wykorzystuje UDP? UDP jest bezpołączeniowy, więc nie ma potrzeby ustanowienia połączenia, więc jak zapora sieciowa lub dostawca usług internetowych to obsłuży?

Kunal Chopra
źródło
2
Zablokować wszystkie przychodzące połączenia telefoniczne / Czy przekazywać wszystkie przychodzące połączenia telefoniczne na pocztę głosową? Nie powstrzymuje cię przed wołaniem do kogoś.
WernerCD

Odpowiedzi:

43

„Blokada przychodząca” oznacza, że nowe połączenia przychodzące są blokowane, ale ustalony ruch jest dozwolony. Jeśli więc dozwolone są nowe połączenia wychodzące , przychodząca połowa tej rozmowy jest w porządku.

Zapora zarządza tym poprzez śledzenie stanu połączeń (taka zapora jest często nazywana „zaporą stanową”). Widzi wychodzące TCP SYN i pozwala na to. Widzi przychodzące SYN / ACK i może sprawdzić, czy pasuje do wychodzącej SYN, którą widział, przepuszcza je i tak dalej. Jeśli pozwala na potrójny uścisk dłoni (np. Jest dozwolony zgodnie z regułami zapory), zezwoli na tę rozmowę. A kiedy zobaczy koniec tej rozmowy (FIN lub RST), usunie to połączenie z listy pakietów, aby zezwolić.

UDP odbywa się podobnie, chociaż wymaga zapory ogniowej zapamiętywającej wystarczająco dużo, aby udawać, że UDP ma połączenie lub sesję (czego nie ma UDP).

gowenfawr
źródło
1
W przypadku UDP, ponieważ nie ma rzeczywistego połączenia, zapora zwykle śledzi docelowy adres IP i port wychodzących pakietów UDP, a jeśli istnieje pakiet przychodzący z tym samym adresem IP i portem jako źródłem, zakłada, że ​​jest to odpowiedź i pozwala w.
WhiteWinterWolf
17

@gowenfawr ma obniżony obraz wysokiego poziomu. Pomyślałem jednak, że dodam kilka szczegółów na temat tego, w jaki sposób wykonuje się „dopasowanie” do śledzenia połączenia, ponieważ dla niewtajemniczonych może to brzmieć magicznie.

Każde połączenie TCP ma numer portu z każdej strony. Jak wie większość techników, serwery HTTP działają na porcie 80. Gdy przeglądarka połączy się z serwerem internetowym, poprosi system operacyjny o wygenerowanie „lokalnego” numeru portu, który będzie czymś losowym, takim jak 29672, który nie jest używany przez żaden inny Połączenie TCP z tego komputera (i system operacyjny może to zrobić, ponieważ wie o wszystkich aktywnych połączeniach TCP). Następnie początkowy pakiet instalacyjny TCP zostanie wysłany z adresu IP komputera (IP_YOURS) i numeru portu 29672 na adres IP serwera WWW (IP_WEBSERVER) i numer portu 80. W tym momencie zapora stanowa powie „aha, przyszłe pakiety z portu IP_WEBSERVER 80 idących do portu 29672 IP_YOURS nie są nowymi połączeniami, są odpowiedziami na istniejące połączenie i należy im zezwolić ". Zapory stanowe utrzymują stół,

Atsby
źródło
3
Jest to w większości poprawne, ale jako kilka drobnych punktów numery portów zatrzymują się na 65535 (są to 16-bitowe liczby bez znaku), a poza limitem czasu pakiety z ustawionymi flagami FIN lub RST mogą również sygnalizować, że TCP połączenie jest teraz zamknięte.
reirab
@reirab Oh ups, tak, numer portu zawodzi. Po zamknięciu, oczywiście byłoby możliwe sprawdzenie flag TCP, ale konieczność wzięcia pod uwagę możliwej utraty pakietów i retransmisji bliskich sekwencji jest na tyle skomplikowana, że ​​zakładam, że większość zapór ogniowych po prostu zmienia przeznaczenie ostatnio używanego wpisu tabeli, zamiast utrzymywać śledź dokładnie.
@atsby Czy zawsze możesz edytować swój post i zastąpić numery portów czymś bardziej odpowiednim?
Wszystkie te informacje są świetne. Chciałem tylko dodać jedną rzecz do portów omówionych w powyższych komentarzach. Nazywa się je „efemerycznymi portami”, a ich zasięg jest określony przez jądro właściwe dla każdego systemu operacyjnego. W systemie Linux można je uzyskać za pomocą „cat / proc / sys / net / ipv4 / ip_local_port_range” --- domyślny zakres to „32768 do 61000”
Arul Selvan