Blog (29)
Komentarze (1k)
Recenzje (0)

Komunikacja TCP/IP, Firewalle, Routery i NAT

@okokokKomunikacja TCP/IP, Firewalle, Routery i NAT24.04.2013 23:37

Jakiś czas temu zostałem zmuszony do napisania referatu nt. firewalli, routerów, NAT-u i maskarady do szkoły na przedmiot o nazwie Systemy Operacyjne i Sieci Komputerowe. Ponieważ widziałem tutaj również teoretyczny wpis na temat systemu binarnego, postanowiłem wrzucić na bloga mój referat. :) Zapraszam do lektury.

Komunikacja w Internecie, protokoły sieciowe i porty komunikacyjne

Każdy program zainstalowany w komputerze który chce wysyłać lub odbierać dane przez sieć, musi do tego celu wykorzystać jakiś protokół warstwy aplikacji ze stosu TCP/IP. Wiadomość tego protokołu muszą być następnie upakowane w segment TCP lub datagram UDP (w warstwie transportowej), a następnie przesłane dalej, w dół stosu do warstwy internetowej, gdzie następuje podzielenie segmentu na kilka mniejszych części (fragmentacja datagramów IP), oraz upakowanie ich w datagram IP. Dalej dane są jeszcze pakowane w ramkę i zamieniane na odpowiedni sygnał przesyłany przez medium transmisyjne np. skrętkę kategorii 5 w sieci 100Base-TX Ethernet, do przełącznika, routera i dalej przez Internet do celu.

Podczas komunikacji klient/serwer, każdy serwer danego protokół warstwy aplikacji oczekuje na odebranie połączenia TCP lub datagramu IP na danym porcie. W przypadku serwera HTTP, czyli serwera stron WWW, jest to najczęściej port 80 protokołu TCP. Klient może rozpocząć komunikacje na dowolnym porcie i połączyć się z portem TCP 80 serwera. Porty z których klient nawiązuje połączenie to wysokie porty np. 52044.

Po nawiązaniu połączenia TCP, możliwe jest przesyłanie nim danych, do czasu jego zamknięcia. Takie połączenie może trwać bardzo długo. Protokół UDP jest protokołem bezpołączeniowym. Przesyła on tylko datagramy, nie nawiązując żadnych połączeń.

Na serwerach z systemem Unix, aktywne połączenia TCP możemy poznać wydając w terminalu polecenie netstat -n. Poniżej, przykładowy wynik tego polecenia:

