[7] PF – Packet Filter – Kotwice w zestawie reguł

31 stycznia 2024 Wyłączono przez Adam [zicherka] Nogły

W tym rozdziale wprowadzimy kotwice, które są używane do pozyskiwania źródłowych reguł do głównego zestawu reguł, ręcznie lub z zewnętrznego pliku tekstowego. Kotwice mogą zawierać fragmenty reguł, tabele, a nawet inne kotwice, zwane kotwicami zagnieżdżonymi. Zademonstruję, jak działają zakotwiczenia, dodając tabelę do zewnętrznego pliku i umieszczając ją w podstawowym zestawie reguł. Nasza tabela będzie zawierać grupę hostów wewnętrznych, którym chcesz uniemożliwić łączenie się ze światem zewnętrznym.

Stworzymy plik [/etc/blocked_hosts_anchors]:

root@vfbsd01:~ # mcedit /etc/blocked_hosts_anchor
# stwórz nowy
table <blocked-hosts> { 192.168.100.13 192.168.100.113 192.168.100.213 }
block return out quick on egress from <blocked-hosts>

Zapisz i zamknij plik.

Poniższe reguły deklarują i definiują tabelę <blocked-hosts>, a następnie uniemożliwiają każdemu adresowi IP w tabeli <blocked-hosts> dostęp do usług ze świata zewnętrznego. Używasz słowa kluczowego [egress] jako preferowanej metody znajdowania domyślnej trasy lub wyjścia do Internetu.

Nadal jednak musimy zadeklarować kotwicę w pliku [/etc/pf.conf]:

root@vfbsd01:~ # mcedit /etc/pf.conf
# dodaj następujące reguły kotwicy po regule [block all]:
. . .
block all
anchor blocked_hosts
load anchor blocked_hosts from "/etc/blocked_hosts_anchor"
. . .

Reguły te deklarują [blocked_hosts] i ładują reguły zakotwiczenia do głównego zestawu reguł z pliku [/etc/blocked_hosts_anchor]. Teraz zainicjujemy te zmiany, ponownie ładując swój zestaw reguł za pomocą pfctl:

root@vfbsd01:~ # pfctl -f /etc/pf.conf

Jeśli nie ma błędów, oznacza to, że w naszym zestawie reguł nie ma błędów, a co za tym idzie nasze zmiany są aktywne. Użyjemy ponownie [pfctl], aby sprawdzić, czy nasza kotwica działa:

root@vfbsd01:~ # pfctl -s Anchors
# opcja [-s Anchors] opdpowiada za wyświetlenie kotwic
  blocked_hosts

Narzędziem [pfctl] możemy również przeanalizować określone reguły naszej kotwicy z opcjami [-a] i [-s]:

root@vfbsd01:~ # pfctl -a blocked_hosts -s rules
block return out quick on egress from <blocked-hosts> to any

Inną cechą kotwic jest to, że umożliwiają dodawanie reguł na żądanie bez konieczności ponownego ładowania zestawu reguł. Może to być przydatne do testowania, szybkich poprawek, sytuacji awaryjnych i tak dalej. Na przykład, jeśli host wewnętrzny zachowuje się dziwnie i chcesz uniemożliwić mu nawiązywanie połączeń zewnętrznych, możesz mieć kotwicę, która pozwoli ci szybko interweniować z wiersza poleceń.

Otwórzmy więc ponownie [/etc/pf.conf] i dodajmy kolejną kotwicę:

root@vfbsd01:~ # mcedit /etc/pf.conf
# nazwijmy kotwicę [rogue_hosts] i umieść ją w regule [block all]:
. . .
block all
anchor rouge_hosts
. . .

Aby zainicjować te zmiany, przeładujmy teraz zestaw reguł za pomocą [pfctl]:

root@vfbsd01:~ # pfctl -f /etc/pf.conf

Ponownie użyjmy [pfctl], aby sprawdzić, czy kotwica działa:

root@vfbsd01:~ # pfctl -s Anchors
  blocked_hosts
  rouge_hosts

Teraz, gdy kotwica jest uruchomiona, możemy w dowolnym momencie dodać do niej reguły. Przetestujemy to, dodając następującą regułę:

root@vfbsd01:~ # sh -c 'echo "block return out quick on egress from 192.168.100.69" | pfctl -a rogue_hosts -f -'

Spowoduje to wywołanie polecenia echo i jego zawartości, która jest następnie przesyłana potokiem do narzędzia pfctl za pomocą symbolu przetwarzania potokowego [|], gdzie jest przetwarzana na regułę zakotwiczenia. Otwieramy kolejną sesję powłoki za pomocą polecenia [sh –c]. Dzieje się tak, ponieważ ustanawiamy potok między dwoma procesami.

Teraz ponownie użyjemy [pfctl], aby sprawdzić, czy te reguły są aktywne:

root@vfbsd01:~ # pfctl -a rogue_hosts -s rules
block return out quick on egress inet from 192.168.100.69 to any