[7] PF – Packet Filter – Kotwice w zestawie reguł
31 stycznia 2024W 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