root@e00:~# netstat -n
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 127.0.0.1:9000          127.0.0.1:60487         TIME_WAIT
tcp        0      0 127.0.0.1:9000          127.0.0.1:60479         TIME_WAIT
tcp        0      0 127.0.0.1:9000          127.0.0.1:60478         TIME_WAIT
tcp        0      0 127.0.0.1:9000          127.0.0.1:60484         TIME_WAIT
tcp        0      0 127.0.0.1:9000          127.0.0.1:60507         TIME_WAIT
tcp        0      0 127.0.0.1:9000          127.0.0.1:60505         TIME_WAIT
tcp        0      0 127.0.0.1:9000          127.0.0.1:60495         TIME_WAIT
tcp        0      0 127.0.0.1:9000          127.0.0.1:60493         TIME_WAIT
tcp        0      0 127.0.0.1:9000          127.0.0.1:60504         TIME_WAIT
tcp        0      0 77.55.240.61:80         78.88.21.237:57766      ESTABLISHED
tcp        0      0 127.0.0.1:9000          127.0.0.1:60485         TIME_WAIT
tcp        0      0 127.0.0.1:9000          127.0.0.1:60481         TIME_WAIT
tcp        0      0 77.55.240.61:80         78.88.21.237:57765      ESTABLISHED
tcp        0      0 77.55.240.61:22         78.88.21.237:52000      ESTABLISHED
tcp        0      0 127.0.0.1:9000          127.0.0.1:60483         TIME_WAIT
tcp        0      0 127.0.0.1:9000          127.0.0.1:60491         TIME_WAIT
tcp        0      0 127.0.0.1:9000          127.0.0.1:60482         TIME_WAIT
tcp        0      0 127.0.0.1:9000          127.0.0.1:60480         TIME_WAIT
tcp        0      0 127.0.0.1:9000          127.0.0.1:60498         TIME_WAIT
tcp        0      0 127.0.0.1:9000          127.0.0.1:60506         TIME_WAIT
tcp        0      0 127.0.0.1:9000          127.0.0.1:60500         TIME_WAIT
tcp        0      0 77.55.240.61:80         78.88.21.237:57770      ESTABLISHED
tcp        0      0 127.0.0.1:9000          127.0.0.1:60488         TIME_WAIT
tcp        0      0 127.0.0.1:9000          127.0.0.1:60489         TIME_WAIT
tcp        0      0 127.0.0.1:9000          127.0.0.1:60494         TIME_WAIT
tcp        0      0 127.0.0.1:9000          127.0.0.1:60496         TIME_WAIT
tcp        0      0 77.55.240.61:80         78.88.21.237:57764      ESTABLISHED
tcp        0      0 127.0.0.1:9000          127.0.0.1:60492         TIME_WAIT
tcp        0      0 127.0.0.1:9000          127.0.0.1:60499         TIME_WAIT
tcp        0      0 127.0.0.1:9000          127.0.0.1:60501         TIME_WAIT
tcp        0      0 77.55.240.61:80         78.88.21.237:57759      ESTABLISHED
tcp        0      0 127.0.0.1:9000          127.0.0.1:60502         TIME_WAIT
tcp        0      0 127.0.0.1:9000          127.0.0.1:60490         TIME_WAIT
tcp        0      0 77.55.240.61:80         78.88.21.237:57756      ESTABLISHED
tcp        0      0 127.0.0.1:9000          127.0.0.1:60497         TIME_WAIT
tcp        0      0 127.0.0.1:9000          127.0.0.1:60503         TIME_WAIT
tcp        0      0 77.55.240.61:80         78.88.21.237:57749      ESTABLISHED
tcp        0      0 127.0.0.1:9000          127.0.0.1:60486         TIME_WAIT
tcp        0      0 127.0.0.1:9000          127.0.0.1:60477         TIME_WAIT
tcp        0      0 127.0.0.1:9000          127.0.0.1:60508         TIME_WAIT
tcp        0      0 77.55.240.61:80         78.88.21.237:57769      ESTABLISHED
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  7      [ ]         DGRAM                    162548653 /dev/log
unix  2      [ ]         DGRAM                    163935546
unix  3      [ ]         STREAM     CONNECTED     163732856
unix  3      [ ]         STREAM     CONNECTED     163732855
unix  2      [ ]         DGRAM                    162645686
unix  2      [ ]         DGRAM                    162548926
unix  2      [ ]         DGRAM                    162548862
unix  2      [ ]         DGRAM                    162548685

Na powyższym listingu widać że komputer o adresie IP 78.88.21.237 nawiązał 7 połączeń TCP z serwerem o adresie IP 77.55.240.61 na porcie 80 z różnych wysokich portów. Z tego samego komputera, zostało nawiązane także połączenie TCP z serwerem na porcie 22, z portu wysokiego nr. 52000. Na serwerze, na porcie 80 uruchomiłem serwer HTTP - nginx, a na porcie 22 uruchomiony jest serwer SSH - OpenSSH.

Na liście znajduje się również bardzo dużo połączeń lokalnych z adresu IP 127.0.0.1 z różnych wysokich portów, na adres IP 127.0.0.1 na port 9000. Adres 127.0.0.1 to adres loopback, czyli adres wirtualnej karty sieciowej - tak zwanej, pętli zwrotnej. Wszystkie pakiety wysłane na ten adres, zostaną zwrócone do naszego komputera. Do działania tego adresu nie jest potrzebne połączenie z Internetem ani żadną siecią.

Na moim serwerze, na porcie 9000 uruchomiony jest serwer FastCGI PHP. Po wysłaniu żądania HTTP o przesłanie pliku z rozszerzeniem *.php, serwer HTTP przesyła najpierw zawartość tego pliku do lokalnego serwera FastCGI, a do klienta żądającego pliku, przesyłany jest wynik działania programu - serwera FastCGI, czyli przetworzona już strona WWW w formacie HTML.

Ściana ognia

