vbotka.freebsd_pf

freebsd_pf

jakość Status budowy Tag GitHub

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

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

  1. 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'
  1. 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
  1. 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.

  1. Utwórz playbook
shell> cat freebsd-pf.yml
- hosts: srv.example.com
  roles:
    - vbotka.freebsd_pf
  1. Przejrzyj handler, aby zobaczyć, jak uruchomienie/ponowne uruchomienie/ładowanie pf jest zaimplementowane.

  2. Zainstaluj pakiety

shell> ansible-playbook -t pf_packages -e pf_install=true freebsd-pf.yml

Następnie wyłącz instalację, aby przyspieszyć wykonanie playbooka.

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

Licencja

licencja

Informacje o autorze

Vladimir Botka

Zainstaluj
ansible-galaxy install vbotka.freebsd_pf
Licencja
bsd-2-clause
Pobrania
243
Właściciel