pimvh.nftables
Exigences
- 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
etnftables_ruleset
Installer
ansible-galaxy install pimvh.nftables
Licence
gpl-3.0
Téléchargements
110
Propriétaire