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).