vbotka.freebsd_pf

freebsd_pf

Qualität Build-Status GitHub-Tag

Ansible-Rolle. FreeBSD. Konfiguriert die PF-Firewall.

Fühlen Sie sich frei, Ihr Feedback zu teilen und Probleme zu melden.

Beiträge sind willkommen.

Warnung:

Da die Firewall manipuliert wird, besteht das Risiko, dass Sie ausgesperrt werden. Es ist notwendig, das Handbuch zu lesen

Wenn Sie mit pf auf einem Remote-Host experimentieren, öffnen Sie eine Sitzung und führen Sie als root den folgenden Befehl aus, bevor Sie pf aktivieren:

shell> sleep 120; pfctl -d

Dies deaktiviert pf nach 2 Minuten und ermöglicht es Ihnen, eine neue Sitzung zu diesem Remote-Host zu öffnen, falls etwas schiefgeht.

Anforderungen und Abhängigkeiten

Sammlungen

  • community.general

Optionale Abhängigkeiten

Rollenvariablen

Standardmäßig ist die Firewall deaktiviert

pf_enable: False

Standardmäßig sind sshguard, blacklistd, fail2ban und relayd deaktiviert

pf_blacklistd_enable: False
pf_fail2ban_enable: False
pf_relayd_enable: False
pf_sshguard_enable: False

Standardmäßig werden blockierte Pakete nicht protokolliert

pf_log_all_blocked: False

Überprüfen Sie die Standardwerte und Beispiele in vars.

Arbeitsablauf

  1. Ändern Sie die Shell auf /bin/sh, falls erforderlich
shell> ansible srv.example.com -e 'ansible_shell_type=csh ansible_shell_executable=/bin/csh' -a 'sudo pw usermod freebsd -s /bin/sh'
  1. Installieren Sie die Rolle und Sammlungen
shell> ansible-galaxy role install vbotka.freebsd_pf

Installieren Sie die Sammlung, falls erforderlich

shell> ansible-galaxy collection install community.general
  1. Erstellen Sie die Firewall

Es gibt ein paar Vorlagen *-pf.conf.j2, die verfügbar sind. Wählen Sie eine Vorlage, die zu Ihrem Zweck passt (Router, Server, Balancer, ...) und überprüfen Sie die Beispiele der Variablen .yml.sample in vars. Die Vorlage default-pf.conf.j2 und die Variablen pfconf_example_default.yml.sample sind getestet. Andere Vorlagen und Beispiele benötigen mehr Aufmerksamkeit und Tests.

Hinweis: Sie können geschachtelte Listen (Tabellen, Optionen, Normalisierung, Warteschlangen, Übersetzung, Filterung, ...) für die Vorlage default-pf.conf.j2 erstellen. Die Listen werden abgeflacht.

  1. Erstellen Sie ein Playbook
shell> cat freebsd-pf.yml
- hosts: srv.example.com
  roles:
    - vbotka.freebsd_pf
  1. Überprüfen Sie die Handler, um zu sehen, wie das Starten/Neustarten/Neu Laden von pf implementiert ist.

  2. Installieren Sie die Pakete

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

Deaktivieren Sie dann die Installation, um die Ausführung des Playbooks zu beschleunigen.

  1. Konfigurieren Sie die Firewall

Das Starten und Neustarten der Firewall unterbricht die ssh-Verbindungen. Siehe die Handler für Details. Daher funktionieren sowohl die Handler zum Starten als auch zum Neuladen nicht ordnungsgemäß und die ssh-Verbindung wird instabil. Lassen Sie uns daher zunächst die Regeln konfigurieren

shell> ansible-playbook -e pf_enable=false freebsd-pf.yml

Bevor Sie die Firewall aktivieren, öffnen Sie eine ssh-Sitzung zum Remote-Host und führen Sie die folgenden Befehle aus

shell> sleep 120; pfctl -d

