nftables : armer le pare-feu coupait la main qui l arme
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 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019f91zs9SDdwSzL2CVei6on
This commit is contained in:
parent
bb63865a37
commit
6f4833e65c
1 changed files with 31 additions and 1 deletions
|
|
@ -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é
|
||||
|
|
|
|||
Loading…
Reference in a new issue