From 6f4833e65c76d601258442c90fec38fc4a82aa45 Mon Sep 17 00:00:00 2001 From: Daniel Allaire Date: Sun, 30 Aug 2026 10:00:18 -0400 Subject: [PATCH] nftables : armer le pare-feu coupait la main qui l arme MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Une session SSH ouverte AVANT le demarrage de nftables n a aucune entree conntrack. Des que le ruleset s installe, ses paquets arrivent en invalid et tombent sur la regle ct state invalid drop : la session meurt. Les connexions NEUVES passent sans probleme. Le pare-feu est correct ; c est la continuite qui ne l est pas. CE N EST PAS UN VERROUILLAGE, ET C EST CE QUI LE REND DANGEREUX. Rien n echoue : Ansible attend une reponse qui ne viendra jamais, sans delai. Un deploiement est reste suspendu CINQUANTE-HUIT MINUTES sur six machines pendant que les quinze repondaient parfaitement a qui se connectait a neuf. async + poll 0 : on lance et on ne guette pas une reponse qui ne peut pas revenir. reset_connection jette la session morte, wait_for_connection en ouvre une neuve, suivie par conntrack des sa poignee. Le delai est une ATTENTE, pas un verdict : si l hote ne revient pas, c est un vrai verrouillage — la garde nftables_admin_ssh a manque sa cible — et il faut le dire fort plutot que de laisser un playbook pendre. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_019f91zs9SDdwSzL2CVei6on --- roles/nftables_baseline/tasks/main.yml | 32 +++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/roles/nftables_baseline/tasks/main.yml b/roles/nftables_baseline/tasks/main.yml index 98be463..ddba6a1 100644 --- a/roles/nftables_baseline/tasks/main.yml +++ b/roles/nftables_baseline/tasks/main.yml @@ -36,11 +36,41 @@ - nftables_baseline_enabled | bool - not nftables_baseline_ruleset_stat.stat.exists -- name: Activer nftables si demandé +# ARMER LE PARE-FEU COUPE LA MAIN QUI L'ARME (mesure du 2026-08-30). +# +# Une session SSH ouverte AVANT le demarrage de nftables n'a aucune entree conntrack. +# Des que le ruleset s'installe, ses paquets arrivent en `invalid` et tombent sur +# `ct state invalid drop` — la session meurt. Les connexions NEUVES passent sans +# probleme (SYN -> NEW -> suivi) : le pare-feu est correct, c'est la continuite qui +# ne l'est pas. +# +# CE N'EST PAS UN VERROUILLAGE, ET C'EST CE QUI LE REND DANGEREUX. Rien n'echoue : +# Ansible attend une reponse qui ne viendra jamais, sans delai. Le 2026-08-30, un +# deploiement est reste suspendu CINQUANTE-HUIT MINUTES sur six machines, pendant que +# les quinze repondaient parfaitement a qui se connectait a neuf. +# +# `async` + `poll: 0` : on lance et on ne guette pas la reponse — elle ne peut pas +# revenir. `reset_connection` jette la session morte, `wait_for_connection` en ouvre +# une neuve, qui elle sera suivie par conntrack des sa poignee. +- name: Activer nftables si demandé (sans attendre la reponse) ansible.builtin.systemd: name: nftables enabled: true state: started + async: 60 + poll: 0 + when: nftables_baseline_enabled | bool + +- name: Jeter la session que le pare-feu vient de couper + ansible.builtin.meta: reset_connection + +# LE DELAI EST UNE ATTENTE, PAS UN VERDICT : si l'hote ne revient pas, c'est un vrai +# verrouillage — la garde `nftables_admin_ssh` a manque sa cible — et il faut le dire +# fort plutot que de laisser un playbook pendre. +- name: Reprendre la main sur l'hote qu'on vient d'armer + ansible.builtin.wait_for_connection: + delay: 3 + timeout: 90 when: nftables_baseline_enabled | bool - name: Désactiver nftables si demandé