Wenn Sie sich selbst vom Remote-Host aussperren, deaktiviert der obenstehende Befehl die Firewall nach 2 Minuten. Sie möchten vielleicht immer diese Befehle ausführen, wenn Sie mit der Firewall experimentieren. Jetzt aktivieren Sie die Firewall

shell> ansible-playbook -e pf_enable=true freebsd-pf.yml

Aktualisieren der Firewall

Öffnen Sie eine ssh-Verbindung zum Host, falls etwas schief geht. Aktualisieren und validieren Sie die Konfiguration. Neu laden Sie die Regeln nicht

shell> ansible-playbook -e pf_conf_only=true -e pf_conf_validate=true freebsd-pf.yml

Laden Sie die Regeln nach der Aktualisierung und Validierung der Konfiguration neu

shell> ansible srv.example.com -m service -a "name=pf state=reloaded"

Fehlerbehebung

pf.conf

Als ersten Schritt aktivieren Sie die Sicherung der Konfigurationsdateien

pf_backup_conf: true

Falls die Konfiguration /etc/pf.conf die Validierung nicht besteht, schlägt das Play fehl

TASK [vbotka.freebsd_pf : pfconf: Konfiguriere Regeln] **********************************************
fatal: [srv.example.com]: FAILED! => changed=false
  checksum: 765302b1f0de9f200b2cab396e0271fc04e6adcc
  exit_status: 1
  msg: konnte nicht validieren
  stderr: |-
    /home/freebsd/.ansible/tmp/ansible-tmp-1554558267.39-44232067735996/source:119: Syntaxfehler

Die obige Nachricht zeigt den Ort des Syntaxfehlers (source:119) in der temporären Datei, die vom Template-Modul erstellt wurde. Es ist schwierig, den Fehler zu finden, wenn diese temporäre Datei nicht zur Überprüfung verfügbar ist.

Aktivieren Sie pf_conf_only=true und deaktivieren Sie die Validierung pf_conf_validate=false, um das Problem zu finden

shell> ansible-playbook -e pf_conf_only=true -e pf_conf_validate=false freebsd-pf.yml

Lokalisiere den Syntaxfehler in der Konfigurationsdatei /etc/pf.conf

shell> pfctl -n -f /etc/pf.conf

Aktualisieren, validieren und laden Sie die Regeln neu, nachdem die Konfiguration korrigiert wurde

shell> ansible srv.example.com -m service -a "name=pf state=reloaded"

relayd.conf

Ebenso ist es möglich, /usr/local/etc/relayd.conf zu debuggen

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

Lokalisiere den Syntaxfehler in der Konfigurationsdatei /usr/local/etc/relayd.conf

shell> relayd -n -f /usr/local/etc/relayd.conf

Aktualisieren, validieren und laden Sie die Regeln neu, nachdem die Konfiguration korrigiert wurde

shell> ansible srv.example.com -m service -a "name=relayd state=reloaded"

Sicherheit

Um zu verhindern, dass nicht-validierte Konfigurationen vom Handler neu geladen werden, wird die Konfigurationsdatei /etc/pf.conf nicht erstellt und das Play wird beendet, wenn sowohl pf_conf_only=false als auch pf_conf_validate=false

shell> ansible-playbook -e pf_conf_only=false -e pf_conf_validate=false freebsd-pf.yml
fatal: [srv.example.com]: FAILED! => changed=false
  msg: Validierung kann deaktiviert werden, wenn pf_conf_only=True. Ende des Plays.

Die Rolle schlägt auf die gleiche Weise fehl, wenn -e pf_relayd_conf_only=false -e pf_relayd_conf_validate=false

Ansible Lint

Verwenden Sie die Konfigurationsdatei .ansible-lint.local beim Ausführen von ansible-lint. Einige Regeln können deaktiviert und einige Warnungen ignoriert werden. Siehe die Notizen in der Konfigurationsdatei.

shell> ansible-lint -c .ansible-lint.local

Referenzen

Lizenz

Lizenz

Autoreninformation

Vladimir Botka

Installieren
ansible-galaxy install vbotka.freebsd_pf
Lizenz
bsd-2-clause
Downloads
243
Besitzer