From b5ca369ae7d481ada897e7a04739ab2a89d62d58 Mon Sep 17 00:00:00 2001 From: Daniel Allaire Date: Sun, 2 Aug 2026 20:11:15 -0400 Subject: [PATCH] devis switch : la liaison des ACL n'existe pas sur une interface VLAN MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `ip ?` sur une interface VLAN du Binardat n'offre aucun `access-group`, et la liste complète des commandes de ce mode n'en contient pas davantage. La ligne `ip access-group in` posée sur les douze SVI n'existe pas sur cette plateforme. C'est la ligne qui rend l'isolation effective. Sans elle, les ACL de la section 3 sont parfaitement définies et jamais liées : `show access-lists` afficherait « used 0 time(s) », et rien d'autre ne signalerait que l'isolation inter-tenant ne filtre rien. Même signature que le défaut du trunk — une configuration qui a l'air juste et n'agit pas. Le `firewall disable` aperçu dans un `show running-config` prend rétrospectivement du sens : le filtrage semble conditionné globalement. Aucune forme de remplacement n'est devinée. Le devis porte un avertissement à cet endroit, en dialecte `binardat` uniquement — après trois syntaxes supposées dont deux fausses, marquer l'incertitude vaut mieux qu'un quatrième pari. Preuves : 24 OK, 0 échec. Co-Authored-By: Claude Opus 5 --- CHANGELOG.md | 20 ++++++++++++++++++++ docs/frontiere-opnsense.md | 15 ++++++++++++--- scripts/devis_reseau.py | 10 ++++++++++ 3 files changed, 42 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 911e652..013110b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,25 @@ # CHANGELOG — Set-OPS +## 2026-08-02 (suite 18) — la liaison des ACL n'existe pas sur une interface VLAN + +`ip ?` sur une interface VLAN du Binardat n'offre **aucun `access-group`**, et la liste +complète des commandes de ce mode n'en contient pas davantage. La ligne +`ip access-group in` que le devis pose sur les douze SVI n'existe donc pas sur cette +plateforme. + +**C'est la ligne qui rend l'isolation effective.** Sans elle, les ACL de la section 3 sont +parfaitement définies et jamais liées : `show access-lists` afficherait « used 0 time(s) », et +rien d'autre ne signalerait que l'isolation inter-tenant ne filtre rien. Même signature que le +défaut du trunk — une configuration qui a l'air juste et n'agit pas. + +Le `firewall disable` aperçu dans un `show running-config` prend rétrospectivement du sens : +le filtrage semble conditionné globalement. + +**Aucune forme de remplacement n'est devinée.** Le devis porte un avertissement à cet endroit, +en dialecte `binardat` uniquement — après trois syntaxes supposées dont deux fausses, marquer +l'incertitude vaut mieux qu'un quatrième pari. Reste à trancher sur une interface **physique** +(`ip ?`, `access-group ?`) et sur le rôle de `firewall enable`. + ## 2026-08-02 (suite 17) — spanning-tree vérifié : les six familles sont closes `spanning-tree ?` en mode configuration tranche la dernière inconnue, **en faveur de la forme diff --git a/docs/frontiere-opnsense.md b/docs/frontiere-opnsense.md index 14cc9be..5055cd2 100644 --- a/docs/frontiere-opnsense.md +++ b/docs/frontiere-opnsense.md @@ -324,11 +324,20 @@ surtout les trunks, dont la forme `add` ne retranchait rien. | Ligne émise | Où | Risque | |---|---|---| | `spanning-tree portfast trunk` | interface | `trunk` est un mot-clé Cisco ; l'équivalent s'écrit souvent `spanning-tree portfast` seul, voire `edged-port` | -| `ip access-group in` | interface | c'est ce qui **lie** l'ACL au SVI — sans elle, l'ACL existe et ne filtre rien | +| `ip access-group in` | interface VLAN | **probablement invalide** : `ip ?` sur une interface VLAN n'offre aucun `access-group` (vérifié le 2026-08-02). Le filtrage semble aussi conditionné globalement par `firewall enable` | | `ip default-gateway ` | global | forme des switches d'accès (partie B) | -L'aide de `spanning-tree ?` en mode configuration **globale** ne couvre pas les commandes -d'interface : `(config-if)#spanning-tree ?` et `(config-if)#ip ?` les donneraient. +Sur une **interface VLAN**, ni `spanning-tree` ni `ip access-group` n'existent (liste complète +des commandes vérifiée). Pour `portfast` c'est attendu — il vise un port physique. Pour la +liaison des ACL, non : c'est le mécanisme qui rend l'isolation effective. + +**Conséquence, et elle est lourde** : appliqué tel quel, le devis produirait des ACL +parfaitement définies et **jamais liées**. `show access-lists` afficherait « used 0 time(s) », +et rien d'autre ne signalerait que l'isolation inter-tenant ne filtre pas. Le devis porte +désormais un avertissement à cet endroit, en dialecte `binardat` uniquement. + +Reste à trancher sur une interface **physique** : `ip ?`, `access-group ?`, `spanning-tree ?` +— et le rôle de `firewall enable`. - **Les ports physiques restent à nommer** — ``, `` et `` ; rien dans le modèle ne peut les deviner. - ~~**La sortie générale** n'est pas déclarée~~ — **réglé le 2026-08-02.** Elle est diff --git a/scripts/devis_reseau.py b/scripts/devis_reseau.py index d560eaf..1026281 100644 --- a/scripts/devis_reseau.py +++ b/scripts/devis_reseau.py @@ -477,6 +477,16 @@ def generer(tenants: list[tuple[str, str, dict]], dialecte: str | None = None) - out.append(f"vlan {vlan_de(n['index'], zone)}") out.append(f" name {pfx}{n['index']}-{c['libelle']}") out += ["!", "! ----- 2. Interfaces de routage (SVI = passerelle des hotes) -----"] + if dialecte == "binardat": + out += [ + "! /!\\ LA LIGNE `ip access-group ... in` CI-DESSOUS EST DOUTEUSE SUR CETTE", + "! PLATEFORME : `ip ?` sur une interface VLAN n'offre AUCUN `access-group`", + "! (verifie le 2026-08-02). Appliquee telle quelle, elle serait refusee — ou pire,", + "! ignoree : les ACL de la section 3 existeraient sans rien filtrer, exactement", + "! comme un `show access-lists` affichant « used 0 time(s) ».", + "! Le filtrage semble par ailleurs conditionne globalement (`firewall enable`).", + "! A trancher par `ip ?` et `access-group ?` sur une interface PHYSIQUE.", + ] for nom, pfx, n in tenants: m = masque(int(n.get("cidr_hote", 24))) for zone in sorted(n["categories"]):