Techinka: Konfiguracja systemu Vyatta w ćwiczeniach Autor: Łukasz Łaciak | Data: 09/06/11
|
|
9. Firewall.
Firewall, czyli zapora sieciowa ma za zadanie zapobiegać włamaniom do systemów komputerowych, chronić przed różnymi atakami, również tymi mającymi za zadanie przeciążyć system lub urządzenie oraz filtrować ruch w poszukiwaniu innych zagrożeń i reagować na nie.
Zapora w systemie Vyatta jest oparta o filtr pakietów - każdy pakiet przechodzący przez określony interfejs jest przypasowywany do reguł w ustalonej kolejności. Gdy pakiet będzie odpowiadał regule, wykonywana jest określona akcja, gdy nie będzie pasował, podejmowana jest akcja domyślna, która jest określona na drop [Obraz 9-1].
Obraz 9-1: Podejmowanie decyzji przez zaporę
Jest kilka akcji do wyboru, w systemie Vyatta są to:
- Accept - pakiet jest przepuszczany przez interfejs.
- Drop - pakiet jest odrzucany.
- Reject - pakiet jest odrzucany, resetuje połączenie TCP.
- Inspect - pakiet jest przekazywany do inspekcji IPS (ang. Intrusion Prevention System).
Akcja reject różni się od drop tym, że resetuje połączenie TCP, a to daje sygnał nadawcy wiadomości, że jego pakiet został odrzucony, co jest często niepożądane. Bezpieczniej jest, aby myślał, że pakiet nie dotarł do nikogo; wtedy firewall nie zostaje narażony na atak. Należy pamiętać aby nie zostawić żadnej pustej reguły z akcją accept, ponieważ system potraktuje to jako zezwolenie na wpuszczenie każdego pakietu.
W systemie Vyatta można zdefiniować kilka instancji firewalla, z których na każdy interfejs można ustawić 3, w różnych kierunkach:
- In - jest to ruch przychodzący, ale nie skierowany do routera na którym jest firewall.
- Out - ruch wychodzący, ale nie pochodzący od routera.
- Local - ruch przychodzący, skierowany do routera.
Każdy pakiet może mieć określony stan:
- NEW -pakiet, który nie był wcześniej zaobserwowany przez jądro systemu.
- ESTABLISHED - połączenie ustanowione. Znane pakiety UDP i ICMP także są oznaczane tym stanem, mimo, że należą do protokołów bezpołączeniowych.
- RELATED - połączenie powiązane. Są to pakiety obsługujące połączenie będące w stanie ESTABLISHED. Może być na przykład częścią połączenia FTP, które działa na kilku portach.
- INVALID - pakiet niezidentyfikowany lub niepoprawny.
Firewall konfigurowany w niniejszym ćwiczeniu jest to tylko przykładową, podstawową zaporą z odblokowanymi usługami, które akurat były potrzebne. Ukazuje możliwości oraz sposób konfiguracji w systemie Vyatta. Nie zabezpiecza komputerów przed wszystkimi atakami!
9.1. Topologia.
Obraz 9-1: Topologia sieci użytej w zadaniu
Komputer Host działa pod kontrolą systemu Vyatta, natomiast Host WIN pod kontrolą systemu Windows XP.
9.2. Przygotowanie wirtualnych sieci.
Przy nowej topologii muszą także zajść zmiany w konfiguracji wirtualnych sieci. Poniżej zostały wypisane interfejsy maszyn oraz odpowiadające im sieci.
R1:
eth0 - NAT (VMnet8)
eth1 - VMnet2
Host:
eth0 - VMnet2
Host WIN:
Karta Ethernet - VMnet2
9.3. Cel oraz założenia.
Celem tego zadania jest nauka konfiguracji zapory sieciowej z mieszanymi scenariuszami zagrożeń.
Aby móc w pełni wykorzystać to ćwiczenie, niezbędna jest przynajmniej podstawowa wiedza z zakresu funkcjonowania protokołów sieciowych takich jak: TCP, IP, UDP, DNS, HTTP, HTTPS, ARP, ICMP oraz SSH. Przydatna może okazać się także wiedza z poprzednich ćwiczeń.
9.4. Konfiguracja.
Na początek, poleceniem 'load', należy załadować konfigurację zapisaną w ćwiczeniu "5. Routing statyczny", a następnie poprawić część konfiguracji.
Host:
delete interfaces
set interfaces ethernet eth0 address 10.50.0.2/28
set system gateway-address 10.50.0.1
commit
Analogicznie, na komputerze Host WIN należy wprowadzić adres 10.50.0.3.
W tym miejscu należy zapisać konfigurację poleceniem 'save', ponieważ będzie ona przydatna jako konfiguracja bazowa w następnych ćwiczeniach.
Aby zacząć konfigurować poszczególne reguły firewalla, najpierw trzeba określić co należy blokować lub odblokować oraz na jakim porcie dany ruch jest przesyłany. Za przykład niech posłuży obraz 9-2. Tym razem dane będą podglądane za pomocą innego snifferera, o nazwie Tcpdump, który został wywołany poleceniem 'sudo tcpdump -i eth1'.
Obraz 9-2: Ruch HTTP oraz ARP na routerze R1
Na obrazie tym widoczne są pakiety HTTP oraz ARP przesyłane z komputera Host WIN (10.50.0.3) oraz do niego. To co interesuje w nim najbardziej, to porty po jakich się poruszają. Po adresie komputera lub nazwie domeny jest określony port, przykładowo linia z danymi "www-12-02.snc5.facebook.com.www > 10.50.0.3.1732" informuje o przesłaniu pakietu z domeny facebook.com na porcie protokołu HTTP (o czym informuje port ".www", czyli 80) do komputera Host na port 1732, więc portem źródłowym będzie 80, a docelowym 1732.
Przy wpisywaniu pierwszej reguły, dany firewall będzie miał określoną domyślną politykę na "drop", więc jeśli pakiet nie będzie pasował do żadnej z nich, zostanie odrzucony. Gdy, po zaznajomieniu się z ruchem przesyłanym przez komputer R1, wiadomo już jake protokoły i porty należy odblokować, można przystąpić do konfiguracji. Na początek niech odblokowany zostanie protokół HTTP (protokół TCP, port 80), aby na komputerach Host oraz Host WIN można było surfować po Internecie, lecz żeby stało się to możliwe, konieczne jest odblokowanie usługi DNS, która działa w protokole UDP na porcie 53.
Dobrym zwyczajem jest zostawianie odstępu liczbowego między regułami na wypadek konieczności dopisania w późniejszym terminie innej, gdzieś pomiędzy.
Składnia użytych poleceń:
- 'set firewall name < nazwa> rule < numer> action accept' - określa nazwę firewalla, numer reguły oraz akcję jaka ma zostać podjęta.
- 'set firewall name < nazwa> rule < numer> source port < adres>' -definiuje port pochodzenia pakietu dla określonej reguły. Port może być nazwą, numerem lub zakresem. Można także użyć odwrotności oraz wpisywać porty w liście, oddzielone przecinkami.
- 'set firewall name < nazwa> rule < numer> protocol udp' - określa protokół paketu.
- 'set interfaces ethernet < interfejs> firewall out name < nazwa>' - przypisuje firewall o określonej nazwie do danego interfejsu jako "out".
R1:
set firewall name FIREWALL-OUT rule 10 action accept
set firewall name FIREWALL-OUT rule 10 protocol udp
set firewall name FIREWALL-OUT rule 10 source port 53
set firewall name FIREWALL-OUT rule 20 action accept
set firewall name FIREWALL-OUT rule 20 protocol tcp
set firewall name FIREWALL-OUT rule 20 source port 80
set interfaces ethernet eth1 firewall out name FIREWALL-OUT
commit
Jednak po wykonaniu tych kroków, nie wszystkie strony będą się ładować. Problemy będą dotyczyć stron łączących się poprzez protokół HTTPS, ponieważ wykorzystuje on do zapewnienia bezpieczeństwa transmisji protokół SSL, działający porcie 443 protokołu TCP, który nadal jest blokowany [Obraz 9-3].
Obraz 9-3: Zablokowany protokół HTTPS
W celu odblokowania, należy wpisać do konfiguracji poniższe linie. Teraz już nie trzeba przypisywać firewalla do interfejsu, ponieważ nadal ma działać w tym miejscu i w ten sposób, a tylko zakres jego pracy jest zmieniany.
R1:
set firewall name FIREWALL-OUT rule 30 action accept
set firewall name FIREWALL-OUT rule 30 protocol tcp
set firewall name FIREWALL-OUT rule 30 source port 443
commit
Program ping z wewnątrz nie osiągnie żadnego zewnętrznego celu, a traceroute zatrzyma się na routerze R1, ponieważ blokowane są pakiety protokołu ICMP, z których te programy korzystają [Obraz 9-4].
Obraz 9-4: Próba kontaktu poprzez ping i traceroute
Jako, że mogą się przydać w celu diagnostycznym, można je odblokować, jednak zostanie to zrobione tylko dla komputera Host, maszyna Host WIN powinna nadal nie mieć możliwości odbierania pakietów ICMP.
Składnia użytych poleceń:
- 'set firewall name < nazwa> rule < numer> icmp type-name echo-reply' -definiuje adres pochodzenia pakietu dla określonej reguły. Adres może być adresem komputera, sieci lub zakresem. Można także użyć odwrotności oraz wpisywać porty w liście, oddzielone przecinkami.
- 'set firewall name < nazwa> rule < numer> destination address < adres>' - określa adres docelowy. Adres może być adresem IP, adresem sieci lub zakresem. Można użyć także odwrotności.
R1:
set firewall name FIREWALL-OUT rule 40 action accept
set firewall name FIREWALL-OUT rule 40 protocol icmp
set firewall name FIREWALL-OUT rule 40 icmp type-name echo-reply
set firewall name FIREWALL-OUT rule 40 destination address 10.50.0.2
commit
Efekt został osiągnięty, lecz w trochę niewłaściwy sposób. Pakiety ICMP będą nadal wysyłane przez maszynę Host WIN oraz odbierane przez komputer docelowy, co udowadnia Tshark działający na interfejsie eth0 routera R1 [Obraz 9-5], lecz pakiety Echo Reply nie wrócą, ponieważ będą blokowane na interfejsie eth1. Aby niepotrzebnie nie generować ruchu, pakiety ICMP Echo Request powinny być wycięte na interfejsie eth1 komputera R1, ale w kierunku "in". Całą operacją pokazuje kolejny przykład.
Obraz 9-5: Przepływ pakietów ICMP przez interfejs eth0 routera R1
Patrząc na powyższy obraz może dziwić adres 192.168.223.3 zamiast 10.50.0.3. Przypominając zasadę działania maskarady (NAT): pakiety kierowane z komputera Host WIN (10.50.0.3), są maskowane przez adres interfejsu eth0 maszyny R1 (192.168.223.3), więc wracając, zachodzi sytuacja odwrotna i adresy są z powrotem tłumaczone na poprawne.
Aby było bardziej elegancko, zostanie usunięta część reguły nr 40, zezwalająca tylko na adres 10.50.0.2, więc odblokowane zostaną wszystkie pakiety powrotne, czyli Echo Reply. Odwrotnie niż w firewallu w kierunku "out", w tym domyślną akcją będzie akceptacja pakietów, a zablokowane zostaną tylko pakiety ICMP Echo Request kumputera Host WIN.
R1:
delete firewall name FIREWALL-OUT rule 40 destination
set firewall name FIREWALL-IN default-action accept
set firewall name FIREWALL-IN rule 10 action drop
set firewall name FIREWALL-IN rule 10 protocol icmp
set firewall name FIREWALL-IN rule 10 icmp type-name echo-request
set firewall name FIREWALL-IN rule 10 source address 10.50.0.3
set interfaces ethernet eth1 firewall in name FIREWALL-IN
commit
Po wykonaniu powyższych operacji, pakiety ping docierające do routera R1 z komputera Host WIN będą odrzucane od razu na interfejsie eth1, a przy tym nie będzie konieczności dublowania reguł zezwalających na określony ruch w kierunku "in", dzięki domyślnej akcji określonej na akceptację.
Przydatny może się okazać także bezpieczny protokół SSH, który można wykorzystać w celu zdalnego logowania do komputera lub przesyłania danych. Zostanie on odblokowany tylko dla maszyny Host, a żeby użyć go w systemie Vyatta, trzeba uruchomić daemona SSH.
R1:
set service ssh
set firewall name FIREWALL-OUT rule 50 action accept
set firewall name FIREWALL-OUT rule 50 protocol tcp
set firewall name FIREWALL-OUT rule 50 destination port 22
set firewall name FIREWALL-OUT rule 50 destination address 10.50.0.2
commit
Obraz 9-6 przedstawia logowanie do Hosta z komputera fizycznego przy pomocy programu Putty. Aby przeprowadzić takie logowanie lub w jakikolwiek inny sposób osiągnąć maszynę Host z komputera fizycznego, niezbędne jest dodanie następującego wpisu routingu na nim: 'route add 10.50.0.0 mask 255.255.255.240 192.168.223.3'.
Obraz 9-6: Logowanie do komputera Host przy pomocy Putty
Komputery w sieci działają z wyznaczonymi usługami i są zabezpieczane na wypadek niepowołanego dostępu, jednak nadal nie są bezpieczne. Aby podnieść poziom bezpieczeństwa, zostaną zablokowane pakiety o stanie NEW z flagą TCP inną niż SYN, co zostanie dopisane jako pierwsza reguła w firewallu, ponieważ pakiety te mogą nieść potencjalne zagrożenie i muszą być wykluczone zanim któraś z następnych reguł je dopuści. Dodatkowo zostaną dopisane połączenia oznaczone jako ESTABLISHED i RELATED, gdyż są to połączenia nawiązane z maszyn wewnątrz sieci. Zostaną one dodane na koniec, aby dopuszczane były tylko pakiety sprawdzone już przez poprzednie reguły.
Składnia użytych poleceń:
- 'set firewall name < nazwa> rule < numer> state new enable' - określa stan filtrowanych pakietów.
- 'set firewall name < nazwa> rule < numer> tcp flags !SYN' -definiuje ustawione flagi pakietu. Mogą być odwrotnością.
R1:
set firewall name FIREWALL-OUT rule 5 action drop
set firewall name FIREWALL-OUT rule 5 protocol tcp
set firewall name FIREWALL-OUT rule 5 state new enable
set firewall name FIREWALL-OUT rule 5 tcp flags !SYN
set firewall name FIREWALL-OUT rule 60 action accept
set firewall name FIREWALL-OUT rule 60 protocol tcp
set firewall name FIREWALL-OUT rule 60 state established enable
set firewall name FIREWALL-OUT rule 60 state related enable
commit
Lokalnie, router R1 również musi być zabezpieczony, dlatego dla niego też będzie działał firewall z domyślną akcją odrzucania pakietów. A potrzebne do jego funkcjonowania usługi należy odblokować. Oczywiście na początek trzeba dać mu dostęp do usługi DNS, a także umożliwić wysyłanie pakietów ICMP Echo Reply oraz odbieranie pakietów Echo Request, jednak, aby zapobiec powodzi pakietów ICMP (ang. ping flood), mogącej zapchać łącze lub przeciążyć słaby router, należy ograniczyć ich ilość w danym okresie czasowym. Dodatkowo odbieranie pakietów ICMP Echo Request będzie logowane do pliku.
Składnia użytych poleceń:
- 'set firewall name < nazwa> rule < numer> limit rate 2/second' - określa ilość przyjmowanych zapytań w czasie.
- 'set firewall name < nazwa> rule < numer> burst < liczba>' -definiuje maksymalną ilość zapytań w serii na okres czasu określony poprzednim poleceniem.
R1:
set firewall name FIREWALL-LOCAL rule 10 action accept
set firewall name FIREWALL-LOCAL rule 10 protocol udp
set firewall name FIREWALL-LOCAL rule 10 source port 53
set firewall name FIREWALL-LOCAL rule 20 action accept
set firewall name FIREWALL-LOCAL rule 20 protocol icmp
set firewall name FIREWALL-LOCAL rule 20 icmp type-name echo-reply
set firewall name FIREWALL-LOCAL rule 30 action accept
set firewall name FIREWALL-LOCAL rule 30 protocol icmp
set firewall name FIREWALL-LOCAL rule 30 icmp type-name echo-request
set firewall name FIREWALL-LOCAL rule 30 limit rate 2/second
set firewall name FIREWALL-LOCAL rule 30 limit burst 3
set firewall name FIREWALL-LOCAL rule 30 log enable
set interfaces ethernet eth0 firewall local name FIREWALL-LOCAL
commit
Podgląd pliku log można uruchomić wpisując polecenie 'show log' w trybie operacyjnym. Aby obejrzeć tylko końcową część należy wpisać 'show log tail'. W podglądzie można oglądać na żywo dodawane wpisy, a aby wyjść z niego, należy nacisnąć klawisze "CTRL + C", a następnie "Q". Na obrazie 9-7 pokazany jest wynik działania tego polecenia - odebrane zostały 4 pakiety od komputera fizycznego.
Obraz 9-7: Pakiety ICMP zapisane w pliku log
Z protokołów odblokowany zostanie jeszcze tylko SSH oraz dodane będzie zabezpieczenie takie jak w przypadku sieci, tj. blokowanie pakietów NEW ze stanem innym niż SYN oraz dopuszczone zostaną połączenia oznaczone jako ESTABLISHED i RELATED.
R1:
set firewall name FIREWALL-LOCAL rule 40 action accept
set firewall name FIREWALL-LOCAL rule 40 protocol tcp
set firewall name FIREWALL-LOCAL rule 40 destination port 22
set firewall name FIREWALL-LOCAL rule 5 action drop
set firewall name FIREWALL-LOCAL rule 5 protocol tcp
set firewall name FIREWALL-LOCAL rule 5 state new enable
set firewall name FIREWALL-LOCAL rule 5 tcp flags !SYN
set firewall name FIREWALL-LOCAL rule 50 action accept
set firewall name FIREWALL-LOCAL rule 50 protocol tcp
set firewall name FIREWALL-LOCAL rule 50 state established enable
set firewall name FIREWALL-LOCAL rule 50 state related enable
commit
W trybie operacyjnym w każdej chwili poleceniem 'show firewall' można wyświetlić stan firewalla. Na obrazie 9-8 jest pokazany stan firewalla lokalnego dla komputera R1
Obraz 9-8: Stan firewalla
Stan z detalami można wyświetlić poleceniem 'show firewall detail' w trybie operacyjnym lub podejrzeć konfigurację poleceniem 'show firewall' w trybie konfiguracyjnym.
Tak skonfigurowany firewall jest już przyzwoitym zabezpieczeniem, lecz nadal nie idealnym. Konfiguracja firewalla może przebiegać latami i zmieniać się w zależności od nowych zagrożeń oraz stanu wiedzy administratora, który go obsługuje.
|