From 35831608d08679d0a1221321e46a3c54dc1c1e4d Mon Sep 17 00:00:00 2001 From: Daniel Allaire Date: Mon, 28 Sep 2026 15:01:04 -0400 Subject: [PATCH] pare-feu proxmox : un flux ICMP devient une regle, au lieu d etre saute Le type ICMP (echo-request) etait range parmi les ports derives et le flux saute : le ping de supervision n avait pas de regle, et web-frontal-01 passe en REJECT est devenu mort pour Icinga. icmp_type dans le devis, icmp-type vers l API. Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 20 ++++++++++++++++++++ scripts/devis_proxmox_fw.py | 7 +++++-- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7555a03..3f78044 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,25 @@ # CHANGELOG — Set-OPS +## 2026-09-28 (11) — Première VM filtrée par Proxmox, et le ping de supervision qu'aucune règle ne portait + +**Activée : `web-frontal-01` de Technolibre** (`--vm 123603101`), pare-feu `enable=1`, +`policy_in=REJECT`, groupes `cli-metrique`, `srv-debian`, `srv-web-frontal`. Vérifié flux par +flux : SSH du poste, rapports de santé et de sauvegarde acceptés, `node_exporter` joint par +`obs-01`, SSH depuis la flotte (autorisé par `srv-debian`, déclaré), port 80 ouvert à l'edge +seul (rien n'y écoute encore : aucun site). Icinga : tout vert — sauf un critique NOUVEAU. + +**`ping4` : 100 % de pertes.** Le ping de supervision EST déclaré (`serveur_debian`, +`echo-request` depuis `serveur_icinga`), mais `_ports()` ne garde que les nombres : le type +ICMP était rangé parmi les « ports dérivés » et le flux sauté. Aucune règle, donc `REJECT`. +`_cibles()` rend désormais un flux ICMP en règle `proto: icmp` + `icmp_type`, que +l'applicateur transmet (`icmp-type`) et compare. Appliqué : `srv-debian` des deux locataires +accepte `echo-request` depuis `srv-icinga` ; `ping4` revenu OK (0,20 ms). + +**Vérifié avant d'aller plus loin** : le « sans source » `serveur_icinga:5665` que recense le +devis est le flux de `serveur_backup`, qu'aucun locataire ne porte — les rapports passifs, +eux, ont leurs règles (`cli-backup`, `srv-debian`). Et le recensement ne déclare plus sauté +un flux ICMP qu'il rend. + ## 2026-09-28 (10) — Le pare-feu est-ouest de Proxmox ne filtrait aucune VM des locataires **Mesuré.** Pare-feu du datacenter actif, `firewall=1` sur les cartes des 26 VM de Chezlepro diff --git a/scripts/devis_proxmox_fw.py b/scripts/devis_proxmox_fw.py index 3e5b68b..05ab483 100644 --- a/scripts/devis_proxmox_fw.py +++ b/scripts/devis_proxmox_fw.py @@ -196,7 +196,7 @@ def construire(tenants: list[tuple[str, str, dict]]) -> dict: if pairs == ["localhost"]: continue # boucle locale : aucune regle inter-noeud if not _resoudre_sources(data, fl.get("pair"), tous, ips): - sans_source.append(f"{groupe}:{','.join(_ports(fl))}") + sans_source.append(f"{groupe}:{','.join(str(c.get('dport') or c.get('icmp_type')) for c in _cibles(fl))}") continue # UNE REGLE PAR ROLE SOURCE. Un flux dont le pair liste quatre roles # donne quatre regles, chacune renvoyant a l'IPSet de son role : la @@ -245,7 +245,10 @@ def construire(tenants: list[tuple[str, str, dict]]) -> dict: # Sans cette regle, la premiere VM passee en `policy_in=REJECT` se ferme # derriere l'outil qui vient de la configurer. Meme source unique que # les nftables et la frontiere : l'intrant `nftables_admin_ssh`. - if "22" in _ports(fl) and admin_de(nom): + # `_ports` seulement pour TCP/UDP : appele sur un flux ICMP, il rangeait le + # type parmi les « ports derives sautes » — un flux pourtant rendu. + if (str(fl.get("protocole", "tcp")).lower() != "icmp" + and "22" in _ports(fl) and admin_de(nom)): utilises.add(f"t{n['index']}-admin") regles.append({ "action": "ACCEPT", "sens": "IN",