[3] PF – Packet Filter – Testowanie wstępnego zestawu reguł

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

Wstępny zestaw reguł napisany, zatem czas na jego testowanie. Aktywujemy zatem zestaw reguł dla PF, za pomocą polecenia [pfctl], które jest podstawowa metodą łączenia i kontrolowania PF.

Zestawy reguł dla PF to są zwykłe pliki tekstowe, zatem nie ma żadnych skomplikowanych procedur związanych z ładowaniem ich do PF. Za każdym ładowaniem nowego zestawu reguł, stary dotychczas przechowywany i wykorzystywany przez PF zestaw reguł jest opróżniany z pamięci PF.

FreeBSD używa skryptów powłoki znanych jako [rc system], do zarządzania usługami uruchamianymi w czasie startu systemu. Usługi te określamy w różnych plikach konfiguracyjnych [rc]. Jako że pliki [rc], są krytyczne do działania i funkcjonowania systemu FreeBSD, nie powinno się ich edytować bezpośrednio (jak to czyniliśmy dotychczas). Zamiast tego FreeBSD udostępnia narzędzie , które działa w wierszu poleceń: [sysrc]. Pomaga ono w bezpiecznej modyfikacji i edycji plików [rc].

Włączymy zatem teraz PF za pomocą wspomnianego polecenia [sysrc]:

root@vfbsd01:~ # sysrc pf_enable="YES"
pf_enable: NO -> YES

root@vfbsd01:~ # sysrc pflog_enable="YES"
pflog_enable: NO -> YES

Sprawdźmy zatem, czy zmiany zostały faktycznie zapisane w pliku [/etc/rc.conf].

root@vfbsd01:~ # cat /etc/rc.conf | grep pf
pf_enable="YES"
pflog_enable="YES"

Widać wyraźnie, że zmiany zostały zapisane w pliku [/etc/rc.conf].

Włączamy także usługę [pflog], która z kolei włącza demona [pflogd] do logowania działania PF. Będziemy pracować z logowaniem w późniejszym czasie.

Określiliśmy dwie globalne usługi w pliku [/etc/rc.conf], ale nie zostaną one zainicjowane, dopóki nie zrestartujemy serwera lub nie uruchomimy ich ręcznie. Uruchom ponownie serwer, aby móc również przetestować dostęp SSH.

Uruchom pierwszy raz PF, ponownie uruchamiając serwer:

root@vfbsd01:~ # reboot –n

Jeśli byliśmy połączeni z serwerem za pomocą SSH, to nasze połączenie zostało zerwane. Odczekajmy kilka minut, aż system wystartuje i spróbujmy ponownie się zalogować na serwerze za pomocą SSH.

Chociaż zainicjowaliśmy swoje usługi PF, tak naprawdę nie załadowaliśmy naszego zestawu reguł [/etc/pf.conf], co oznacza w praktyce, że nasz firewall nie jest jeszcze aktywny.

Załadujmy zatem nasz zestaw reguł za pomocą polecenia [pfctl]:

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

Jeśli nie ma błędów ani komunikatów, oznacza to, że nasz zestaw reguł nie zawiera błędów, a zapora sieciowa jest aktywna.

Dla pewności uruchom ponownie serwer:

root@vfbsd01:~ # reboot –n

Odczekaj kilka minut i zaloguj się ponownie na serwer za pomocą SSH.

PF jest teraz aktywną zaporą sieciową. Możemy upewnić się, że działa, uzyskując dostęp do niektórych danych za pomocą narzędzia pfctl.

Zobaczymy niektóre statystyki i liczniki za pomocą [pfctl –si]:

root@vfbsd01:~ # pfctl –si
# -si oznacza [show info]
Status: Enabled for 0 days 00:06:23           Debug: Urgent

State Table                          Total             Rate
  current entries                        4
  searches                             634            1.7/s
  inserts                               62            0.2/s
  removals                              58            0.2/s
Counters
  match                                 77            0.2/s
  bad-offset                             0            0.0/s
  fragment                               0            0.0/s
  short                                  0            0.0/s
  normalize                              0            0.0/s
  memory                                 0            0.0/s
  bad-timestamp                          0            0.0/s
  congestion                             0            0.0/s
  ip-option                              0            0.0/s
  proto-cksum                            0            0.0/s
  state-mismatch                         0            0.0/s
  state-insert                           0            0.0/s
  state-limit                            0            0.0/s
  src-limit                              0            0.0/s
  synproxy                               0            0.0/s
  map-failed                             0            0.0/s

Ponieważ właśnie aktywowaliśmy nasz zestaw reguł, nie zobaczymy jeszcze wielu informacji. Jednak ten wynik pokazuje, że PF zarejestrował już 77 dopasowanych reguł, co oznacza, że kryteria naszego zestawu reguł zostały dopasowane 77 razy. Dane wyjściowe potwierdzają również, że zapora działa.

Stworzony wcześniej zestaw reguł zezwala również ruchowi wychodzącemu na dostęp do niektórych krytycznych usług z Internetu, w tym narzędzia ping. Sprawdźmy zatem łączność z Internetem i usługę DNS za pomocą polecenia ping na google.com:

root@vfbsd01:~ # ping -c 5 google.com
# -c 5 oznacza wykonanie tego polecenia pięciokrotnie
PING google.com (142.250.203.206): 56 data bytes
64 bytes from 142.250.203.206: icmp_seq=0 ttl=117 time=27.741 ms
64 bytes from 142.250.203.206: icmp_seq=1 ttl=117 time=27.516 ms
64 bytes from 142.250.203.206: icmp_seq=2 ttl=117 time=28.213 ms
64 bytes from 142.250.203.206: icmp_seq=3 ttl=117 time=27.699 ms
64 bytes from 142.250.203.206: icmp_seq=4 ttl=117 time=29.180 ms

--- google.com ping statistics ---
5 packets transmitted, 5 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 27.516/28.070/29.180/0.601 ms

Upewnij się, że możesz uzyskać dostęp do repozytorium [pkg] za pomocą następującego polecenia:

root@vfbsd01:~ # pkg upgrade
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
All repositories are up to date.
Checking for upgrades (1 candidates): 100%
Processing candidates (1 candidates): 100%
Checking integrity... done (0 conflicting)
Your packages are up to date.

Jeśli obie te usługi działają, oznacza to, że zapora działa i możemy kontynuować ustawianie bardziej restrykcyjnych reguł. Chociaż nasz wstępny zestaw reguł zapewnia ochronę i funkcjonalność, nadal jest to tylko i wyłącznie podstawowy zestaw reguł i przydałoby się kilka ulepszeń. W pozostałych podrozdziałach uzupełnimy przedstawiony powyżej podstawowy zestaw reguł i użyjemy niektóre zaawansowane funkcji PF.