vbotka.freebsd_pf
freebsd_pf
Ansible-Rolle. FreeBSD. Konfiguriert die PF-Firewall.
Fühlen Sie sich frei, Ihr Feedback zu teilen und Probleme zu melden.
Warnung:
Da die Firewall manipuliert wird, besteht das Risiko, dass Sie ausgesperrt werden. Es ist notwendig, das Handbuch zu lesen
- https://www.freebsd.org/doc/en/books/handbook/firewalls-pf.html
- https://www.openbsd.org/faq/pf/filter.html
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
- Ä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'
- 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
- 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.
- Erstellen Sie ein Playbook
shell> cat freebsd-pf.yml
- hosts: srv.example.com
roles:
- vbotka.freebsd_pf
Überprüfen Sie die Handler, um zu sehen, wie das Starten/Neustarten/Neu Laden von pf implementiert ist.
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.
- 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
- Buch über PF
- Firewalling mit OpenBSDs PF-Paketfilter
- Eine Anfängeranleitung zum Firewalling mit pf
- PF Testen Ihrer Firewall - OpenBSD Journal
- Schnelle Einrichtung einer Jail auf ZFS mit ezjail und PF NAT
- FreeBSD und blacklistd
- Blacklistd auf FreeBSD
- PF und sshguard
- Durchsetzung der Fail2ban-Sperren mit PF
- Fail2Ban mit PF
- Fail2Ban pf.conf: Behebung der Multiport-Syntax
Lizenz
Autoreninformation
FreeBSD. Configure PF firewall.
ansible-galaxy install vbotka.freebsd_pf