Zapora sieciowa ma za zadanie filtrować ruch przychodzący i wychodzący z danego urządzenia sieciowego (na przykład komputera). Dzięki filtrowaniu ruchu możemy zapewniać różnego rodzaju zasady bezpieczeństwa związane z danym urządzeniem sieciowym. Obsługa sieci w Linuksie jest obecnie wbudowana w jądro. Jednym z jej elementów jest netfilter, zestaw modułów do filtrowania pakietów.
Netfilter posiada narzędzia dostępne zewnętrznie, służące do określenia reguł przesyłania pakietów (to nie tylko filtrowania, moga one
być zmienione podczas przechodzenia przez zaporę). Najpopularniejsze to iptables (poprzednio używano ipchains,
ale dokumenty opisujące je należy traktować jako ciekawostkę historyczną). Iptables oparte jest o pojęcie reguły -- przepisu mówiącego,
co należy zrobić z pakietem spełniającym określone warunki. Na przykład reguła
iptables -A FORWARD -i eth0 -p tcp --sport 80 -m string --string '|7F|ELF' -j DROP
zablokuje ładowanie z sieci programów w formacie ELF.
Podstawowa funkcjonalność zapory polega na filtrowaniu pakietów, które przepuszcza tylko te pakiety, które odpowiadają wyznaczonym przez nas zasadom bezpieczeństwa. Pakiety, które nie są przepuszczane mogą być porzucane po cichu lub też odrzucane z komunikatem do nadawcy. W zaporze sieciowej możemy filtrować zarówno ruch przychodzący, jak i wychodzący. Reguły filtrowania mogą być dosyć skomplikowane, w tym mogą uwzględniać stan protokołu, dla którego wykonywane jest filtrowanie.
Kolejną ważną funkcjonalnością zapory jest możliwość wykonywania translacji adresów. Istnieją dwa główne rodzaje translacji adresów:
Uwaga: By korzystać z translacji adresów, zwykle trzeba zezwolić na przekazywanie pakietów ip przez jądro:
echo 1 > /proc/sys/net/ipv4/ip_forward
Jeszcze inną ważną funkcjonalnością jest możliwość modyfikowania różnych fragmentów przechodzących pakietów (w istocie translacja adresów jest też przykładem tego rodzaju funkcjonalności). Dzięki temu możemy pakiety tak modyfikować, że poruszają się po sieci w bardziej regularny lub łatwiej sterowalny sposób.
Często w praktyce administracyjnej przydaje się także możliwość rejestrowania różnego rodzaju sytuacji sieciowych. Zapory pozwalają na śledzenie i rejestrowanie wielu sytuacji. Przydaje się to do optymalizowania ruchu w sieci oraz wykrywania usterek w jej konfiguracji.
Dalsze informacje do przeczytania przed zajęciami:
Wymagania dotyczące poufności, tajemnic produkcyjnych firm oraz konieczność umożliwiania pracownikom pracy zdalnej, w tym z domu, powoduje, że konieczne jest wprowadzanie metod udostępniania sieci wewnętrznej firmy przez szyfrowane kanały. Zwykle praca bezpośrednio za pomocą protokołu SSH jest niewystarczająca, dlatego sięga się po bardziej specjalizowane rozwiązania, takie jak VPN, które pozwalają na przekazywanie szyfrowanym kanałem całego ruchu sieciowego (bez konieczności ustanawiania odrębnych tuneli dla różnych aplikacji oraz bez ograniczenia się do protokołu TCP).
Wśród rozwiązań VPN dostępne są dwa podejścia:
Zasadnicza różnice między tymi dwoma podejściami:
Do tworzenia sieci VPN na bazie protokołu SSL służy OpenVPN.
Do tworzenia sieci VPN na bazie IPsec służy Openswan.
Dalsze informacje do przeczytania przed zajęciami:
Celem ćwiczeń jest budowanie poprawnej konfiguracji VPN krok po kroku.
Załóżmy, że komputer serwera VPN to vpn-server (adres ip ip-server), a klienta to vpn-client (adres ip ip-client).
Będziemy stawiać tunel VPN o adresach 10.0.0.1 (serwer) / 10.0.0.2 (klient)
Na obu komputerach:
apt-get install openvpn
vpn-server# openvpn --ifconfig 10.0.0.1 10.0.0.2 --dev tun
vpn-client# openvpn --ifconfig 10.0.0.2 10.0.0.1 --dev tun --remote 192.168.1.10
Sprawdź, czy serwer nasłuchuje na porcie 1194 (:openvpn):
vpn-server# netstat -l | grep openvpn
Sprawdź, czy jest połączenie po vpn między komputerami:
vpn-client# ping 10.0.0.1
vpn-server# ping 10.0.0.2
Stwórz klucz:
vpn-server# openvpn --genkey --secret vpn-shared-key
Przegraj klucz do komputera klienta:
vpn-server# scp vpn-shared-key root@vpn-client:
Włącz vpn:
vpn-server# openvpn --ifconfig 10.0.0.1 10.0.0.2 --dev tun --secret vpn-shared-key 0
vpn-client# openvpn --ifconfig 10.0.0.2 10.0.0.1 --dev tun --remote ip-server --secret vpn-shared-key 1
Upewnij się, że tunel działa. Sprawdź, czy klient może korzystać z tunelu gdy nie ma klucza.
Do wygenerowania certyfikatów wykorzystaj skrypty z /usr/share/easy-rsa
Ustaw właściciela certyfikatu (zmienne w pliku vars) na PL/Mazowieckie/Warszawa/mimuw-bsk-lab
Następnie wygeneruj certyfikaty dla centrum autoryzacji, klienta i serwera przez:
vpn-server# . vars
vpn-server# ./clean-all
vpn-server# ./build-ca
vpn-server# ./build-dh
vpn-server# ./build-key-server vpn-server
vpn-server# ./build-key vpn-client
Przekopiuj certyfikaty ca.cert, vpn-client.crt i klucz vpn-client.key na vpn-client.
vpn-server# openvpn --dev tun --tls--server --ifconfig 10.0.0.1 10.0.0.2 --ca ca.crt --cert vpn-server.crt --key vpn-server.key --dh dh1024.pem
vpn-client# openvpn --dev tun --tls-client --ifconfig 10.0.0.2 10.0.0.1 --ca ca.crt --cert vpn-client.crt --key vpn-client.key --remote [ip-vpn-server]
Załącznik | Wielkość |
---|---|
Bsi_11_lab.pdf | 353.49 KB |
Bsi_12_lab.pdf | 171.69 KB |