vbotka.freebsd_pf

freebsd_pf

qualité Statut de construction Tag GitHub

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

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

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

  1. Créez le playbook
shell> cat freebsd-pf.yml
- hosts: srv.example.com
  roles:
    - vbotka.freebsd_pf
  1. Consultez les gestionnaires pour voir comment démarrer/redémarrer/recharger pf est implémenté.

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

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

Licence

licence

Informations sur l'auteur

Vladimir Botka

Installer
ansible-galaxy install vbotka.freebsd_pf
Licence
bsd-2-clause
Téléchargements
243
Propriétaire