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 |
W celu wykonania tego zadania należy się dobrać w zespoły dwuosobowe.
Należy skonfigurować sieć VPN między dwoma komputerami z wykorzystaniem mechanizmu współdzielonego klucza. Następnie zaś skonfigurować zaporę na komputerze klienta VPN, tak aby wychodził z niego wyłącznie ruch VPN.
Należy zapisać wszystkie polecenia i opcje konfiguracji w pliku tekstowym, będzie on częścią rozwiązania. Sprawdzający zapewne będzie wymagał także prezentacji rozwiązania.
W celu wykonania tego zadania należy się dobrać w zespoły dwuosobowe.
Należy skonfigurować sieć VPN między dwoma komputerami z wykorzystaniem certyfikatów. Następnie zaś skonfigurować zaporę na komputerze klienta VPN, tak aby wychodził z niego wyłącznie ruch VPN, a na serwerze tak, żeby wszystkie połączenia przez VPN były logowane.
Należy zapisać wszystkie polecenia i opcje konfiguracji w pliku tekstowym, będzie on częścią rozwiązania. Sprawdzający zapewne będzie wymagał także prezentacji rozwiązania.
Zadanie zaliczeniowe wykonaj w parach i używając 2 komputerów. Jeden z komputerów skonfiguruj jako serwer VPN; drugi jako klient VPN. Tunel może wykorzystać te same adresy IP co w ćwiczeniach (10.0.0.1 i 10.0.0.2).
Do wygenerowania certyfikatów wykorzystaj skrypty z /usr/share/doc/openvpn/examples/easy-rsa/2.0
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 odpowiednie certyfikaty z keys/ do katalogów /etc/openvpn na vpn-server i vpn-client. (uwaga: to które pliki gdzie skopiować to już część zadania)
Napisz plik konfiguracyjny dla serwera i klienta; plik umieść w /etc/openvpn.
Skonfiguruj openvpn tak, by korzystało z certyfikatów do wzajemnej autoryzacji klienta i serwera.
Dodatkowo, uwzględnij następujące opcje
Skonfiguruj openvpn tak, by można było go uruchomić na kliencie i na serwerze przez standardowy skrypt startowy ( /etc/init.d/openvpn start )
Skonfiguruj maszyny serwera i klienta tak, aby cały ruch sieciowy klienta przechodził przez łącze VPN.
Zadanie zaliczeniowe wykonaj w parach i używając 2 komputerów. Należy skonfigurować sieć VPN między dwoma komputerami (klient-serwer) z wykorzystaniem certyfikatów oraz ustalić odpowiednie reguły zapory sieciowej. Pliki konfiguracyjne dla klienta i serwera napisz uwzględniając następujące opcje:
Skonfiguruj openvpn tak, by można było go uruchomić na kliencie i na serwerze przez standardowy skrypt startowy (/etc/init.d/openvpn start). Logi openvpn powinny być zapisywane do pliku /var/log/openvpn.log
Zadanie zaliczeniowe wykonaj w parach używając dwóch komputerów. Skonfiguruj sieć VPN między dwoma komputerami (apache i bramka) z wykorzystaniem certyfikatów oraz ustal odpowiednie reguły zapory sieciowej. Pliki konfiguracyjne dla bramki i serwera napisz uwzględniając następujące opcje:
Następnie skonfiguruj routing w następujący sposób:
Skonfiguruj firewall na bramce w następujący sposób:
1. VPN (praca w parach)
Bazując na uzyskanej wiedzy o konfiguracji VPN, skonfiguruj serwer OpenVPN oraz
klienta, tak aby było możliwe połączenie sieciowe przez uzyskany tunel.
Przedstaw zalety oraz wady własnego rozwiązania i skonfigurowanych
parametrów połączenia.
2. Firewall (indywidualnie)
Za pomocą iptables skonfiguruj zaporę chroniącą lokalną stację roboczą/serwer
tak aby:
Zezwalać na dowolne połączenia wychodzące.
Zezwalać na połączenia przychodzące tylko pod warunkiem, że sami je inicjujemy.
Zezwalać na przychodzące połączenia inicjujące tylko na porty 443, 80 i 22
(na serwerze utrzymujemy serwery ssh oraz http, więc klienci muszą mieć dostęp).
Wpuszczać żądania echa ICMP.
Ograniczyć liczbę połączeń inicjujących przychodzących do portu 22 do 3 na minutę
z jednego źródłowego adresu IP.
Zadbać o interfejs loopback.
Przygotować regułę/reguły firewalla umożliwiające uruchomienie podstawowego serwera DNS.
Blokować wszystkie inne połączenia przychodzące.
Należy sprawdzić szczelność firewalla przedstawiając proponowane metody
testowania i ich wyniki.
1. VPN (praca w parach)
Bazując na uzyskanej wiedzy o konfiguracji VPN, skonfiguruj serwer OpenVPN oraz
klienta, tak aby było możliwe połączenie sieciowe przez uzyskany bezpieczny tunel.
Przedstaw zalety oraz wady własnego rozwiązania i skonfigurowanych
parametrów połączenia.
2. Firewall (indywidualnie)
Za pomocą iptables skonfiguruj zaporę chroniącą lokalną stację roboczą/serwer
tak aby:
Zezwalać na dowolne połączenia wychodzące.
Zezwalać na połączenia przychodzące tylko pod warunkiem, że sami je inicjujemy.
Zezwalać na przychodzące połączenia inicjujące tylko na porty 80, 9000-9010.
(Dla celów testowania na serwerze powinny być uruchomione serwery ssh oraz http).
Wpuszczać żądania echa ICMP.
Zezwalać na połączenia inicjujące ssh tylko z podsieci BSK lab.
Ograniczyć liczbę połączeń inicjujących przychodzących do portu 22 do 10 na minutę
z jednego źródłowego adresu IP.
Zadbać o interfejs loopback.
Przygotować regułę/reguły firewalla umożliwiające uruchomienie podstawowego serwera DNS.
Blokować wszystkie inne połączenia przychodzące.
Sprawdź szczelność firewalla za pomocą nmapa przedstawiając proponowane metody
testowania. Porównaj wyniki testów dla portu 22 i 9000.
Zadanie
1. Napisać skrypt tworzący indywidualne certyfikaty dla użytkowników serwera OpenVPN. Dane wejściowe: imię i nazwisko użytkownika oraz jego adres email (imienia i nazwiska należy użyć jako CN w generowanym certyfikacie). Wcześniej trzeba oczywiście zadbać o utworzenie CA na potrzeby VPN.
2. Napisać skrypt tworzący listę odwołanych certyfikatów dla użytkowników, którzy mają utracić dostęp. Uwzględnić listę CRL w konfiguracji serwera VPN.
3. Skonfigurować serwer OpenVPN oparty o transport tcp i ww. certyfikaty wraz z uwzględnieniem CRL.
4. Skonfigurować klienta OpenVPN tak, aby użytkownik mógł się połączyć z serwerem za pomocą swojego certyfikatu.
5. Na serwerze skonfigurować firewalla tak, aby można było wykonywać połączenia przychodzące jedynie do portu OpenVPN tcp tylko z podsieci 192.168.0.0/16.
Zadanie zaliczeniowe można wykonać w parach, ponieważ używamy dwóch komputerów: serwera i bramki.
Na komputerze serwera:
1. Uruchom serwer www nasłuchujący na standardowym porcie (80).
2. Ustaw reguły w jego zaporze tak, żeby wpuszczały tylko ruch przychodzący
z bramki.
Skonfiguruj sieć VPN między dwoma komputerami serwer i bramka z wykorzystaniem
certyfikatów. Openvpn można uruchomić na obu komputerach przez standardowy
skrypt startowy (/etc/init.d/openvpn start).
Logi openvpn powinny być zapisywane do pliku /var/log/openvpn.log,
komunikacja odbywać ma się za pośrednictwem protokołu TCP.
Tunel VPN powinien używać adresów 10.x.0.1 i 10.x.0.2 gdzie x czwartą
częścią adresu IP serwera (np. 192.12.14.15 będzie x=15).
Tylko komputery bramka i serwer (możesz je nazwać) mogą korzystać z tunelu.
Następnie skonfiguruj routing w następujący sposób:
Uwaga: osoby robiące to zadanie na komputerach w laboratorium mogą je robić w parach na dwóch ,,sąsiednich'' komputerach.
Księgarnia Radagast posiada serwer www nasłuchujący na standardowym porcie (80). W ostatnim okresie odnotowano jednak próby ataków na tę maszynę, także z użyciem innych portów.
Ponadto obaj menedżerowie od czasu do czasu łączą się z siecią księgarni ze swoich komputerów domowych. Również w tym przypadku odnotowano próby podszywania się.
Postanowiono, że komunikacja ze światem zewnętrznym będzie odbywała się przez zaporę (firewall).
Serwer WWW będzie nasłuchiwał na porcie 8080. Zapora każdy pakiet skierowany na swój port 80 przekieruje do serwera WWW. Serwer WWW będzie znajdował się w ,,strefie zdemilitaryzowanej'' -- osobnej podsieci połaczonej z resztą sieci wewnętrznej firmy przez zaporę.
Dla komputerów menedżerów postanowiono użyć OpenVPN.
Twoim zadaniem jest realizacja tych zamierzeń. Dla projektu pilotowego będziesz potrzebował:
Serwer WWW i maszyna robocza mają mieć adresy w sieci wewnętrznej 192.12.14.0/24. Zapora powinna posiadać dwa interfejsy, jeden do sieci wewnętrznej, drugi ,,publiczny'' (w naszym przypadku adresy publiczne będą w sieci 172.16.0.0/16). Nie robimy osobnej podsieci dla strefy zdemilitaryzowanej, bo wymagałoby to trzeciego interfejsu zapory (lub rutera/przełącznika).
Przekieruj wszystkie odwołania do portu 80 zapory do portu 8080 serwera WWW. Nie zapomnij włączyć IP forwarding. Nie należy zezwalać na łączenie się serwera WWW z innymi komputerami sieci wewnętrznej i odwrotnie (przejście będzie otwierane tylko okresowo w razie potrzeby, ale tym się nie zajmujemy).
Skonfiguruj sieć VPN między komputerami zapory i menadżera z wykorzystaniem certyfikatów. Openvpn można uruchomić na obu komputerach przez standardowy skrypt startowy (/etc/init.d/openvpn start).
Ruch sieciowy między komputerem menadżera i zaporą ma się odbywać się wyłącznie po VPN.
Logi openvpn powinny być zapisywane do pliku /var/log/openvpn.log, komunikacja odbywać ma się za pośrednictwem protokołu TCP. Zapisuj do logu informacje o odrzuconych pakietach.
Jak zwykle należy zapisać wszystkie polecenia i opcje konfiguracji w pliku tekstowym wysłanym do Moodle, będzie on częścią rozwiązania. Oczywiście sprawdzający będzie wymagał prezentacji rozwiązania w laboratorium.
Green Forest Bank posiada serwer WWW nasłuchujący na standardowym
porcie (80). W ostatnim okresie odnotowano jednak próby ataków na tę
maszynę, także z użyciem innych portów.
Ponadto dyrektorzy od czasu do czasu łączą się z siecią banku ze
swoich komputerów domowych. Również w tym przypadku odnotowano próby
podszywania się.
Postanowiono, że komunikacja ze światem zewnętrznym będzie odbywała się
przez zaporę (firewall).
Serwer WWW będzie nasłuchiwał na porcie 8000. Zapora każdy pakiet
skierowany na swój port 80 przekieruje do serwera WWW. Serwer WWW
będzie znajdował się w ,,strefie zdemilitaryzowanej'' -- osobnej
podsieci połaczonej z resztą sieci wewnętrznej firmy poprzez zaporę.
Dla komputerów dyrektorów postanowiono użyć OpenVPN.
Twoim zadaniem jest realizacja tych zamierzeń. Dla projektu pilotowego
będziesz potrzebował:
Serwer WWW i maszyna robocza mają mieć adresy w sieci wewnętrznej
172.16.12.0/23. Zapora powinna posiadać dwa interfejsy, jeden do sieci
wewnętrznej, drugi ,,publiczny'' (w naszym przypadku adresy publiczne
będą w sieci 10.32.0.0/16). Nie robimy osobnej podsieci dla strefy
zdemilitaryzowanej, bo wymagałoby to trzeciego interfejsu zapory (lub
rutera/przełącznika).
Przekieruj wszystkie odwołania do portu 80 zapory do portu 8000 serwera
WWW. Nie zapomnij włączyć IP forwarding. Nie należy zezwalać na
łączenie się serwera WWW z innymi komputerami sieci wewnętrznej
i odwrotnie (przejście będzie otwierane tylko okresowo w razie
potrzeby, ale tym się nie zajmujemy).
Skonfiguruj sieć VPN między komputerami zapory i menadżera z wykorzystaniem
certyfikatów. OpenVPN można uruchomić na obu komputerach przez standardowy
skrypt startowy (/etc/init.d/openvpn start).
Ruch sieciowy między komupterem menadżera i zaporą ma się odbywać się
wyłącznie po VPN.
Logi OpenVPN powinny być zapisywane do pliku /var/log/vpn.log,
komunikacja odbywać ma się za pośrednictwem protokołu TCP.
Zapisuj do logu informacje o odrzuconych pakietach.
Należy zapisać wszystkie polecenia i opcje konfiguracji w pliku tekstowym
wysłanym do Moodle, będzie on częścią rozwiązania. Oczywiście sprawdzający
będzie wymagał prezentacji rozwiązania w laboratorium.