Firewall, czyli zapora ogniowa służy do blokowania różnych typów komunikacji wchodzącej lub wychodzącej do lub z komputera lub sieci lokalnej. Zabezpiecza on komputery przed atakami i włamywaczami z zewnątrz. Przykładowo, wirus Sasser łączył się z losowymi komputerami na portach TCP 445 i 139 (usługa NetBIOS) i powodował przepełnienie bufora, dzięki czemu mógł załadować się na dany komputer i w ten sam sposób rozprzestrzeniać się dalej oraz powodować automatyczne restartowanie się komputera zaraz po jego uruchomieniu.

Firewall może być programowy lub sprzętowy. Najczęściej firewalle blokują komunikację/połączenia przychodzące lub wychodzące na określonych portach danego protokołu warstwy transportowej (TCP lub UDP). Firewalle mogą też blokować pakiety pochodzące z danych adresów IP, a niektóre, potrafią także blokować pakiety zawierająca jakąś ustaloną wartość w nagłówku protokołu warstwy aplikacji, np. żądania HTTP pochodzące z wybranej przeglądarki stron WWW lub przechodzące przez serwer proxy który pozostawił po tym ślad.

Firewalle programowe, na komputerach klienckich zazwyczaj służą do blokowania możliwości przyjmowania połączeń przychodzących na wszystkich portach i w ten sposób uniemożliwiają ich "odebranie" aplikacjom zainstalowanym na komputerze. Podobnie, firewalle programowe konfiguruje się na serwerach. Wtedy zazwyczaj stosuje się jednak wyjątki, pozwalające na odebranie połączeń na określonych portach. Np. na moim serwerze ustawiłem wyjątki, tak aby mógł on odbierać połączenia przychodzące protokołów SSH, HTTP, FTP, SMTP, POP3, IMAP, SMTPS, POP3S, IMAPS. Na tych portach działają uruchomione przeze mnie serwery - SSH - OpenSSH, HTTP - nginx, FTP - ftpd, SMTP i SMTPS - Postfix, POP3, POP3S, IMAP i IMAPS - Dovecot.

"Polityka", która zakłada że firewall zablokuje całą komunikacje z pewnymi wyjątkami nazywana jest Default Deny Policy - Domyślna Polityka Blokowania. Istnieje też druga "polityka" zakładająca że domyślnie, ruch sieciowy na wszystkich portach będzie przekazywany dalej, z wykluczeniem kilku ustalonych wyjątków np. blokowanie tylko ruchu przychodzącego na port 80. Jest ona nazywana Default Allow Policy.

Firewalle sprzętowe, oprócz blokowania ruchu na określonych portach, bardzo często używane są do blokowania całego ruchu z danych adresów IP. Jest to bardzo przydatne podczas ataków DDoS. Atak DDoS polegają na wysyłaniu bardzo dużej ilości zapytań/żądań np. HTTP do serwera bez oczekiwania na odpowiedź, przez dużą ilość komputerów. Powoduje to przeładowanie bufora w serwerze i jego blokadę. Firewalle sprzętowe potrafią wykrywać źródła dużego natężenia nawiązywanych połączeń/wysyłanych żądań i blokować adresy IP z których pochodzi ten ruch

Firewalle sprzętowe potrafią także równoważyć obciążenie. Odbierają ruch przychodzący do jednego adresu IP serwera i przesyłają go do dowolnego serwera znajdującego się w puli. Serwery te świadczą identyczne usługi i komunikacja wygląda tak jakby każdy użytkownik łączył się z tym samym fizycznym serwerem.

Firewalle sprzętowe nie są z reguły podłączane przed pojedynczymi serwerami, ale przed całymi sieciami komputerowymi.

Routery i maskarada

Prawdziwe routery nie mają nic wspólnego z routerami domowymi służącymi do dzielenia łącza. Routery te mają po kilka kart sieciowych (interfejsów) i za pomocą każdego z nich, przyłączane są do innych sieci. Mogą one wymieniać pakiety IP między podłączonymi do nich sieciami. Jeśli dany router nie jest podłączony do sieci do której ma przesłać dany pakiet IP, przesyła go do innego routera który jest następnym "hopem" na najkrótszej trasie do celu. Trasa ta jest zapisana w tablicy routingu, a tablice tą tworzą protokoły routingu.

