vbotka.freebsd_pf
freebsd_pf
Rozegranie Ansible. FreeBSD. Konfiguracja zapory PF.
Nie krępuj się dzielić swoimi uwagami i zgłaszać problemy.
Wszystkie wkłady są mile widziane.
Ostrzeżenie:
Ponieważ manipuluje zaporą, istnieje ryzyko zablokowania dostępu. Należy przeczytać podręcznik
- https://www.freebsd.org/doc/en/books/handbook/firewalls-pf.html
- https://www.openbsd.org/faq/pf/filter.html
Kiedy eksperymentujesz z pf na zdalnym hoście, otwórz sesję i jako root uruchom poniższe polecenie przed włączeniem pf
shell> sleep 120; pfctl -d
To wyłączy pf po 2 minutach, co pozwoli Ci otworzyć nową sesję do tego zdalnego hosta, jeśli coś pójdzie nie tak.
Wymagania i zależności
Kolekcje
- community.general
Opcjonalne zależności
Zmienne roli
Domyślnie zapora jest wyłączona
pf_enable: False
Domyślnie sshguard, blacklistd, fail2ban i relayd są wyłączone
pf_blacklistd_enable: False
pf_fail2ban_enable: False
pf_relayd_enable: False
pf_sshguard_enable: False
Domyślnie, zablokowane pakiety nie są rejestrowane
pf_log_all_blocked: False
Przeglądaj domyślne wartości i przykłady w vars.
Przebieg
- Zmień powłokę na /bin/sh, jeśli to konieczne
shell> ansible srv.example.com -e 'ansible_shell_type=csh ansible_shell_executable=/bin/csh' -a 'sudo pw usermod freebsd -s /bin/sh'
- Zainstaluj rolę i kolekcje
shell> ansible-galaxy role install vbotka.freebsd_pf
Zainstaluj kolekcję, jeśli to konieczne
shell> ansible-galaxy collection install community.general
- Utwórz zaporę
Dostępnych jest kilka szablonów *-pf.conf.j2. Wybierz szablon, który odpowiada Twoim potrzebom (router, serwer, balansowanie, ...) i przejrzyj przykłady zmiennych .yml.sample w vars. Szablon default-pf.conf.j2 oraz zmienne pfconf_example_default.yml.sample zostały przetestowane. Inne szablony i przykłady będą wymagały większej uwagi i testowania.
Uwaga: Możesz tworzyć zagnieżdżone listy (tabele, opcje, normalizacja, kolejki, tłumaczenie, filtrowanie, ...) dla szablonu default-pf.conf.j2. Listy zostaną spłaszczone.
- Utwórz playbook
shell> cat freebsd-pf.yml
- hosts: srv.example.com
roles:
- vbotka.freebsd_pf
Przejrzyj handler, aby zobaczyć, jak uruchomienie/ponowne uruchomienie/ładowanie pf jest zaimplementowane.
Zainstaluj pakiety
shell> ansible-playbook -t pf_packages -e pf_install=true freebsd-pf.yml
Następnie wyłącz instalację, aby przyspieszyć wykonanie playbooka.
- Skonfiguruj zaporę
Uruchomienie i ponowne uruchomienie zapory przerywa połączenia ssh. Zobacz handler dla szczegółów. W związku z tym oba handlery uruchamiające i ładujące nie działają poprawnie i połączenie ssh będzie zamknięte. Dlatego najpierw skonfigurujmy reguły
shell> ansible-playbook -e pf_enable=false freebsd-pf.yml
Zanim włączysz zaporę, otwórz sesję ssh do zdalnego hosta i uruchom poniższe polecenia
shell> sleep 120; pfctl -d
Jeśli zablokujesz się z zdalnego hosta, powyższe polecenia wyłączą zapora w ciągu 2 minut. Możesz chcieć zawsze uruchamiać te polecenia, gdy eksperymentujesz z zaporą. Teraz włącz zaporę
shell> ansible-playbook -e pf_enable=true freebsd-pf.yml
Aktualizacja zapory
Otwórz połączenie ssh z hostem na wypadek, gdyby coś poszło nie tak. Zaktualizuj i zweryfikuj konfigurację. Nie ładuj reguł
shell> ansible-playbook -e pf_conf_only=true -e pf_conf_validate=true freebsd-pf.yml
Załaduj reguły po zaktualizowaniu i zweryfikowaniu konfiguracji
shell> ansible srv.example.com -m service -a "name=pf state=reloaded"
Rozwiązywanie problemów
pf.conf
Na początek włącz kopię zapasową plików konfiguracyjnych
pf_backup_conf: true
W przypadku, gdy konfiguracja /etc/pf.conf nie przejdzie walidacji, play nie powiedzie się
ZADANIE [vbotka.freebsd_pf : pfconf: Skonfiguruj reguły] **********************************************
fatal: [srv.example.com]: NIEUDANE! => changed=false
checksum: 765302b1f0de9f200b2cab396e0271fc04e6adcc
exit_status: 1
msg: nie udało się zweryfikować
stderr: |-
/home/freebsd/.ansible/tmp/ansible-tmp-1554558267.39-44232067735996/source:119: błąd składni
Wiadomość powyżej pokazuje lokalizację błędu składni (source:119) w tymczasowym pliku utworzonym przez moduł szablonu. Trudno jest znaleźć błąd, jeśli ten tymczasowy plik nie jest dostępny do przeglądu.
Włącz pf_conf_only=true i wyłącz walidację pf_conf_validate=false, aby znaleźć problem
shell> ansible-playbook -e pf_conf_only=true -e pf_conf_validate=false freebsd-pf.yml
Zlokalizuj błąd składni w pliku konfiguracyjnym /etc/pf.conf
shell> pfctl -n -f /etc/pf.conf
Zaktualizuj, zweryfikuj i ładuj reguły po naprawie konfiguracji
shell> ansible srv.example.com -m service -a "name=pf state=reloaded"
relayd.conf
W ten sam sposób można rozwiązać problemy z /usr/local/etc/relayd.conf
shell> ansible-playbook -t pf_relayd -e pf_debug=true -e pf_relayd_conf_validate=false -e pf_relayd_conf_only=true freebsd-pf.yml
Zlokalizuj błąd składni w pliku konfiguracyjnym /usr/local/etc/relayd.conf
shell> relayd -n -f /usr/local/etc/relayd.conf
Zaktualizuj, zweryfikuj i ładuj reguły po naprawie konfiguracji
shell> ansible srv.example.com -m service -a "name=relayd state=reloaded"
Bezpieczeństwo
Aby zapobiec przeładowaniu niezweryfikowanej konfiguracji przez handler, plik konfiguracyjny /etc/pf.conf nie zostanie utworzony, a wykonanie zakończy się, jeśli zarówno pf_conf_only=false, jak i pf_conf_validate=false
shell> ansible-playbook -e pf_conf_only=false -e pf_conf_validate=false freebsd-pf.yml
fatal: [srv.example.com]: NIEUDANE! => changed=false
msg: Walidacja może być wyłączona, jeśli pf_conf_only=True. Koniec akcji.
Rola działa w ten sam sposób w przypadku -e pf_relayd_conf_only=false -e pf_relayd_conf_validate=false
Ansible lint
Użyj pliku konfiguracyjnego .ansible-lint.local podczas uruchamiania ansible-lint. Niektóre zasady mogą być wyłączone, a niektóre ostrzeżenia mogą być ignorowane. Zobacz notatki w pliku konfiguracyjnym.
shell> ansible-lint -c .ansible-lint.local
Odniesienia
- Księga PF
- Zaporowanie z użyciem filtru pakietów PF OpenBSD
- Przewodnik dla początkujących po zaporach z pf
- PF Testowanie swojej zapory - Dziennik OpenBSD
- Szybkie skonfigurowanie więzienia na ZFS z użyciem ezjail oraz NAT PF
- FreeBSD i blacklistd
- Blacklistd na FreeBSD
- PF i sshguard
- Wymuszanie zakazów Fail2ban z PF
- Fail2Ban z PF
- Fail2Ban pf.conf: naprawia składnię multiport
Licencja
Informacje o autorze
FreeBSD. Configure PF firewall.
ansible-galaxy install vbotka.freebsd_pf