Model połączenia sieci składa się z siedmiu warstw protokołów począwszy od fizycznego łącza, łącza danych, sieci, transportu, sesji, prezentacji i warstwy aplikacji.
Hub
Hub jest najprostszym sposobem łączenia komputerów ze sobą w sieci LAN (local area network). Cokolwiek wysyłane jest do hub’a przez jeden komputer, rozdzielane jest do wszystkich urządzeń podłączonych do sieci LAN. Hub’y nie umożliwiają podłączenia się do sieci wyższego poziomu, tj.: Internet. Obecnie termin hub jest także stosowana do koncentratora USB, który jest używany do łączenia wielu urządzeń peryferyjnych USB do jednego portu USB na komputerze.
Switch (przełącznik)
Switch jest „lepszą wersją” hub’a i obsługuje pakiety informacji oddzielnie do zmniejszenia zatłoczenia komunikacyjnego. Switch sprawdza każdy pakiet informacji, który jest do niego wysyłany i kieruje tylko ten pakiet informacji, który jest przeznaczony do danego komputera. Podobnie do hub’a, switch jest przeznaczony tylko do zapewnienia komunikacji w sieci LAN, bez możliwości połączenia z siecią globalną WAN (wide area network), tj.: Internet. Swicth operuje na ramkach ethernetowych.
Router
Router to krok w górę od switch’a. Wykonuje on tę samą funkcję co switch. Jednakże, również umożliwia połączenie z siecią wyższego rzędu. Router to urządzenie, które łączy razem sieci i kieruje ruchem między nimi. W domu oznacza to zazwyczaj, że router łączy wewnętrzną sieć lokalną z siecią dostawcy Internetu. Router posiada "tablice do trasowania/rutingu", które definiują gdzie skierować pakiet (na podstawie docelowego adresu ip, a dokładniej jego prefiksu, czyli adresu sieci).
Przełączniki (switche) zwykle działają na warstwach fizycznych i łącza danych, ponieważ łączą urządzenia w sieci.
Routery z drugiej strony komunikują się z innymi sieciami; Dlatego potrzebuje bardziej złożonej formy adresowania. Router działa w warstwie sieciowej modelu OSI.
Zainstaluj u siebie na komputerze Virtual Box lub uruchom na wydziałowym komputerze na systemie Linux aplikację Virtual Box.
Pierwszym krokiem przygotowania jest pobranie plików z VirtualBox spod adresu (około 50MB):
Dodajemy maszynę poleceniem Add w programie VirtualBox:
I wybierz plik z rozszerzeniem vbox.
Domyślnie maszyna ma określony adapter sieciowy na NAT na porcie 2222. Oznacza to, że powinna mieć dostęp do internetu przez nasze konto (maszynę gdzie odpalamy VirtualBoxa) oraz jeżeli chcemy możemy się połączyć z nią łącząc się z portem 2222 przez ssh.
W pierwszej kolejności sprawdźmy, czy nasza maszyna wirtualna posiada dostęp do Internetu:
ping onet.pl
Sprawdź adres ip naszej maszyny za pomocą polecenia
ifconfig
W celu szybszego wykonania ćwiczeń będziemy łączyć się do maszyny wirtualnej za pomocą polecenia ssh w terminalu. Maszyna jest bardzo okrojona by bez problemu ruszyła na zdalnych komputerach na naszym wydziale.
Podłączenie przez ssh:
ssh tc@localhost -p 2222
Hasło to: AlaMa1!
Celem jest stworzenie (wirtualnego) Internetu z 3 maszynami wirtualnymi z systemem Linux w ramach VirtualBox przy użyciu sieci wewnętrznej, a także umożliwienie tym maszynom wirtualnym dostępu do rzeczywistego Internetu za pośrednictwem NAT.
Naszym celem jest połączenie clienta znajdującego się w sieci neta z serverem znajdującym się z sieci netb poprzez maszynę działająco jako router. Adresy IP podane są na rysunku. Zwróć uwagę na to, że router ma dwa interfejsy sieciowe, którymi łączy się z odpowiednimi sieciami. Naszym celem jest sprawienie by pakiety clienta przechodząc przez router docierały do servera.
Jeżeli wykonałeś kroki opisane powyżej to masz już dodaną maszynę wirtualną do VirtualBoxa. Stwórz jeszcze dwie kopie maszyny clonując (full clone) maszynę w virtualBox. Nazwij pierwszą maszynę client a kopie server i router.
We wszystkich maszynach zachowamy adaptery sieciowe NAT tak aby mieć dostęp do internetu oraz móc się z nimi połączyć przez SSH na localhost.
Wchodząc w Settings->Network->Advance->Port Forwarding->Host port zmień port dla routera na 3333 oraz servera na 4444.
Kolejnym krokiem jest dodanie dodatkowych adapterów sieciowych dla maszyn tak by mogły komunikować się ze sobą.
Wejdź w Settings->Network->Adapter2 aktywuj go poprzez wybór Enable Network Adapter. Wybierz typ : Internal Network i nazwij go zgodnie z powyżej podanym rysunkiem neta lub netb. Powtórz operacje dla wszystkich maszyn tak by uzyskać ustawienia z rysunku.
Wystartuj wszystkie maszyny (prawym przyciskiem na maszynie i start).
Zadanie (10 pkt)
Podaj nazwy interfejsów sieciowych dostępnych dla każdej maszyny i przypisane im adresy sieciowe (lub podaj że taki adres nie jest przypisany, jeżeli o brak).
Zmień nazwy maszyn na odpowiednio client, server, router.
sudo hostname client
Wyedytuj plik /etc/hosts zmieniając starą nazwę box na nową
sudo nano /etc/hosts
Zadanie (10 pkt)
Wyjaśnij co przechowuje plik /etc/hosts.
Nadaj interfejsom sieciowym adresy IP zgodnie z rysunkiem
sudo ifconfig eth0 192.168.1.11 netmask 255.255.255.0
Zadanie (10 pkt)
Odpowiedz na pytanie: jaki plik w systemie linux odpowiada zazwyczaj (uwaga w TinyCore plik ten nie występuje!) za przechowywanie informacji o interfejsach sieciowych i ich ustawieniach z którego dane odczytywane są przy uruchomieniu systemu.
Wywołaj komendę
route -n
Podaje ona tablicę ścieżek dla zapytań dla określonych pul adresów IP.
Dodaj odpowiedni wpis powodujący że pakiety skierowane do sieci 192.168.0.0 o masce 255.255.0.0 będą kierowane przez clienta do routera (analogicznie dla servera)
Zadanie (20 pkt)
Podaj parametry komendy route które realizują wyżej podany cel.
Zadanie (10 pkt)
Odpowiedz na pytanie dlaczego nie musisz zmieniać tablicy routingu dla routera.
Spróbuj wywołać ping z clienta do routera (na oba adresy).
ping 192.168.1.1
ping 192.168.2.2
Spróbuj wywołać ping z clienta do servera.
ping 192.168.2.22
Zauważ, że pakiety pomiędzy clientem a serverem nie są przesyłane.
Domyślnie systemy Linux nie rutują (trasują) pakietów IP; taka funkcja musi zostać włączona. Aby ją włączyć, wykonaj następujące polecenie:
cat /proc/sys/net/ipv4/ip_forward
Wyedytuj plik /proc/sys/net/ipv4/ip_forward wpisując w nim wartość 1.
Wywołaj ponownie
ping 192.168.2.22
Zauważ, że wartość ttl powinna wynosić 63 co oznacza, że podczas komunikacji pakiet przechodził przez 1 ruter (dla bezpośrednich połączeń wartość wynosi 64).
Sprawdź czy możesz zalogować się z clienta na server
ssh 192.168.2.22
Zapora sieciowa to oprogramowanie blokujące niepowołany dostęp do komputera, na którego straży stoi.
Najczęściej używanymi technikami obrony są:
filtrowanie pakietów, czyli sprawdzanie pochodzenia pakietów i akceptowanie pożądanych (np. SPI),stosowanie algorytmów identyfikacji użytkownika (hasła, cyfrowe certyfikaty),zabezpieczanie programów obsługujących niektóre protokoły (np. FTP, TELNET).
Standardową zaporą sieciową zwarta w większości dystrybucji Linuxa domyślnie jest iptables.
Celem tego ćwiczenia jest zbadanie funkcjonalności iptables, Firewall linuxowego, w prostym ustawieniu sieci.
Zainstaluj iptables na maszynie router:
tce-load -wi iptables
Sprawdź aktualne polityki za pomocą następującego polecenia:
sudo iptables -n -L
Domyślne zasady zapory ogniowej dla każdego łańcucha iptables powinniśmy zdefiniować domyślną politykę, która jest niczym innym jak domyślną regułą, która ma zastosowanie do ruchu, który nie pasuje do żadnej innej reguły. Zalecanym podejściem jest stosowanie polityki obronnej: domyślnie zaprzeczaj, gdy może istnieć pewne ryzyko nadużycia.
Aby to zrobić, przykładowo można wykonać następujące polecenia:
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
Gdzie ACCEPT mówi dopuszczaj pakiety do systemu, DROP mówi odrzucaj pakiety.
Zadanie (10 pkt)
Odpowiedz na pytanie czy client może wykonać ping na adres servera? routera?.
Zadanie (10 pkt)
Podaj przykład poleceń zapory sieciowej akceptujących pakiety typu ping (ICMP) z clienta do servera (ale już nie akceptujących np połączenia ssh):
Elementy komendy:
-A FORWARD : Flaga -A dodaje regułę do końcówki łańcucha. Jest to częścią komendy, która przekazuje Iptables, że chcemy dodać nową regułę, i że chcemy dodać ją do końca łańcucha oraz że łańcuch, na którym chcemy operować, to łańcuch INPUT-p : protokół-j ACCEPT : To precyzuje obiekt docelowy pasujących pakietów. Tutaj mówimy Iptables, że pakiety, które pasują do poprzedzających kryteriów, powinny zostać zaakceptowane i przepchnięte dalej.
Możesz łatwo przekierować ruch przychodzący, wstawiając reguły do łańcucha PREROUTING tabeli nat. Możesz ustawić port docelowy za pomocą celu REDIRECT.
Zadanie (10 pkt)
Podaj komendę iptables przekierowującą dla routera port 8888 na 8000. Stwórz netcatem serwer na routerze na porcie 8000, spróbuj się z nim połączyć clientem w celu sprawdzenia czy reguła działa (uwaga nie zapomnij wcześniej dopuścić ruch z clienta do routera w iptables!).
Nakładką na iptables ułatwiającą użytkownikowi ustawienia firewall w systemie linux jest pakiet ufw (niedostępna niestety dla TinyCore). Możesz o niej poczytać więcej na:
Ustawienia serwera DNS zawarte są w pliku /etc/resolv.conf
Podejrzyj ustawienia:
cat /etc/resolv.conf
Zadanie (10 pkt)
Podaj adresy serverów DNS z których korzystają maszyny.
Przesyłanie rozwiązań zadań:
Wykorzystano materiały z:
https://sandilands.info/sgordon/building-internal-network-virtualbox