Filtr Pakietów OpenBSD HOWTO Wouter Coene Wersja oryginału: version 20020405.2, generated April 5, 2002

Oryginał tego dokumentu znajduje się pod adresem:

Tłumaczenie: Łukasz Bromirski, l.bromirski@mr0vka.eu.org Wersja tłumaczenia: Wersja 1.3, 2002/09/03 15:04:13

Oryginał tłumaczenia znajduje się pod adresem:

Wprowadzenie

Filtr pakietów OpenBSD ( OpenBSD PF) jest paczką ściany ogniowej potrafiącą śledzić stany połączeń, włączoną jako część kernela OpenBSD od wersji OpenBSD 3.0. Ten dokument opisuje jak uruchomić i zarządzać zestawem reguł PF i mapowań NAT.

Do kogo adresowany jest ten dokument

Dokument ten adresowany jest do administratorów sieci i systemów, z przynajmniej podstawową znajomością sieci i protokołów sieciowych. Wiedza o innych systemach ścian ogniowych nie jest wymagana, ale może pomóc w opanowaniu bardziej skomplikowanych tematów.

Status

Dokument jest ciągle rozbudowywany, więc nie wszystko jeszcze jest opisane.

Na wykonanie czeka: Network Address Translation IPv6 więcej informacji o poleceniu `pfctl' AuthPF Prawa autorskie i licencja

The OpenBSD Packet Filter HOWTO version 20020405.2 Copyright (C) Wouter Coene, 2001, 2002. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. * This software may not be mass-distributed for sale without informing the author at least two weeks in advance. THIS DOCUMENT IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Kontakt z autorem

Możesz skontaktować się z Wouter Coene przez e-mail pisząc na adres wouter[at]inebriated.demon.nl, lub zwykłą pocztą: De Deel 17 3471 EN Kamerik The Netherlands Podstawy ścian ogniowych

Ściana ogniowa ma za zadanie chronić twoją sieć przed potancjalnymi atakami pochodzącymi z innej sieci. Wykonuje to zadanie poprzez sprawdzanie pakietów krążących między tymi dwoma sieciami i ograniczaniu ruchu na podstawie typów, celów a nawet zawartości tych pakietów.

Sekcja ta wyjaśnia jak rozpocząć pracę ze ścianą ogniową przy użyciu PF. Na użytek tej sekcji używać będę firmowej sieci i ściany ogniowej jako przykładu. Sieć jest typową siecią TCP/IP z adresem 260.250.1.0/24. Pod adresem 260.250.1.3 pracuje firmowy serwer WWW, a ściana ogniowa ma dwa interfejsy, xl0 i xl1. Sieć firmowa podłączona jest do interfejsu xl1 a połączenie do internetu do interfejsu xl0.

Podstawy reguł

Komponent PF odpowiedzialny za ścianę ogniową używa zestawu reguł do opisania akcji, które zostaną podjęte w stosunku do określonych pakietów. Reguły te czytane są z pliku i ładowane do kernela OpenBSD przy użyciu komendy `pfctl' ( po więcej informacji dotyczących ładowania zestawu reguł, odsyłam do sekcji ).

Taki plik z regułami może wyglądać tak: block in all pass in all Popatrzmy co się tu dzieje. Pierwsza reguła mówi PF by zablokować wszystkie przychodzące pakiety. W przeciwieństwie do innych ścian ogniowych, PF nie przerywa przeglądania reguł gdy znajdzie pasującą. Zamiast tego, zaznacza to, że pakiet ma być zablokowany, ale przechodzi do następnej reguły.

Następna reguła mówi PF by wpuścić wszystkie przychodzące pakiety skierowane do dowolnego komputera. Ponownie, PF notuje że pakiet ma zostać przepuszczony i przechodzi do następnej reguły.

Ponieważ nie ma już następnej reguł, PF sprawdza co zamierzał zrobić. W tym przypadku, ostatnia pasująca reguła mówiła o przepuszczeniu pakietu, więc dokładnie to robi.

Cóż, nie wygląda to zbyt użytecznie, więc spróbujmy czegoś bardziej interesującego. Zezwólmy na dostęp do firmowego serwera WWW pracującego pod adresem 260.250.1.3. Możesz spróbować czegoś takiego: block in all pass in from any to 260.250.1.3/32 Ponownie, pierwsza reguła mówi PF, że powinien zablokować ten pakiet.

Druga reguła mówi PF żeby przepuścić pakiety, które skierowane są do 260.250.1.3, gdzie `/32' oznacza że PF powinien dopasować adres w pełnym, 32 bitowym zakresie.

Ale co z ruchem powrotnym, mógłbyś spytać. Cóż, jest to raczej proste, po prostu pozwalamy na ruch z 260.250.1.3 wszędzie. block in all pass in from any to 260.250.1.3/32 pass in from 260.250.1.3/32 to any Trochę bardziej zaawansowane zestawy reguł

Przypuścmy że zdecydowano, że kolejny zestaw stron zostanie uruchomiony na firmowym serwerze WWW, ale zawiera delikatne informacje firmowe, więc nie powinien być dostępny z zewnątrz. Serwer ten, w przeciwieństiwe do poprzedniego, uruchomimy na niestandardowym porcie 8000 TCP.

Teraz nie będziesz filtrował tylko na podstawie adresu docelowego, ale również na podstawie portu TCP, by upewnić się że nikt spoza firmowej sieci nie połączy się z portem 8000: block in all pass in proto tcp from any to 260.250.1.3/32 port = 80 pass in proto tcp from 260.250.1.3/32 port = 80 to any Jak widzisz, nie filtrujemy jedynie na podstawie portu, ale wskazujemy również, że przejść mogą pakiety tylko należące do protokołu TCP.

Utrzymywanie stanu/śledzenie połaczeń