Domowe routery tak naprawdę składają się z 3 urządzeń zintegrowanych w jedno:

  • Czegoś co producenci nazywają routerem, ale z routerem nie ma faktycznie nic wspólnego i bardziej przypomina firewall. Ma on 2 karty sieciowe i jest podłączony z jednej strony do portu WAN/modemu a z drugiej do wbudowanego przełącznika;
  • Switcha/Przełącznika Ethernetowego, który pozwala podłączyć wiele komputerów do "routera";
  • oraz Access Pointa, podłączonego do przełącznika i pozwalającego przyłączać do sieci, bezprzewodowo komputery wyposażone w karty WiFi.

Czasami routery też zawierają wbudowane modemy, np. ADSL lub DOCSIS, umożliwiający podłączenie go bezpośrednio do kabla dostarczonego przez dostawcę Internetu - ISP.

Moduł "routera" w routerze nie łączy sieci tak jak prawdziwy router, a udaje podłączony do sieci dostawcy komputer z przypisanym pojedynczym publicznym adresem IP i pozwala, komputerom z sieci lokalnej, komunikować się z Internetem, zamieniając ich prywatne adresy na swój adres publiczny, podczas wysyłania oraz odwrotnie, w trakcie odbierania danych. Komputery w sieci lokalnej mają przypisane prywatne adresy IP które mogą się powtarzać w każdej z takich sieci i nie są publicznie trasowane w Internecie. Aby router wiedział, które dane przychodzące ma przesłać do którego z lokalnych komputerów, dla każdego połączenia wychodzącego zmienia port z którego wychodzi to połączenie na inny losowy (wysoki) i zapisuje go w "tabelce". W trakcie odbierania danych, odczytuje port z tabelki i zamienia go na ten z którego połączenie przyszło od prawdziwego celu oraz zmienia IP w pakiecie, na to lokalne. Tak więc, połączenie może być zainicjowane jedynie przez komputer wewnątrz sieci lokalnej. Nie możliwe jest przysłanie pakietu do komputera w sieci lokalnej, z zewnątrz.

Takie zachowanie routera nazywane jest translacją adresów sieciowych (NAT) wiele (adresów wewnętrznych) do jednego (adresu zewnętrznego) lub maskaradą.

Strefa zdemilitaryzowana i przekierowanie portów

Aby rozwiązać problem braku możliwości przyjmowania połączeń, powstało przekierowanie portów oraz strefa zdemilitaryzowana. Na większości domowych routerów, możliwe jest przekierowanie pojedynczych portów z publicznego adresu IP przypisanego do routera, na pojedynczy port, wybranego komputera w sieci lokalnej. DMZ, czyli strefa zdemilitaryzowana, to możliwość przekierowania całego ruchu przychodzącego na publiczny adres routera, na dowolny wybrany adres IP z sieci lokalnej.

Na routerach TP-LINK, aby przekierować port z publicznego adresu routera, wchodzimy w panel administracyjny routera, przechodzimy do zakładki Forwarding -> Virtual Servers, klikamy Add New, podajemy port publiczny, port prywatny, lokalny adres IP komputera, na który ma zostać utworzone przekierowanie, protokół - TCP, UDP lub oba na raz i zatwierdzamy, klikająć przycisk Save.

Po przekierowaniu portu, warto zarezerwować sobie, wybrane lokalne IP, tak aby port był zawsze przekierowywany na nasz komputer. W tym celu, wchodzimy w zakładkę DHCP -> Address Reservation, klikamy New, podajemy parę adresów - nasze lokalne IP oraz adres sprzętowy naszej karty sieciowej który nigdy się nie zmienia i jest na stałe zakodowany w pamięci ROM karty i klikamy Save.

Aby przekierować cały ruch na wybrane IP w sieci lokalnej, czyli utworzyć strefę zdemilitaryzowaną, wchodzimy w zakładkę Forwarding -> DMZ, zaznaczamy Enabled i podajemy adres IP naszego lokalnego komputera, na który chcemy przekierować ruch, a następnie klikamy Save.

