5. Reguły firewalla

Większość pracy mamy już za sobą. Pozostało już tylko ustalenie reguł firewalla, po czym będzie można dokonać przeładowania systemu i powinniśmy otrzymać działającego firewalla. Zdaję sobie sprawę, że zbiór reguł zależy od indywidualnych potrzeb, starałem się jednak przygotować reguły odpowiednie dla większości użytkowników łącz komutowanych. Można je oczywiście dostosować samodzielnie, traktując poniższe reguły jako punkt wyjścia. Zacznijmy od zamkniętego firewalla: z założenia wszystkie pakiety są blokowane, przepuszczać będziemy jedynie to, co jest nam rzeczywiście potrzebne. Reguły powinny najpierw określać, co jest przepuszczane, potem co jest blokowane. Podajemy więc wszystkie reguły przepuszczające, a potem nakazujemy blokować całą resztę. :)

Stwórzmy teraz katalog /etc/firewall. W nim utwórzmy plik fwrules, zgodnie z tym, co napisaliśmy w rc.conf. Możemy oczywiście nazwać ten plik jak nam się żywnie podoba, proponowana tu nazwa jest jedną z możliwości.

Spójrzmy teraz na przykładowy plik firewalla, opatrzony komentarzami.

# Reguły firewalla
# Autor: Marc Silver (marcs@draenor.org)
# http://draenor.org/ipfw
#

# Definicja komendy firewalla (jak w /etc/rc.firewall) upraszcza
# jej wywoływanie i czyni plik bardziej czytelnym.
fwcmd="/sbin/ipfw"

# Wyczyszczenie aktualnie obowiązujących reguł.
$fwcmd -f flush

# Przekierowanie wszystkich pakietów przez interfejs tun0.
$fwcmd add divert natd all from any to any via tun0

# Przepuszczanie danych przesyłanych przez kartę sieciową i lokalnie.
# Upewnij się, że wpisałeś tu właściwą kartę (w moim przypadku fxp0)
# zanim przeładujesz system. :)
$fwcmd add allow ip from any to any via lo0
$fwcmd add allow ip from any to any via fxp0

# Przepuszczanie wszystkich połączeń nawiązywanych przez nas.
$fwcmd add allow tcp from any to any out xmit tun0 setup

# Pozwalamy, by połączenia nawiązane mogły pozostać otwarte.
$fwcmd add allow tcp from any to any via tun0 established

# Zezwolenie na połączenia z zewnątrz z określonymi usługami na
# naszej maszynie. Przykładowo dopuszczamy połączenia z ssh i apache.
$fwcmd add allow tcp from any to any 80 setup
$fwcmd add allow tcp from any to any 22 setup

# Wysyłamy RESET w odpowiedzi na pakiety ident.
$fwcmd add reset log tcp from any to any 113 in recv tun0

# Pozwalamy na wychodzące zapytania DNS do wybranych serwerów.
$fwcmd add allow udp from any to x.x.x.x 53 out xmit tun0

# I oczywiście pozwalamy im odpowiedzieć... :)
$fwcmd add allow udp from x.x.x.x 53 to any in recv tun0

# Dopuszczenie pakietów ICMP (dzięki którym działają ping i traceroute).
# Można zdecydować się na ich blokowanie, ja jednak myślę, że mi się
# przydadzą.
$fwcmd add allow icmp from any to any

# Odrzucenie całej reszty.
$fwcmd add deny log ip from any to any

Zbudowaliśmy w pełni sprawny firewall zezwalający na połączenia z portami 80 i 22, oraz rejestrujący próby połączenia z czymkolwiek innym. Po przeładowaniu systemu powinien już należycie funkcjonować. Jeżeli jakiekolwiek z podanych tu informacji okażą się błędne, bądź będą powodować problemy, proszę o zawiadomienie emailem. Mile widziane są również pomysły na ulepszenie niniejszej strony.

Ten i inne dokumenty można pobrać z ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

W przypadku pytań o FreeBSD prosimy przeczytać dostępną dokumentację przed kontaktem z <questions@FreeBSD.org>.
W sprawie zapytań o tę dokumentację prosimy o kontakt z <doc@FreeBSD.org>.