pimvh.nftables

Test de molécule

Exigences

  1. Ansible installé :
sudo apt install python3
python3 -m ensurepip --upgrade
pip3 install ansible

Variables requises

Passez en revue les variables comme indiqué dans les valeurs par défaut.

Vous pouvez ajouter une définition de pare-feu aux variables pour votre hôte (../host_vars/[nom_hôte].yaml), groupe d'hôtes (../group_vars/[nom_groupe].yaml) en utilisant la structure suivante (voir molecule.default.vars/test.yaml pour un exemple) :

# cette variable pointe vers les règles qui sont envoyées à l'hôte distant
# c'est un dictionnaire de tables, avec des chaînes, avec des règles, voir molecule/default/vars/test.yaml
nftables_ruleset:
  # les clés de cela deviennent des tables
  # elles doivent être :
  # famille de pare-feu et nom, e.g.
  "inet firewall":

    # description de la table
    comment: "pare-feu de l'appareil"

    chains:

      # nom de la chaîne respective
      input:
        # nom de la variable provenant de nftables_rules
        # que vous voudriez mettre dans cette chaîne
        - input_hook
        - valid_connections
        - ...

  # une autre table avec la même structure
  # les familles valides sont des choses comme inet, inet6, netdev, et inet,
  # voir la documentation de nftables pour la référence complète
  "inet foo":

# les règles potentielles sont définies sous `nftables_rules`
# chaque règle a deux attributs :
# -> def : la définition des règles ou un ensemble de règles dans une syntaxe nftables valide
# -> depends_on : liste optionnelle de dépendances de variables provenant de nftables_variables
# voir molecule/default/vars/test.yaml pour un exemple

nftables_rules:
  input_hook: >
    type filter hook input priority 0; policy drop;
  valid_connections:
    def: |
        ct state established, related accept
        ct state invalid drop

  new_connections:
    def: |
        ct state new accept


# ce sont les définitions de variables, qui sont incluses avec depends_on
# assurez-vous que les clés correspondent
# voir molecule/default/vars/test.yaml pour un exemple
nftables_variables:

  tcp_ports:
    comment: configuration des ports tcp
    def: |
      {% if nftables_open_tcp_ports_global %}define OPEN_TCP_PORTS = { {{ nftables_open_tcp_ports_global | join(",") }} }{% endif +%}
      {% if nftables_open_tcp_ports_local %}define LOCAL_OPEN_TCP_PORTS = { {{ nftables_open_tcp_ports_local | join(",") }} }{% endif +%}
      {% if nftables_open_tcp_ports_vpn %}define VPN_TCP_PORTS = { {{ nftables_open_tcp_ports_vpn | join(",") }} }{% endif +%}

  ...

Le playbook Ansible validera si les bonnes variables sont passées au rôle en utilisant un argument_spec.

Exemple de playbook

Minimale (en supposant que vous ayez passé des variables ailleurs) :

hosts:
  - foo
roles:
  - pimvh.nftables

TLDR - Que se passera-t-il si je lance cela

  • valider si des règles ou d'autres variables sont définies
  • installer nftables, et l'interface Python
  • créer les tables nftables requises
  • créer des tables dynamiques en tant que tables vides
  • créer une liste noire vide
  • copier un modèle nftables dans le répertoire nftables
  • modifier le service nftables pour pointer vers notre nouveau fichier principal
  • créer un script pour recharger le pare-feu, qui exporte des tables hors de notre contrôle vers des fichiers et recharge le pare-feu après
  • lorsque nftables_abuseip_api_key est défini, ajouter un script pour récupérer la liste noire en utilisant leur API, et en faire un service systemd
  • activer le service nftable si demandé
  • désinstaller iptables si demandé

Améliorations futures

  • Simplifier la structure des règles qui doivent être passées
  • Améliorer les argument_specs pour nftables_variables et nftables_ruleset
À propos du projet

role to configure nftables using a YAML file

Installer
ansible-galaxy install pimvh.nftables
Licence
gpl-3.0
Téléchargements
110
Propriétaire