vbotka.freebsd_pf
freebsd_pf
Rôle Ansible. FreeBSD. Configurer le pare-feu PF.
N'hésitez pas à partager vos retours et signaler des problèmes.
Les contributions sont les bienvenues.
Avertissement :
Comme cela manipule le pare-feu, il y a un risque d'être bloqué. Il est nécessaire de lire le manuel
- https://www.freebsd.org/doc/en/books/handbook/firewalls-pf.html
- https://www.openbsd.org/faq/pf/filter.html
Lorsque vous expérimentez avec pf sur un hôte distant, ouvrez une session et, en tant que root, exécutez la commande ci-dessous avant d'activer pf
shell> sleep 120; pfctl -d
Cela désactivera pf après 2 minutes et vous permettra d’ouvrir une nouvelle session à cet hôte distant si quelque chose ne va pas.
Exigences et dépendances
Collections
- community.general
Dépendances optionnelles
Variables de rôle
Par défaut, le pare-feu est désactivé
pf_enable: False
Par défaut, sshguard, blacklistd, fail2ban, et relayd sont désactivés
pf_blacklistd_enable: False
pf_fail2ban_enable: False
pf_relayd_enable: False
pf_sshguard_enable: False
Par défaut, les paquets bloqués ne sont pas enregistrés
pf_log_all_blocked: False
Vérifiez les valeurs par défaut et les exemples dans vars.
Flux de travail
- Changez le shell en /bin/sh si nécessaire
shell> ansible srv.example.com -e 'ansible_shell_type=csh ansible_shell_executable=/bin/csh' -a 'sudo pw usermod freebsd -s /bin/sh'
- Installez le rôle et les collections
shell> ansible-galaxy role install vbotka.freebsd_pf
Installez la collection si nécessaire
shell> ansible-galaxy collection install community.general
- Créez le pare-feu
Il y a quelques modèles *-pf.conf.j2 disponibles. Choisissez un modèle qui correspond à votre besoin (routeur, serveur, équilibreur, ...) et vérifiez les exemples des variables .yml.sample dans vars. Le modèle default-pf.conf.j2 et les variables pfconf_example_default.yml.sample ont été testés. D'autres modèles et échantillons nécessiteront plus d'attention et de tests.
Remarque : Vous pouvez créer des listes imbriquées (tables, options, normalisation, mise en queue, traduction, filtrage, ...) pour le modèle default-pf.conf.j2. Les listes seront aplanies.
- Créez le playbook
shell> cat freebsd-pf.yml
- hosts: srv.example.com
roles:
- vbotka.freebsd_pf
Consultez les gestionnaires pour voir comment démarrer/redémarrer/recharger pf est implémenté.
Installez les paquets
shell> ansible-playbook -t pf_packages -e pf_install=true freebsd-pf.yml
Ensuite, désactivez l'installation pour accélérer l'exécution du playbook.
- Configurez le pare-feu
Le démarrage et le redémarrage du pare-feu interrompent les connexions ssh. Voir les gestionnaires pour plus de détails. En conséquence, les deux gestionnaires démarrant et rechargeant ne fonctionnent pas correctement et la connexion ssh sera perdue. Par conséquent, commençons par configurer les règles
shell> ansible-playbook -e pf_enable=false freebsd-pf.yml
Avant d'activer le pare-feu, ouvrez une session ssh sur l'hôte distant et exécutez les commandes ci-dessous
shell> sleep 120; pfctl -d
Si vous vous verrouillez hors de l'hôte distant, les commandes ci-dessus désactiveront le pare-feu dans 2 minutes. Vous voudrez peut-être exécuter ces commandes chaque fois que vous expérimentez avec le pare-feu. Maintenant, activez le pare-feu
shell> ansible-playbook -e pf_enable=true freebsd-pf.yml
Mise à jour du pare-feu
Ouvrez une connexion ssh à l'hôte au cas où quelque chose irait mal. Mettez à jour et validez la configuration. Ne rechargez pas les règles
shell> ansible-playbook -e pf_conf_only=true -e pf_conf_validate=true freebsd-pf.yml
Rechargez les règles après que la configuration a été mise à jour et validée
shell> ansible srv.example.com -m service -a "name=pf state=reloaded"
Dépannage
pf.conf
En premier lieu, activez la sauvegarde des fichiers de configuration
pf_backup_conf: true
Dans le cas où la configuration /etc/pf.conf ne passe pas la validation, le play échoue
TASK [vbotka.freebsd_pf : pfconf: Configurer des règles] **********************************************
fatal: [srv.example.com]: FAILED! => changed=false
checksum: 765302b1f0de9f200b2cab396e0271fc04e6adcc
exit_status: 1
msg: échoué à valider
stderr: |-
/home/freebsd/.ansible/tmp/ansible-tmp-1554558267.39-44232067735996/source:119: erreur de syntaxe
Le message ci-dessus montre l'emplacement de l'erreur de syntaxe (source:119) dans le fichier temporaire créé par le module template. Il est difficile de trouver l'erreur si ce fichier temporaire n'est pas disponible pour révision.
Activez pf_conf_only=true et désactivez la validation pf_conf_validate=false pour trouver le problème
shell> ansible-playbook -e pf_conf_only=true -e pf_conf_validate=false freebsd-pf.yml
Localisez l'erreur de syntaxe dans le fichier de configuration /etc/pf.conf
shell> pfctl -n -f /etc/pf.conf
Mettez à jour, validez et rechargez les règles après que la configuration a été corrigée
shell> ansible srv.example.com -m service -a "name=pf state=reloaded"
relayd.conf
De la même manière, il est possible de dépanner /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
Localisez l'erreur de syntaxe dans le fichier de configuration /usr/local/etc/relayd.conf
shell> relayd -n -f /usr/local/etc/relayd.conf
Mettez à jour, validez et rechargez les règles après que la configuration a été corrigée
shell> ansible srv.example.com -m service -a "name=relayd state=reloaded"
Sécurité
Pour éviter qu'une configuration non validée ne soit rechargée par le gestionnaire, le fichier de configuration /etc/pf.conf ne sera pas créé et le jeu prendra fin si pf_conf_only=false et 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: La validation peut être désactivée si pf_conf_only=True. Fin du jeu.
Le rôle échoue de la même manière dans le cas -e pf_relayd_conf_only=false -e pf_relayd_conf_validate=false
Ansible lint
Utilisez le fichier de configuration .ansible-lint.local lors de l'exécution ansible-lint. Certaines règles peuvent être désactivées et certains avertissements peuvent être ignorés. Consultez les notes dans le fichier de configuration.
shell> ansible-lint -c .ansible-lint.local
Références
- Livre de PF
- Pare-feu avec le filtre de paquets PF d'OpenBSD
- Guide du débutant pour le pare-feu avec pf
- PF Tester votre pare-feu - OpenBSD Journal
- Installation rapide d'une prison sur ZFS avec ezjail et PF NAT
- FreeBSD et blacklistd
- Blacklistd sur FreeBSD
- PF et sshguard
- Application des interdictions de Fail2ban avec PF
- Fail2Ban avec PF
- Fail2Ban pf.conf : corriger la syntaxe multiposte
Licence
Informations sur l'auteur
FreeBSD. Configure PF firewall.
ansible-galaxy install vbotka.freebsd_pf