feat(nftables) : les conteneurs n'atteignent plus le plan de management #23

Merged
thystips merged 1 commit from feat/container-egress-filtering into main 2026-08-08 20:22:44 +02:00
Owner

Trouvé en préparant le déplacement d'OpenBao : le pont de sortie existait pour apt, il donnait aussi tout ce que le nœud joint en table globale. Mesuré depuis un conteneur — SSH des quatre nœuds et ca1, joignables. Le plan de management, dont ce dépôt dit partout qu'il est le chemin d'entrée quand l'overlay est mort.

Refermé par énumération. Une exception, non négociable : ca1:8200 — le coffre d'un conteneur en dépend pour son descellement par transit et son certificat de listener.

Deux règles ont été nécessaires, et la seconde n'était pas évidente : fermer le forward suffisait pour les autres nœuds mais pas pour l'hôte lui-même, dont le trafic n'est pas routé mais entre par input. Mesuré ainsi — fr-bod1 tombait, fr-rbx1 restait ouvert depuis son propre conteneur.

Et cette règle d'input a dû être déplacée avant les règles SSH, sans quoi elle ne servait à rien. C'est la leçon que la ligne 125 porte depuis toujours dans son propre commentaire, pour le même piège.

Un détail rassurant : l'API Incus du nœud était déjà hors de portée — le trafic vers la machine elle-même n'est pas NATé, garde la source 10.42.0.x, hors des plages autorisées. Le filtrage par source y avait pourvu sans qu'on y pense.

Vérifié sur les quatre, changed=0 au second passage.

Trouvé en préparant le déplacement d'OpenBao : le pont de sortie existait pour `apt`, il donnait aussi **tout ce que le nœud joint en table globale**. Mesuré depuis un conteneur — SSH des quatre nœuds et `ca1`, joignables. Le plan de management, dont ce dépôt dit partout qu'il est le chemin d'entrée quand l'overlay est mort. Refermé par énumération. **Une exception, non négociable** : `ca1:8200` — le coffre d'un conteneur en dépend pour son descellement par transit *et* son certificat de listener. **Deux règles ont été nécessaires**, et la seconde n'était pas évidente : fermer le `forward` suffisait pour les autres nœuds mais pas pour l'hôte lui-même, dont le trafic n'est pas routé mais entre par `input`. Mesuré ainsi — `fr-bod1` tombait, `fr-rbx1` restait ouvert depuis son propre conteneur. Et cette règle d'`input` a dû être **déplacée avant les règles SSH**, sans quoi elle ne servait à rien. C'est la leçon que la ligne 125 porte depuis toujours dans son propre commentaire, pour le même piège. Un détail rassurant : l'API Incus du nœud était **déjà** hors de portée — le trafic vers la machine elle-même n'est pas NATé, garde la source `10.42.0.x`, hors des plages autorisées. Le filtrage par source y avait pourvu sans qu'on y pense. Vérifié sur les quatre, `changed=0` au second passage.
Trouvé en préparant le déplacement d'OpenBao, et c'est un effet de bord que personne
n'avait demandé : le pont de sortie existait pour `apt`, il donnait aussi tout ce que le
nœud joint en table globale. Mesuré depuis un conteneur — SSH des quatre nœuds, `ca1`,
tous joignables. Le plan de management, dont ce dépôt dit partout qu'il est le chemin
d'entrée quand l'overlay est mort.

Refermé par énumération, comme ailleurs. UNE exception, et elle n'est pas négociable :
`ca1:8200`. Le coffre d'un conteneur en dépend pour son descellement par transit ET pour
son certificat de listener — un coffre qui ne se descelle pas est un coffre perdu.

IL A FALLU DEUX RÈGLES, ET LA SECONDE N'ÉTAIT PAS ÉVIDENTE. Fermer le `forward` suffisait
pour les autres nœuds mais pas pour l'hôte lui-même : le trafic vers la machine n'est pas
routé, il entre par `input`, où la règle SSH générale l'acceptait. Mesuré exactement
ainsi — `fr-bod1` tombait, `fr-rbx1` restait ouvert depuis son propre conteneur.

Et la règle d'`input` a dû être DÉPLACÉE avant les règles SSH, faute de quoi elle ne
servait à rien : nftables prend la première correspondance. C'est la leçon que la
ligne 125 porte depuis toujours, dans son propre commentaire, pour exactement le même
piège. La relire aurait fait gagner un aller-retour.

Un détail qui rassure plutôt qu'il n'inquiète : l'API Incus du nœud était DÉJÀ hors de
portée. Le trafic vers la machine elle-même ne sort pas, donc n'est pas NATé, donc garde
la source `10.42.0.x` — hors des plages que sa règle autorise. Le filtrage par source y
avait pourvu sans qu'on y pense.

Vérifié sur les quatre : `ca1` et internet ouverts, SSH et API de l'hôte fermés,
résolution intacte. `changed=0` au second passage.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FGwvXLVXJ2PrRFwJTB3Xp9
thystips deleted branch feat/container-egress-filtering 2026-08-08 20:22:44 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
ThysTips_dn42/infra-dn42!23
No description provided.