Archiwum kategorii ‘pf’

OpenBSD: pf – zmiany

piątek, 4 Wrzesień 2009

1 września część społeczeństwa cofała się 70 lat w czasie, część paliła w toalecie z dawno nie widzianymi znajomymi, a Henning Brauer na grupie openbsd-misc opublikował informację na temat sporej zmiany w kodzie pf (3’000 linii różnic odchudza kod o 800 linii). Zmiana dotyczy składni translacji i przekierowania adresów – nie będę one osobnymi regułami, a akcjami na regułach match / pass / block. Więcej w oryginalnej wiadomości:

a także w dokumencie Following -current, gdzie znajduje się również informacja z następnego dnia o zmianie składni reguł z opcjami route-to, reply-to, dup-to and fastroute.

Osobiście uważam, że obie zmiany sprawią, że plik konfiguracyjny będzie bardziej czytelny. Zaczynam testowanie!

Nowa akcja w filtrze pakietów OpenBSD

środa, 19 Sierpień 2009

Wczoraj coś wspomniałem o nowej akcji match w pf, dziś nie mogę nie rozwinąć tematu. Tym bardziej, że nie znalazłem żadnych dodatkowych informacji ani na spryciarze.pl, ani na jaktosierobi.tv (a na tym drugim przejrzałem wszystkie filmy).

Fakty, które znamy (-release):

  • reguły przetwarzane są z góry do dołu (a w każdej linii od lewej do prawej),
  • ostatnia pasująca reguła wygrywa,
  • wyjątkiem jest słowo kluczowe quick.

Powyższe oznacza, że każdy pakiet przejdzie po kolei pełny zestaw reguł. Co w przypadku, gdy logujemy (log)? Niejako jest to powiązane z akcją, więc pakiet zalogowany będzie tylko raz. Poniżej przykład:

block log all
pass in log on $int_if inet proto tcp from any to ($int_if) port ssh flags S/SA modulate state

tcpdump pokaże nam:

07:30:44.227293 rule 3/(match) pass in on xl0: 192.168.1.131.61392 > 192.168.1.64.22: S 738501558:738501558(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK> (DF)

Nowa akcja match (-current) po prostu dopasowuje pakiet i może go zalogować lub oznakować (tag), ale nie zrobi z nim nic więcej (nie zaakceptuje i nie odrzuci). Zmieniony zestaw reguł:

block log all
match in log on $int_if inet proto tcp from any to ($int_if) port ssh
pass in log on $int_if inet proto tcp from any to ($int_if) port ssh flags S/SA modulate state

da następujące wyniki:

07:36:55.505154 rule 4/(match) pass in on xl0: 192.168.1.131.61403 > 192.168.1.64.22: S 3714164883:3714164883(0) win 8192 (DF)
07:36:55.505168 rule 3/(match) match in on xl0: 192.168.1.131.61403 > 192.168.1.64.22: S 3714164883:3714164883(0) win 8192 (DF)

Czyli jeden pakiet (patrz numer sekwencyjny) dwukrotnie zalogowany. Co ważne – w logach pierw mamy pass, a potem match (niezależnie jak reguły ułożymy).

Przydatne? Myślę, że tak. Wracamy do NetFlow (oczywiście z najeżkowatą w tle – pamiętać należy, że w Polsce nie wolno wprowadzać ich do obrotu).

OpenBSD: pf: scrub: syntax error

wtorek, 18 Sierpień 2009

peeper ~ # pfctl -nf /etc/pf.conf
/etc/pf.conf:7: syntax error
peeper ~ # head -n 7 /etc/pf.conf |tail -n 1
scrub in all
peeper ~ # uname -a
OpenBSD peeper.mbs.dmz 4.6 GENERIC#0 i386

Kto podąża za -current, powinien czytać też o zmianach. Czyli:

OpenBSD : pf : route-to

poniedziałek, 10 Listopad 2008

Nie zawsze o tym pamiętam, inni może też, więc tutaj takie krótkie info odnośnie route-to. Ważne jest, że przy używaniu tej opcji pakiety zawsze są ‘pchane’ do granicznego routera. Połączenia z sąsiadami (:network) mogą nam w takiej sytuacji nie wyjść. W takim wypadku potrzebna będzie kolejna reguła tylko dla tych połączeń.
Przy okazji pomocne mogą być wyrażenia dodawane do interfejsów sieciowych:

  • :network – określa sieć, do której należy interfejs,
  • :broadcast – adres rozgłoszeniowy podsieci,
  • :peer – adres IP po drugiej stronie połączenia point-to-point,
  • :0 – adres IP interfejsu (nie alias).

Polecam cały podręcznik do pf, a w szczególności (uszczegóławiając powyższe :>):

OpenBSD: pf: per-rule statistics

poniedziałek, 21 Lipiec 2008

$ man 8 pfctl
-s modifier
Show the filter parameters specified by modifier (may be abbrevi-
ated):
-s labels      Show per-rule statistics (label, evaluations,
packets total, bytes total, packets in, bytes in,
packets out, bytes out) of filter rules with la-
bels, useful for accounting.
-z      Clear per-rule statistics.

pf w OpenBSD może gromadzić statystyki dla każdej reguły z osobna. Możliwe to jest po dodaniu słowa kluczowego label i nazwy do reguły. Np.

pass in log on $int_if inet proto tcp from any to <web_hosts> flags S/SA modulate state label web_hosts

Statystyki wyświetlić możemy za pomocą pfctl (stosowny wycinek z podręcznika u samej góry). Wyniki pokazują: nazwę etykiety, ilość ewaluacji danej reguły (ile razy pakiet był do niej dopasowywany), ogólną ilość pakietów, ogólną ilość bajtów pakiety i bajty przychodzące oraz wychodzące (we wcześniejszej wersji tylko liczba dopasowań, pakietów oraz bajtów). Poniżej przykład:

# pfctl -s labels
web_hosts 127242 3955855 3814318564 1422110 83633676 2533745 3730684888

Uwaga! Czasami wynik może być zdublowany:

# pfctl -s labels
klnt001 127242 3955855 3814318564 1422110 83633676 2533745 3730684888
klnt001 63327 0 0 0 0 0 0

Dzieje się tak, gdy w etykietowanej regule używamy list (nawiasów klamrowych). Każda reguła (z listą) rozwiązywana jest na dwie lub więcej osobnych reguł, ale nazwa etykiety pozostaje taka sama. Stąd sugestia, by rozdzielić reguły już przy definicji – pozwoli to ‘połapać’ się w statystykach.

Do poczytania (oprócz wspomnianych FAQ i podręcznika):