Wybrane dla Ciebie
Szanowna Użytkowniczko! Szanowny Użytkowniku!
×
Aby dalej móc dostarczać coraz lepsze materiały redakcyjne i udostępniać coraz lepsze usługi, potrzebujemy zgody na dopasowanie treści marketingowych do Twojego zachowania. Twoje dane są u nas bezpieczne, a zgodę możesz wycofać w każdej chwili na podstronie polityka prywatności.

Kliknij "PRZECHODZĘ DO SERWISU" lub na symbol "X" w górnym rogu tej planszy, jeżeli zgadzasz się na przetwarzanie przez Wirtualną Polskę i naszych Zaufanych Partnerów Twoich danych osobowych, zbieranych w ramach korzystania przez Ciebie z usług, portali i serwisów internetowych Wirtualnej Polski (w tym danych zapisywanych w plikach cookies) w celach marketingowych realizowanych na zlecenie naszych Zaufanych Partnerów. Jeśli nie zgadzasz się na przetwarzanie Twoich danych osobowych skorzystaj z ustawień w polityce prywatności. Zgoda jest dobrowolna i możesz ją w dowolnym momencie wycofać zmieniając ustawienia w polityce prywatności (w której znajdziesz odpowiedzi na wszystkie pytania związane z przetwarzaniem Twoich danych osobowych).

Od 25 maja 2018 roku obowiązuje Rozporządzenie Parlamentu Europejskiego i Rady (UE) 2016/679 (określane jako "RODO"). W związku z tym chcielibyśmy poinformować o przetwarzaniu Twoich danych oraz zasadach, na jakich odbywa się to po dniu 25 maja 2018 roku.

Kto będzie administratorem Twoich danych?

Administratorami Twoich danych będzie Wirtualna Polska Media Spółka Akcyjna z siedzibą w Warszawie, oraz pozostałe spółki z grupy Wirtualna Polska, jak również nasi Zaufani Partnerzy, z którymi stale współpracujemy. Szczegółowe informacje dotyczące administratorów znajdują się w polityce prywatności.

O jakich danych mówimy?

Chodzi o dane osobowe, które są zbierane w ramach korzystania przez Ciebie z naszych usług, portali i serwisów internetowych udostępnianych przez Wirtualną Polskę, w tym zapisywanych w plikach cookies, które są instalowane na naszych stronach przez Wirtualną Polskę oraz naszych Zaufanych Partnerów.

Dlaczego chcemy przetwarzać Twoje dane?

Przetwarzamy je dostarczać coraz lepsze materiały redakcyjne, dopasować ich tematykę do Twoich zainteresowań, tworzyć portale i serwisy internetowe, z których będziesz korzystać z przyjemnością, zapewniać większe bezpieczeństwo usług, udoskonalać nasze usługi i maksymalnie dopasować je do Twoich zainteresowań, pokazywać reklamy dopasowane do Twoich potrzeb. Szczegółowe informacje dotyczące celów przetwarzania Twoich danych znajdują się w polityce prywatności.

Komu możemy przekazać dane?

Twoje dane możemy przekazywać podmiotom przetwarzającym je na nasze zlecenie oraz podmiotom uprawnionym do uzyskania danych na podstawie obowiązującego prawa – oczywiście tylko, gdy wystąpią z żądaniem w oparciu o stosowną podstawę prawną.

Jakie masz prawa w stosunku do Twoich danych?

Masz prawo żądania dostępu, sprostowania, usunięcia lub ograniczenia przetwarzania danych. Możesz wycofać zgodę na przetwarzanie, zgłosić sprzeciw oraz skorzystać z innych praw wymienionych szczegółowo w polityce prywatności.

Jakie są podstawy prawne przetwarzania Twoich danych?

Podstawą prawną przetwarzania Twoich danych w celu świadczenia usług jest niezbędność do wykonania umów o ich świadczenie (tymi umowami są zazwyczaj regulaminy). Podstawą prawną przetwarzania danych w celu pomiarów statystycznych i marketingu własnego administratorów jest tzw. uzasadniony interes administratora. Przetwarzanie Twoich danych w celach marketingowych realizowanych przez Wirtualną Polskę na zlecenie Zaufanych Partnerów i bezpośrednio przez Zaufanych Partnerów będzie odbywać się na podstawie Twojej dobrowolnej zgody.