50 KiB
Document 5 : Architecture de Référence & Standards Techniques
L'Alliance Boréale — Couches 1 à 4
Version: 1.0
Date: 23 octobre 2025
Statut: Document opérationnel
Adopté par : Cercle Opérationnel
Licence: CC BY-SA 4.0
PRÉAMBULE
L'interopérabilité ne se décrète pas. Elle se construit sur des standards partagés et des conventions claires.
Ce document établit les règles techniques pour les couches 1 à 4 de l'architecture boréale :
- Couche 1 : Physique (serveurs, réseau)
- Couche 2 : Réseau (DNS, connectivité)
- Couche 3 : Stockage (volumes, backups)
- Couche 4 : Orchestration (IaC, automatisation)
Principe fondamental : Nomenclature mnémotechnique
"Un nom doit se comprendre sans documentation. Si tu dois chercher dans un wiki pour savoir ce que signifie
srv-xz42-prod, le nom est mauvais."
Nos conventions suivent trois règles d'or :
-
Clarté > Concision
Préférermail-prod-01àmp1(3 caractères économisés ne valent pas la confusion). -
Patterns répétés
Si un pattern fonctionne pour le membre A, il doit fonctionner pour le membre B (prédictibilité). -
Lecture par humains ET machines
Les noms doivent être parsables automatiquement SANS sacrifier la lisibilité humaine.
Ce document est vivant. Il évoluera avec nos apprentissages. Toute proposition d'amélioration est bienvenue (pull request sur Registraire).
SECTION 1 : CONVENTIONS DE NOMENCLATURE
1.1 Membres — Identifiants et Slugs
Chaque membre possède deux identifiants :
ID Numérique (Machine-Readable)
Format : mXXX où XXX est un entier séquentiel sur 3 chiffres.
Exemples :
m001: Premier membre (fondateur)m002: Deuxième membrem042: Quarante-deuxième membre
Usage :
- Clé primaire dans Registraire YAML
- Références internes (décisions, audits)
- URLs de vérification (
registraire.alliance-boreale.ca/membres/m001)
Avantages :
- Unique
- Court
- Facile à parser
- Ordre d'arrivée visible
Inconvénients :
- Pas mnémotechnique (on ne sait pas qui est m042 sans chercher)
Slug Textuel (Human-Readable)
Format : [a-z0-9-]{3,20} (minuscules, chiffres, tirets, 3-20 caractères)
Exemples :
chezlepro(Chez le Pro)technolibre(TechnoLibre)coop-nordique(Coopérative Nordique)hebergement-ethique(Hébergement Éthique Inc.)
Règles :
- Pas d'accents (compatibilité DNS/URLs)
- Pas d'espaces (remplacés par tirets)
- Pas de caractères spéciaux (@, %, &, etc.)
- Unique dans L'Alliance (vérification lors de l'admission)
Usage :
- Sous-domaines DNS (
chezlepro.boreal.ca) - Communication informelle (Matrix, email)
- URLs publiques (
chezlepro.ca)
Avantages :
- Mnémotechnique (on sait immédiatement de qui on parle)
- Identité de marque préservée
- SEO-friendly
Mapping ID ↔ Slug
Fichier de référence : registraire/membres/[ID]-[slug].yml
Exemple :
# Fichier : registraire/membres/m001-chezlepro.yml
member_id: m001
slug: chezlepro
legal_name: "Chez le Pro Technologies Inc."
...
Convention de nommage du fichier :
Toujours [ID]-[slug].yml pour lier visuellement les deux identifiants.
1.2 Domaines — Architecture DNS Fédérée
Domaine Racine de la Fédération
Décision stratégique requise (à valider par Cercle Stratégique) :
Option A : boreal.ca
- Court, mémorable
- Identité forte (référence directe au nom de l'Alliance)
- Disponibilité à vérifier
Option B : alliance-boreale.ca
- Explicite (aucune ambiguïté)
- Plus long (impact sur sous-domaines)
- Probablement disponible
Option C : .coop ou autre TLD
- Signal identitaire (mouvement coopératif)
- TLD
.coop= réservé aux coopératives (pas applicable aux OBNL)
Recommandation temporaire (ce document) :
Utiliser boreal.ca dans les exemples, mais décision finale à valider avant déploiement.
Structure des Sous-domaines
Hiérarchie standard :
boreal.ca (racine fédérée)
│
├── membre.[slug].boreal.ca → Zone déléguée au membre
│ ├── mail.[slug].boreal.ca → Service email
│ ├── cloud.[slug].boreal.ca → Nextcloud/stockage
│ ├── matrix.[slug].boreal.ca → Serveur Matrix
│ ├── status.[slug].boreal.ca → Page de statut
│ └── www.[slug].boreal.ca → Site web (optionnel)
│
├── outils.boreal.ca → Outils communs L'Alliance
│ ├── registraire.boreal.ca → Registraire public
│ ├── forge.boreal.ca → Forge logicielle
│ ├── wiki.boreal.ca → Documentation
│ └── matrix.boreal.ca → Matrix fédéral
│
└── ns[1-3].boreal.ca → Serveurs DNS autoritaires
├── ns1.boreal.ca → Serveur primaire (membre fondateur)
├── ns2.boreal.ca → Serveur secondaire (autre membre)
└── ns3.boreal.ca → Serveur tertiaire (optionnel)
Exemple Concret : Membre "Chez le Pro" (m001 / chezlepro)
Domaine délégué : chezlepro.boreal.ca
Services standards :
mail.chezlepro.boreal.ca → Postfix/Dovecot
cloud.chezlepro.boreal.ca → Nextcloud
matrix.chezlepro.boreal.ca → Synapse
status.chezlepro.boreal.ca → Upptime/Cachet
www.chezlepro.boreal.ca → Site vitrine
Serveurs DNS (internes) :
ns1.chezlepro.boreal.ca → Serveur DNS primaire du membre
ns2.chezlepro.boreal.ca → Serveur DNS secondaire (si redondance)
Zone DNS déléguée (fichier) :
registraire/dns/zones/chezlepro.boreal.ca.zone
Services Réservés (Tous les Membres)
Ces sous-domaines DOIVENT suivre la convention :
| Service | Sous-domaine | Protocole | Port | Obligatoire ? |
|---|---|---|---|---|
| Email (SMTP) | mail.[slug].boreal.ca |
SMTP/S | 25, 587 | ✅ Oui |
| Email (IMAP) | mail.[slug].boreal.ca |
IMAP/S | 143, 993 | ✅ Oui |
| Webmail | webmail.[slug].boreal.ca |
HTTPS | 443 | ⚠️ Recommandé |
| Stockage cloud | cloud.[slug].boreal.ca |
HTTPS | 443 | ⚠️ Recommandé |
| Calendrier/Contacts | dav.[slug].boreal.ca |
HTTPS | 443 | ⚠️ Recommandé |
| Messagerie Matrix | matrix.[slug].boreal.ca |
HTTPS | 8448 | ⚠️ Recommandé |
| Status page | status.[slug].boreal.ca |
HTTPS | 443 | ✅ Oui |
| Monitoring (Prometheus) | prometheus.[slug].boreal.ca |
HTTPS | 443 | ⚠️ Recommandé |
| Monitoring (Grafana) | grafana.[slug].boreal.ca |
HTTPS | 443 | ⚠️ Recommandé |
Flexibilité autorisée :
Si un membre utilise un service équivalent sous un autre nom (ex: files au lieu de cloud), c'est acceptable, mais la convention doit être documentée dans la fiche membre.
Anti-Patterns (À Éviter)
❌ Sous-domaines opaques :
srv1.boreal.ca(quel service ?)app.boreal.ca(quelle application ?)prod.boreal.ca(trop vague)
❌ Hiérarchie trop profonde :
mail.services.production.chezlepro.boreal.ca(6 niveaux = trop)
❌ Mélange ID et slug :
mail.m001.boreal.ca(incohérent, choisir ID OU slug)
1.3 Infrastructure — Serveurs, VMs, Conteneurs
Serveurs Physiques
Format : srv-[rôle]-[numero].[slug].internal
Exemples :
srv-compute-01.chezlepro.internal → Serveur de calcul (hyperviseur)
srv-compute-02.chezlepro.internal → Deuxième serveur de calcul
srv-storage-01.chezlepro.internal → Serveur de stockage (NAS/SAN)
srv-network-01.chezlepro.internal → Routeur/firewall
Rôles standards :
compute: Hyperviseur (Proxmox, OpenStack, ESXi)storage: Stockage (NAS, SAN, Ceph)network: Infrastructure réseau (routeur, firewall, load balancer)backup: Serveur de backups dédiémonitoring: Serveur monitoring/logging dédié
Numérotation :
Séquentielle par rôle (compute-01, compute-02, etc.)
Domaine .internal :
Réservé à l'infrastructure interne (non exposée publiquement).
Machines Virtuelles (VMs)
Format : vm-[service]-[techno]-[numero].[slug].internal
Exemples :
vm-web-nginx-01.chezlepro.internal → VM web avec Nginx
vm-web-nginx-02.chezlepro.internal → Deuxième VM web (load balancing)
vm-db-postgres-01.chezlepro.internal → Base de données PostgreSQL
vm-db-postgres-02.chezlepro.internal → Réplica PostgreSQL
vm-mail-postfix-01.chezlepro.internal → Serveur mail Postfix/Dovecot
vm-cloud-nextcloud-01.chezlepro.internal → Nextcloud
Pattern :
vm-: Préfixe (identifie type ressource)[service]: web, db, mail, cloud, matrix, backup, monitoring[techno]: nginx, apache, postgres, mysql, postfix, nextcloud, etc.[numero]: Séquentiel (01, 02, 03...)
Avantages :
- On sait immédiatement ce que fait la VM
- On sait quelle techno est utilisée (utile pour troubleshooting)
- On sait s'il y a redondance (02, 03...)
Conteneurs (Docker, LXC, Kubernetes)
Format : ct-[service]-[techno]-[numero].[slug].internal
Exemples :
ct-web-nginx-01.chezlepro.internal → Conteneur web Nginx
ct-api-nodejs-01.chezlepro.internal → API Node.js
ct-cache-redis-01.chezlepro.internal → Cache Redis
ct-queue-rabbitmq-01.chezlepro.internal → File d'attente RabbitMQ
Distinction VM vs Conteneur :
vm-: Machine virtuelle complète (kernel propre)ct-: Conteneur (partage kernel avec l'hôte)
Kubernetes :
Si utilisation de Kubernetes, convention adaptée :
k8s-[namespace]-[pod]-[replica].[slug].internal
k8s-prod-web-nginx-01.chezlepro.internal
k8s-prod-api-nodejs-01.chezlepro.internal
DNS Interne (Zone .internal)
Serveur DNS interne :
Chaque membre DEVRAIT opérer un DNS interne pour résolution locale (dnsmasq, Bind9, Unbound).
Zone recommandée : [slug].internal
Exemple de zone pour Chez le Pro :
chezlepro.internal. SOA ns1.chezlepro.internal. admin.chezlepro.ca. (...)
; Serveurs physiques
srv-compute-01.chezlepro.internal. A 10.0.1.10
srv-storage-01.chezlepro.internal. A 10.0.1.20
; Machines virtuelles
vm-web-nginx-01.chezlepro.internal. A 10.0.2.10
vm-db-postgres-01.chezlepro.internal. A 10.0.2.20
; Conteneurs
ct-cache-redis-01.chezlepro.internal. A 10.0.3.10
Isolation :
La zone .internal n'est PAS déléguée à la fédération. Elle reste privée au membre.
1.4 Stockage — Volumes, Backups, Archives
Volumes de Stockage
Format LVM : vg-[rôle]/lv-[service]-[numero]
Exemples :
vg-data/lv-postgres-01 → Volume logique pour PostgreSQL
vg-data/lv-nextcloud-01 → Volume logique pour Nextcloud
vg-backup/lv-daily-01 → Volume logique pour backups quotidiens
Format ZFS : pool-[rôle]/dataset-[service]
Exemples :
pool-data/vm-web-nginx-01 → Dataset ZFS pour VM web
pool-data/vm-db-postgres-01 → Dataset ZFS pour VM base de données
pool-backup/snapshots → Dataset pour snapshots ZFS
Backups — Fichiers d'Archive
Format : backup-[frequence]-[slug]-[service]-[YYYYMMDD]-[HHMMSS].tar.gz.gpg
Exemples :
backup-daily-chezlepro-postgres-20251023-020000.tar.gz.gpg
backup-weekly-chezlepro-nextcloud-20251020-030000.tar.gz.gpg
backup-monthly-chezlepro-full-20251001-040000.tar.gz.gpg
Éléments :
frequence: daily, weekly, monthlyslug: Identifiant du membreservice: Service sauvegardé (postgres, nextcloud, mail, full)YYYYMMDD: Date (format ISO 8601, triable)HHMMSS: Heure (optionnel mais recommandé pour multiples backups/jour).tar.gz.gpg: Compression + chiffrement (GPG)
Avantages :
- Tri alphabétique = tri chronologique
- On sait immédiatement : quoi, quand, par qui
- Parsing facile pour scripts de rétention
Rétention et Rotation
Politique recommandée (modèle 3-2-1) :
| Fréquence | Rétention | Copies | Localisation |
|---|---|---|---|
| Quotidien | 7 jours | 2 | Local + Pair |
| Hebdomadaire | 4 semaines | 2 | Local + Pair |
| Mensuel | 12 mois | 3 | Local + Pair + Cloud |
Rotation automatisée :
Script ou outil (restic, borg, rsnapshot) selon préférence du membre.
Nommage des destinations :
/backup/local/daily/
/backup/local/weekly/
/backup/local/monthly/
/backup/remote/pair-m002/ → Backup chez un pair (membre m002)
/backup/remote/offsite/ → Backup hors-site (cloud éthique)
1.5 Secrets & Credentials
Ansible Vault — Variables Chiffrées
Format : vault_[slug]_[service]_[credential_type]
Exemples :
vault_chezlepro_db_postgres_password: "!vault |..."
vault_chezlepro_api_matrix_token: "!vault |..."
vault_chezlepro_backup_gpg_passphrase: "!vault |..."
vault_chezlepro_ssl_privkey_password: "!vault |..."
Pattern :
- Préfixe
vault_(obligatoire, Ansible) [slug]: Identifiant membre[service]: Service concerné (db, api, backup, ssl)[credential_type]: password, token, passphrase, key, secret
Fichier de stockage :
ansible/inventories/[slug]/group_vars/all/vault.yml
Chiffrement :
ansible-vault encrypt vault.yml
Secrets Kubernetes (si applicable)
Format : secret-[namespace]-[service]-[type]
Exemples :
secret-prod-postgres-credentials
secret-prod-matrix-api-token
secret-staging-nextcloud-admin-password
Gestion :
Sealed Secrets, External Secrets Operator, ou Vault (HashiCorp).
Certificats SSL/TLS
Format : cert-[slug]-[type]-[YYYYMMDD].[extension]
Exemples :
cert-chezlepro-wildcard-20251023.pem → Certificat wildcard
cert-chezlepro-wildcard-20251023.key → Clé privée
cert-chezlepro-mail-20251023.pem → Certificat service mail
cert-chezlepro-matrix-20251023.pem → Certificat service Matrix
Types :
wildcard: Certificat wildcard (*.chezlepro.boreal.ca)[service]: Certificat spécifique à un service (mail, matrix, cloud)
Renouvellement :
Let's Encrypt renouvelle tous les 90 jours. Le timestamp dans le nom aide à tracer les versions.
Stockage :
/etc/ssl/certs/alliance/cert-chezlepro-wildcard-20251023.pem
/etc/ssl/private/alliance/cert-chezlepro-wildcard-20251023.key (chmod 600)
1.6 Récapitulatif des Conventions
| Objet | Format | Exemple |
|---|---|---|
| Membre ID | mXXX |
m001 |
| Membre Slug | [a-z0-9-]{3,20} |
chezlepro |
| Domaine public | [service].[slug].boreal.ca |
mail.chezlepro.boreal.ca |
| Domaine interne | [type]-[service]-[num].[slug].internal |
vm-web-nginx-01.chezlepro.internal |
| Serveur physique | srv-[role]-[num].[slug].internal |
srv-compute-01.chezlepro.internal |
| VM | vm-[service]-[tech]-[num].[slug].internal |
vm-db-postgres-01.chezlepro.internal |
| Conteneur | ct-[service]-[tech]-[num].[slug].internal |
ct-cache-redis-01.chezlepro.internal |
| Volume LVM | vg-[role]/lv-[service]-[num] |
vg-data/lv-postgres-01 |
| Backup | backup-[freq]-[slug]-[service]-[YYYYMMDD].tar.gz.gpg |
backup-daily-chezlepro-postgres-20251023.tar.gz.gpg |
| Secret Ansible | vault_[slug]_[service]_[type] |
vault_chezlepro_db_password |
| Certificat SSL | cert-[slug]-[type]-[YYYYMMDD].pem |
cert-chezlepro-wildcard-20251023.pem |
SECTION 2 : ARCHITECTURE RÉSEAU FÉDÉRÉE
2.1 Topologie de Référence
Vue d'Ensemble
┌─────────────────────────────────────┐
│ Internet Public │
└──────────┬──────────────────────────┘
│
┌────────────────────┼────────────────────┐
│ │ │
┌──────▼──────┐ ┌──────▼──────┐ ┌──────▼──────┐
│ Membre A │ │ Membre B │ │ Membre C │
│ (m001) │ │ (m002) │ │ (m003) │
└─────────────┘ └─────────────┘ └─────────────┘
│ │ │
│ VPN maillé (optionnel, si besoin) │
└────────────────────┼────────────────────┘
│
┌──────────▼─────────────┐
│ DNS Fédéré (AXFR) │
│ ns1, ns2, ns3 │
└────────────────────────┘
Principes :
- Autonomie locale : Chaque membre opère son infrastructure indépendamment
- Interconnexion par standards ouverts : DNS (AXFR), SMTP, Matrix, etc.
- VPN optionnel : Uniquement si besoin (administration mutuelle, backups croisés)
- Pas de point central : Pas de serveur "maître" contrôlant tout
2.2 Plages IP et Adressage
IP Publiques
Recommandation : Chaque membre conserve ses propres IP publiques (hébergeur, ISP).
Pas d'allocation centrale. L'Alliance ne fournit pas d'IPs publiques.
BGP Peering (Optionnel, Avancé) :
Si plusieurs membres ont des AS (Autonomous Systems), peering BGP possible pour optimiser routes. Non requis pour phase pilote.
IP Privées (RFC 1918)
Recommandation par membre :
Plage recommandée : 10.[ID].[0-255].[0-255]/16
Exemples :
- Membre m001 :
10.1.0.0/16 - Membre m002 :
10.2.0.0/16 - Membre m003 :
10.3.0.0/16
Découpage suggéré :
10.1.0.0/24 → Gestion (switches, IPMI, ILO)
10.1.1.0/24 → Serveurs physiques
10.1.2.0/24 → VMs production
10.1.3.0/24 → VMs staging
10.1.4.0/24 → Conteneurs
10.1.10.0/24 → VPN (interconnexion)
10.1.100.0/24 → Réseau invités (si applicable)
Avantages :
- Pas de collision entre membres (ID unique)
- Lisibilité (10.1.x.x = m001, 10.2.x.x = m002)
- Scalabilité (65k IPs par membre)
2.3 Pare-feu — Ports Standards Ouverts
Ports Obligatoires (Services Publics)
| Service | Port(s) | Protocole | Commentaire |
|---|---|---|---|
| HTTP | 80 | TCP | Redirection vers HTTPS |
| HTTPS | 443 | TCP | Tous les services web |
| SMTP | 25 | TCP | Réception email (MX) |
| Submission | 587 | TCP | Envoi email (STARTTLS) |
| IMAPS | 993 | TCP | Lecture email (SSL/TLS) |
| DNS | 53 | TCP/UDP | DNS autoritaire public |
| Matrix Federation | 8448 | TCP | Fédération Matrix (si applicable) |
Ports Recommandés (Services Optionnels)
| Service | Port(s) | Protocole | Commentaire |
|---|---|---|---|
| SSH | 22 ou custom | TCP | Admin (filtré par IP si possible) |
| SMTP/S | 465 | TCP | Envoi email SSL/TLS legacy |
| POP3S | 995 | TCP | Si POP3 supporté |
| CalDAV/WebDAV | 443 | TCP | Via HTTPS (port standard) |
| XMPP | 5222, 5269 | TCP | Si XMPP utilisé |
Ports VPN (Si Interconnexion)
| VPN | Port(s) | Protocole | Commentaire |
|---|---|---|---|
| WireGuard | 51820 (défaut) | UDP | Recommandé (moderne, performant) |
| OpenVPN | 1194 (défaut) | UDP/TCP | Alternative |
| IPsec | 500, 4500 | UDP | Si besoin (complexe) |
2.4 VPN Site-à-Site (Optionnel)
Cas d'usage :
- Backups croisés entre membres
- Monitoring mutuel (accès Prometheus/Grafana)
- Administration mutualisée (support technique)
Technologie recommandée : WireGuard
Avantages :
- Simple à configurer
- Performant (kernel-space)
- Sécurisé (cryptographie moderne)
- Multi-plateformes
Topologie recommandée : Maillée (Full-Mesh)
Exemple 3 membres :
m001 ↔ m002
m001 ↔ m003
m002 ↔ m003
Configuration WireGuard (Exemple m001 → m002) :
Sur m001 :
[Interface]
PrivateKey = <clé_privée_m001>
Address = 10.100.1.1/32
ListenPort = 51820
[Peer]
# m002
PublicKey = <clé_publique_m002>
AllowedIPs = 10.100.2.1/32, 10.2.0.0/16
Endpoint = m002.example.com:51820
PersistentKeepalive = 25
Sur m002 :
[Interface]
PrivateKey = <clé_privée_m002>
Address = 10.100.2.1/32
ListenPort = 51820
[Peer]
# m001
PublicKey = <clé_publique_m001>
AllowedIPs = 10.100.1.1/32, 10.1.0.0/16
Endpoint = m001.example.com:51820
PersistentKeepalive = 25
Plage VPN : 10.100.0.0/16
- m001 :
10.100.1.1/32 - m002 :
10.100.2.1/32 - m003 :
10.100.3.1/32
Routes autorisées :
Chaque membre expose son réseau interne (10.[ID].0.0/16) via le VPN.
SECTION 3 : DNS FÉDÉRÉ
3.1 Architecture DNS
Serveurs DNS Autoritaires
Minimum requis : 2 serveurs DNS
Un serveur primaire + un ou plusieurs secondaires (redondance).
Recommandation : 3 serveurs répartis chez différents membres
Exemple :
ns1.boreal.ca → Hébergé chez m001 (Chez le Pro)
ns2.boreal.ca → Hébergé chez m002 (TechnoLibre)
ns3.boreal.ca → Hébergé chez m003 (Coop Nordique)
Enregistrements NS (au registrar) :
boreal.ca. NS ns1.boreal.ca.
boreal.ca. NS ns2.boreal.ca.
boreal.ca. NS ns3.boreal.ca.
ns1.boreal.ca. A <IP_publique_m001>
ns2.boreal.ca. A <IP_publique_m002>
ns3.boreal.ca. A <IP_publique_m003>
Zone Parente (boreal.ca)
Gestion : Cercle Opérationnel (rotation des responsabilités).
Contenu minimal :
$ORIGIN boreal.ca.
$TTL 3600
@ SOA ns1.boreal.ca. admin.alliance-boreale.ca. (
2025102301 ; Serial (YYYYMMDDNN)
3600 ; Refresh
1800 ; Retry
1209600 ; Expire (2 semaines)
3600 ; Minimum TTL
)
; Serveurs DNS autoritaires
@ NS ns1.boreal.ca.
@ NS ns2.boreal.ca.
@ NS ns3.boreal.ca.
ns1 A <IP_m001>
ns2 A <IP_m002>
ns3 A <IP_m003>
; Outils communs L'Alliance
registraire A <IP_tool_server>
forge A <IP_tool_server>
wiki A <IP_tool_server>
matrix A <IP_tool_server>
; Délégation zones membres
; (voir Section 3.2)
3.2 Délégation de Zones aux Membres
Principe :
Chaque membre reçoit une zone DNS déléguée ([slug].boreal.ca) qu'il gère de manière autonome.
Processus de délégation :
-
Membre configure ses serveurs DNS
- Serveurs autoritaires pour sa zone (ns1/ns2.[slug].boreal.ca)
- Zone
[slug].boreal.caavec enregistrements de services
-
Membre communique IPs de ses NS au Cercle Opérationnel
- ns1.chezlepro.boreal.ca → 203.0.113.10
- ns2.chezlepro.boreal.ca → 203.0.113.11
-
Cercle Opérationnel ajoute délégation dans zone parente
Exemple de délégation (dans zone boreal.ca) :
; Membre m001 (Chez le Pro)
chezlepro NS ns1.chezlepro.boreal.ca.
chezlepro NS ns2.chezlepro.boreal.ca.
ns1.chezlepro A 203.0.113.10
ns2.chezlepro A 203.0.113.11
; Membre m002 (TechnoLibre)
technolibre NS ns1.technolibre.boreal.ca.
technolibre NS ns2.technolibre.boreal.ca.
ns1.technolibre A 198.51.100.20
ns2.technolibre A 198.51.100.21
Résultat :
Le membre contrôle totalement sa zone. Il peut ajouter/modifier/supprimer enregistrements sans intervention de L'Alliance.
3.3 Réplication AXFR entre Pairs
AXFR = Zone Transfer (RFC 5936)
Objectif : Permettre la réplication complète d'une zone DNS entre serveurs primaire et secondaires.
Configuration (Bind9 exemple) :
Serveur primaire (m001 - ns1.chezlepro.boreal.ca) :
zone "chezlepro.boreal.ca" {
type master;
file "/etc/bind/zones/chezlepro.boreal.ca.zone";
allow-transfer { 203.0.113.11; }; // ns2.chezlepro
notify yes;
};
Serveur secondaire (ns2.chezlepro.boreal.ca) :
zone "chezlepro.boreal.ca" {
type slave;
file "/var/cache/bind/chezlepro.boreal.ca.zone";
masters { 203.0.113.10; }; // ns1.chezlepro
};
Sécurisation :
- Restreindre
allow-transferaux IPs des secondaires - Utiliser TSIG (Transaction Signature) pour authentification
TSIG (Exemple) :
key "chezlepro-axfr-key" {
algorithm hmac-sha256;
secret "base64EncodedSecretKey==";
};
zone "chezlepro.boreal.ca" {
type master;
file "/etc/bind/zones/chezlepro.boreal.ca.zone";
allow-transfer { key chezlepro-axfr-key; };
};
3.4 DNSSEC (Recommandé)
DNSSEC = DNS Security Extensions
Objectif : Authentifier les réponses DNS (prévenir spoofing, cache poisoning).
Processus :
-
Génération de clés (ZSK + KSK)
dnssec-keygen -a RSASHA256 -b 2048 -n ZONE chezlepro.boreal.ca # ZSK dnssec-keygen -a RSASHA256 -b 4096 -n ZONE -f KSK chezlepro.boreal.ca # KSK -
Signature de la zone
dnssec-signzone -o chezlepro.boreal.ca chezlepro.boreal.ca.zone -
Publication DS record chez parent (boreal.ca)
chezlepro DS 12345 8 2 <hash> -
Automatisation du renouvellement
- Les clés DNSSEC expirent (30-90 jours typiquement)
- Script cron pour re-signer automatiquement
Complexité :
DNSSEC ajoute de la complexité opérationnelle. Recommandé pour niveau label Or/Platine, optionnel pour Bronze/Argent.
3.5 Monitoring DNS
Vérifications essentielles :
-
Résolution publique
dig @8.8.8.8 mail.chezlepro.boreal.ca dig @1.1.1.1 chezlepro.boreal.ca NS -
Réplication AXFR
dig @ns2.chezlepro.boreal.ca chezlepro.boreal.ca AXFR -
DNSSEC (si activé)
dig +dnssec chezlepro.boreal.ca -
Santé des NS
dig +trace chezlepro.boreal.ca
Outils recommandés :
- DNSViz (visualisation DNSSEC)
- Zonemaster (analyse qualité DNS)
- Nagios/Icinga checks DNS
SECTION 4 : STANDARDS DE STOCKAGE
4.1 Systèmes de Fichiers Recommandés
Pour VMs et conteneurs :
| Use Case | Recommandation | Rationale |
|---|---|---|
| VM disks | LVM + ext4 | Simplicité, maturité |
| VM disks (avancé) | ZFS | Snapshots, compression, checksums |
| Conteneurs | Overlay2 (Docker) | Standard Docker |
| NAS/SAN | ZFS ou Ceph | Résilience, scalabilité |
| Backups | Ext4 ou XFS | Performance séquentielle |
ZFS avantages :
- Snapshots instantanés
- Compression (LZ4, ZSTD)
- Checksums (détection corruption)
- Réplication (zfs send/recv)
ZFS inconvénients :
- Consommation RAM (1 GB RAM / 1 TB stockage recommandé)
- Complexité configuration
LVM avantages :
- Simple
- Flexible (resize volumes)
- Standard Linux
4.2 Chiffrement au Repos
Obligatoire pour :
- Backups (GPG, borg, restic)
- Bases de données contenant données personnelles
- Volumes contenant secrets (clés, tokens)
Technologies recommandées :
| Couche | Technologie | Usage |
|---|---|---|
| Disque complet | LUKS (dm-crypt) | Chiffrement bloc entier |
| Système de fichiers | eCryptfs, ZFS native encryption | Chiffrement par fichier/dataset |
| Application | GPG, age, borg, restic | Chiffrement archives |
Exemple LUKS :
cryptsetup luksFormat /dev/sdb1
cryptsetup open /dev/sdb1 cryptvol
mkfs.ext4 /dev/mapper/cryptvol
Gestion des clés :
- Clés stockées dans Ansible Vault (chiffrées)
- Ou TPM 2.0 (Trusted Platform Module) si disponible
- Ou HSM (Hardware Security Module) pour haute sécurité
4.3 Backups — Stratégie 3-2-1
Règle 3-2-1 :
- 3 copies des données (originale + 2 backups)
- 2 supports différents (ex: disque local + NAS distant)
- 1 copie hors-site (géographiquement séparée)
Application dans L'Alliance :
| Copie | Localisation | Technologie | Fréquence |
|---|---|---|---|
| 1. Production | Serveur local | VM/conteneur | Temps réel |
| 2. Backup local | NAS local ou autre serveur | rsync, borg, restic | Quotidien |
| 3. Backup pair | Chez un autre membre (VPN) | rsync, borg + chiffrement | Quotidien |
| 4. Backup offsite | Cloud éthique (ex: Wasabi, Backblaze B2) | rclone, restic | Hebdomadaire |
Outils recommandés :
Borg Backup :
- Déduplication (économie espace)
- Compression (LZ4, ZSTD)
- Chiffrement (AES-256)
- Snapshots incrémentaux
Restic :
- Similaire à Borg
- Multi-backend (local, SFTP, S3, B2, etc.)
- Vérification d'intégrité intégrée
Exemple Borg :
# Initialisation repo
borg init --encryption=repokey /backup/local/borg
# Backup quotidien
borg create /backup/local/borg::daily-{now} /data \
--compression lz4 \
--exclude /data/cache
# Pruning (rétention)
borg prune /backup/local/borg \
--keep-daily=7 \
--keep-weekly=4 \
--keep-monthly=12
4.4 Tests de Restauration (Obligatoire)
Règle d'or : Un backup non testé est un backup inexistant.
Fréquence minimale : Trimestrielle (tous les 3 mois).
Procédure :
- Sélectionner un backup aléatoire (ex: backup mensuel du mois dernier)
- Restaurer dans environnement isolé (VM de test)
- Vérifier intégrité (checksums, démarrage services)
- Documenter résultat (runbook ou wiki)
Critères de succès :
- Restauration complète en < [RTO] (ex: 4h)
- Données intègres (aucune corruption)
- Services redémarrables
Documentation obligatoire :
wiki/runbooks/test-restauration-YYYY-MM-DD.md
SECTION 5 : ORCHESTRATION (IaC)
5.1 Ansible — Structure Recommandée
Ansible = Infrastructure as Code pour L'Alliance
Philosophie :
- Déclaratif (décrire l'état désiré, pas les étapes)
- Idempotent (exécuter N fois = même résultat)
- Agentless (SSH uniquement, pas d'agent installé)
Structure de Répertoire Standard
ansible/
├── inventories/
│ ├── production/
│ │ ├── hosts.yml # Inventaire membres prod
│ │ └── group_vars/
│ │ ├── all/
│ │ │ ├── vars.yml # Variables publiques
│ │ │ └── vault.yml # Variables chiffrées (Vault)
│ │ └── membres/
│ │ ├── m001.yml # Variables spécifiques m001
│ │ └── m002.yml
│ └── staging/
│ └── hosts.yml # Inventaire staging (si applicable)
│
├── playbooks/
│ ├── site.yml # Playbook principal
│ ├── dns-setup.yml # Setup DNS
│ ├── monitoring-setup.yml # Setup monitoring
│ └── backup-setup.yml # Setup backups
│
├── roles/
│ ├── common/ # Rôle commun (tous serveurs)
│ │ ├── tasks/
│ │ ├── handlers/
│ │ ├── templates/
│ │ └── vars/
│ ├── dns-server/ # Rôle serveur DNS
│ ├── mail-server/ # Rôle serveur mail
│ └── web-server/ # Rôle serveur web
│
├── group_vars/ # Variables par groupe
│ └── all.yml # Variables globales
│
├── host_vars/ # Variables par hôte
│ └── ns1.chezlepro.boreal.ca.yml
│
└── ansible.cfg # Configuration Ansible
Inventaire (Exemple)
Fichier : inventories/production/hosts.yml
all:
children:
alliance_members:
children:
membre_m001:
hosts:
srv-compute-01.chezlepro.internal:
ansible_host: 203.0.113.10
vm-web-nginx-01.chezlepro.internal:
ansible_host: 10.1.2.10
membre_m002:
hosts:
srv-compute-01.technolibre.internal:
ansible_host: 198.51.100.20
dns_servers:
hosts:
ns1.boreal.ca:
ansible_host: 203.0.113.10
member_id: m001
ns2.boreal.ca:
ansible_host: 198.51.100.20
member_id: m002
mail_servers:
hosts:
mail.chezlepro.boreal.ca:
ansible_host: 10.1.2.20
mail.technolibre.boreal.ca:
ansible_host: 10.2.2.20
Variables (Exemple)
Fichier : group_vars/all/vars.yml
# Variables publiques (non sensibles)
alliance_domain: "boreal.ca"
alliance_ns_servers:
- ns1.boreal.ca
- ns2.boreal.ca
- ns3.boreal.ca
# Paramètres DNS
dns_ttl_default: 3600
dns_refresh: 3600
dns_retry: 1800
dns_expire: 1209600
# Paramètres backup
backup_retention_daily: 7
backup_retention_weekly: 4
backup_retention_monthly: 12
# Paramètres monitoring
prometheus_scrape_interval: 30s
prometheus_retention: 30d
Fichier : group_vars/all/vault.yml (chiffré)
# Variables sensibles (Ansible Vault)
vault_alliance_dns_tsig_key: "base64SecretKey=="
vault_alliance_backup_gpg_passphrase: "SuperSecretPassphrase123"
vault_prometheus_admin_password: "AnotherSecretPass456"
Chiffrement :
ansible-vault encrypt group_vars/all/vault.yml
Playbook (Exemple)
Fichier : playbooks/dns-setup.yml
---
- name: Setup DNS Servers
hosts: dns_servers
become: yes
roles:
- common
- dns-server
tasks:
- name: Configure Bind9 zones
template:
src: "templates/bind/{{ item }}.zone.j2"
dest: "/etc/bind/zones/{{ item }}.zone"
owner: bind
group: bind
mode: '0644'
loop:
- boreal.ca
- "{{ member_slug }}.boreal.ca"
notify: reload bind9
- name: Enable DNSSEC
command: dnssec-signzone -o {{ item }} /etc/bind/zones/{{ item }}.zone
loop:
- boreal.ca
- "{{ member_slug }}.boreal.ca"
when: dnssec_enabled | default(false)
handlers:
- name: reload bind9
service:
name: bind9
state: reloaded
5.2 Secrets Management
Options recommandées :
- Ansible Vault (simple, intégré)
- HashiCorp Vault (avancé, dynamique)
- SOPS (Mozilla) (Git-friendly)
Ansible Vault (recommandé pour débuter) :
# Créer fichier chiffré
ansible-vault create secrets.yml
# Éditer fichier chiffré
ansible-vault edit secrets.yml
# Utiliser dans playbook
ansible-playbook site.yml --ask-vault-pass
# ou avec fichier de mot de passe
ansible-playbook site.yml --vault-password-file ~/.vault_pass
HashiCorp Vault (pour production avancée) :
Avantages :
- Secrets dynamiques (génération à la demande)
- Rotation automatique
- Audit trail complet
- APIs RESTful
Intégration Ansible :
- name: Read database password from Vault
set_fact:
db_password: "{{ lookup('hashi_vault', 'secret=secret/data/postgres:password') }}"
5.3 CI/CD pour Infrastructure
GitOps pour IaC :
Tout changement d'infrastructure passe par Git → Review → Déploiement automatisé.
Workflow recommandé (GitLab CI ou GitHub Actions) :
# .gitlab-ci.yml (exemple)
stages:
- validate
- test
- deploy
ansible-lint:
stage: validate
script:
- ansible-lint playbooks/*.yml
ansible-syntax:
stage: validate
script:
- ansible-playbook playbooks/site.yml --syntax-check
ansible-test-staging:
stage: test
script:
- ansible-playbook -i inventories/staging playbooks/site.yml --check
only:
- merge_requests
ansible-deploy-production:
stage: deploy
script:
- ansible-playbook -i inventories/production playbooks/site.yml
only:
- main
when: manual
Protection :
- Déploiement production = manuel (éviter accidents)
- Review obligatoire (2 pairs minimum)
- Tests automatisés (lint, syntax, dry-run)
SECTION 6 : CERTIFICATS SSL/TLS
6.1 Let's Encrypt (Recommandé)
Let's Encrypt = CA gratuite, automatisée, ouverte
Avantages :
- Gratuit
- Automatisé (renouvellement tous les 90 jours)
- Reconnu universellement (trust stores)
- Support wildcards
Client recommandé : Certbot
# Installation (Debian/Ubuntu)
apt install certbot python3-certbot-nginx
# Obtenir certificat (HTTP-01 challenge)
certbot --nginx -d mail.chezlepro.boreal.ca
# Obtenir wildcard (DNS-01 challenge)
certbot certonly --dns-cloudflare \
--dns-cloudflare-credentials ~/.secrets/cloudflare.ini \
-d '*.chezlepro.boreal.ca'
Renouvellement automatique :
# Cron (vérifie quotidiennement, renouvelle si < 30 jours)
0 3 * * * certbot renew --quiet
6.2 Certificat Wildcard vs Spécifique
Wildcard (*.chezlepro.boreal.ca) :
Avantages :
- Un seul certificat pour tous les sous-domaines
- Simplifie gestion
Inconvénients :
- Nécessite DNS-01 challenge (accès API DNS)
- Si compromis, tous les sous-domaines affectés
Certificats spécifiques (mail.chezlepro.boreal.ca) :
Avantages :
- HTTP-01 challenge (plus simple)
- Isolation (compromission limitée)
Inconvénients :
- Plusieurs certificats à gérer
Recommandation :
Wildcard pour simplifier, SAUF si services très sensibles (séparer).
6.3 Chaîne de Confiance et Formats
Formats de certificats :
| Format | Extension | Usage |
|---|---|---|
| PEM | .pem, .crt, .cer | Standard (texte base64) |
| DER | .der | Binaire (rare) |
| PKCS#12 | .p12, .pfx | Bundle (cert + clé, Windows) |
Fichiers Let's Encrypt (après certbot) :
/etc/letsencrypt/live/mail.chezlepro.boreal.ca/
├── fullchain.pem → Certificat + chaîne complète (à utiliser)
├── cert.pem → Certificat seul
├── chain.pem → Chaîne intermédiaire
└── privkey.pem → Clé privée (chmod 600 !)
Configuration Nginx :
server {
listen 443 ssl http2;
server_name mail.chezlepro.boreal.ca;
ssl_certificate /etc/letsencrypt/live/mail.chezlepro.boreal.ca/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mail.chezlepro.boreal.ca/privkey.pem;
# Protocoles et ciphers sécurisés
ssl_protocols TLSv1.3 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256...';
ssl_prefer_server_ciphers off;
# HSTS
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
}
6.4 Monitoring Expiration
Outils recommandés :
1. SSL Labs (manuel)
https://www.ssllabs.com/ssltest/analyze.html?d=mail.chezlepro.boreal.ca
2. Nagios/Icinga check
/usr/lib/nagios/plugins/check_http -H mail.chezlepro.boreal.ca -S -C 30
# Alerte si expiration < 30 jours
3. Prometheus + Blackbox Exporter
- job_name: 'ssl-expiry'
metrics_path: /probe
params:
module: [http_2xx]
static_configs:
- targets:
- https://mail.chezlepro.boreal.ca
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- target_label: instance
replacement: blackbox-exporter:9115
Alerte Prometheus :
- alert: SSLCertExpiringSoon
expr: probe_ssl_earliest_cert_expiry - time() < 30 * 24 * 3600
annotations:
summary: "SSL certificate expiring soon for {{ $labels.instance }}"
SECTION 7 : MONITORING ET OBSERVABILITÉ
7.1 Stack Recommandée
Prometheus + Grafana + Loki + Alertmanager
| Composant | Rôle | Port | Stockage |
|---|---|---|---|
| Prometheus | Métriques (time-series) | 9090 | Local ou remote (Thanos) |
| Grafana | Visualisation | 3000 | PostgreSQL ou SQLite |
| Loki | Logs (agrégation) | 3100 | S3 ou local |
| Alertmanager | Alertes (routing) | 9093 | Volatile (config) |
| Node Exporter | Métriques serveur | 9100 | N/A (agent) |
| Blackbox Exporter | Probes externes | 9115 | N/A (agent) |
7.2 Métriques à Exporter (Obligatoire Label)
Pour conformité Label (Domaine 1 + 5) :
1. Disponibilité des services
up{job="web-server", instance="vm-web-nginx-01"}
2. Latence HTTP
http_request_duration_seconds{handler="/", method="GET"}
3. Utilisation ressources
node_cpu_seconds_total
node_memory_MemAvailable_bytes
node_disk_io_time_seconds_total
4. État backups
backup_last_success_timestamp_seconds
backup_size_bytes
5. Certificats SSL
probe_ssl_earliest_cert_expiry
Configuration Prometheus (scrape) :
scrape_configs:
- job_name: 'node-exporter'
static_configs:
- targets:
- srv-compute-01.chezlepro.internal:9100
- vm-web-nginx-01.chezlepro.internal:9100
relabel_configs:
- source_labels: [__address__]
target_label: member
replacement: chezlepro
7.3 Dashboard Partagé (Optionnel)
Concept :
Dashboard Grafana centralisé montrant métriques agrégées de tous les membres (avec consentement).
Métriques partagées (anonymisées si sensible) :
- Disponibilité globale (%)
- Incidents P0/P1 (nombre, durée)
- Consommation énergétique agrégée (kWh)
Accès :
- Membres actifs : lecture complète
- Public : tableau de bord synthétique (stats globales)
URL : grafana.boreal.ca/d/alliance-overview
Implémentation :
Prometheus Federation ou Thanos (query multi-tenancy).
SECTION 8 : CONFORMITÉ ET AUDITS
8.1 Checklist Infrastructure (Label Domaine 1)
Avant demande de labellisation, vérifier :
- DNS configuré (ns1, ns2 minimum)
- AXFR fonctionnel entre ns1 et ns2
- DNSSEC activé (recommandé pour Or/Platine)
- Certificats SSL/TLS valides (grade A SSL Labs)
- Backups automatisés quotidiens
- Test de restauration réalisé (< 6 mois)
- Monitoring actif (Prometheus + Node Exporter)
- Alerting configuré (Alertmanager ou équivalent)
- Status page publique (Upptime, Cachet, ou custom)
- Documentation architecture à jour (wiki)
- Runbooks pour procédures critiques (≥ 3)
8.2 Preuves Techniques à Fournir
Lors de l'audit (voir Document 3) :
DNS :
- Capture
digrésolution publique - Capture
dig AXFRréplication - DNSViz report (si DNSSEC)
SSL/TLS :
- Scan SSL Labs (grade A- minimum)
- Liste certificats avec dates expiration
Backups :
- Logs de backups (derniers 30 jours)
- Rapport test restauration (avec capture écran)
Monitoring :
- Capture Grafana dashboard disponibilité
- Métriques Prometheus (query échantillon)
- Logs Alertmanager (alertes déclenchées)
Infrastructure :
- Inventaire serveurs/VMs/conteneurs (CSV ou YAML)
- Diagramme architecture (Diagrams.net, Draw.io)
- Configuration IaC (playbooks Ansible, extraits)
CONCLUSION
Ce document pose les fondations techniques de la fédération.
Sans conventions partagées, pas d'interopérabilité.
Sans standards, pas de résilience.
Sans nomenclature mnémotechnique, pas de transmissibilité.
Ces règles ne sont pas des carcans. Elles sont des chemins tracés dans la forêt pour faciliter la coopération. Chaque membre reste souverain sur son infrastructure, mais nous parlons le même langage.
Les conventions évoluent. Si une règle pose problème, proposez un amendement (pull request sur Registraire). Si un pattern fonctionne mieux, partagez-le (wiki).
L'objectif n'est pas la perfection immédiate, c'est la cohérence progressive.
Bienvenue dans l'architecture boréale. 🌲
ANNEXES
Annexe A : Templates de Fichiers
A.1 Zone DNS (Bind9)
Fichier : /etc/bind/zones/chezlepro.boreal.ca.zone
$ORIGIN chezlepro.boreal.ca.
$TTL 3600
@ SOA ns1.chezlepro.boreal.ca. admin.chezlepro.ca. (
2025102301 ; Serial
3600 ; Refresh
1800 ; Retry
1209600 ; Expire
3600 ; Minimum TTL
)
; Serveurs DNS
@ NS ns1.chezlepro.boreal.ca.
@ NS ns2.chezlepro.boreal.ca.
ns1 A 203.0.113.10
ns2 A 203.0.113.11
; Services publics
mail A 203.0.113.20
webmail A 203.0.113.20
cloud A 203.0.113.30
matrix A 203.0.113.40
status A 203.0.113.50
www A 203.0.113.60
; MX records
@ MX 10 mail.chezlepro.boreal.ca.
; SPF, DKIM, DMARC
@ TXT "v=spf1 mx -all"
_dmarc TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc@chezlepro.ca"
default._domainkey TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA..."
A.2 Configuration Ansible (ansible.cfg)
[defaults]
inventory = inventories/production/hosts.yml
roles_path = roles
host_key_checking = False
retry_files_enabled = False
gathering = smart
fact_caching = jsonfile
fact_caching_connection = /tmp/ansible_facts
fact_caching_timeout = 86400
[privilege_escalation]
become = True
become_method = sudo
become_user = root
become_ask_pass = False
[ssh_connection]
pipelining = True
control_path = /tmp/ansible-ssh-%%h-%%p-%%r
A.3 Playbook Backup (backup-daily.yml)
---
- name: Daily Backup
hosts: all
become: yes
vars:
backup_date: "{{ ansible_date_time.iso8601_basic_short }}"
backup_base: "/backup/local/daily"
backup_gpg_key: "{{ vault_backup_gpg_key }}"
tasks:
- name: Create backup directory
file:
path: "{{ backup_base }}"
state: directory
mode: '0700'
- name: Backup PostgreSQL databases
shell: |
pg_dumpall | gzip | gpg --encrypt --recipient {{ backup_gpg_key }} \
> {{ backup_base }}/backup-daily-{{ inventory_hostname_short }}-postgres-{{ backup_date }}.sql.gz.gpg
when: "'db_servers' in group_names"
- name: Backup /etc configuration
archive:
path: /etc
dest: "{{ backup_base }}/backup-daily-{{ inventory_hostname_short }}-etc-{{ backup_date }}.tar.gz"
format: gz
- name: Encrypt /etc backup
shell: |
gpg --encrypt --recipient {{ backup_gpg_key }} \
{{ backup_base }}/backup-daily-{{ inventory_hostname_short }}-etc-{{ backup_date }}.tar.gz
rm {{ backup_base }}/backup-daily-{{ inventory_hostname_short }}-etc-{{ backup_date }}.tar.gz
- name: Prune old backups (keep 7 days)
shell: |
find {{ backup_base }} -type f -mtime +7 -delete
Annexe B : Scripts Utilitaires
B.1 Vérification DNS Fédéré
Fichier : scripts/check-dns-federation.sh
#!/bin/bash
# Vérification santé DNS fédéré
DOMAIN="boreal.ca"
MEMBERS=("chezlepro" "technolibre" "coop-nordique")
echo "=== Vérification DNS Fédération Alliance Boréale ==="
echo ""
# Test résolution NS racine
echo "1. Serveurs NS racine ${DOMAIN}:"
dig +short ${DOMAIN} NS
echo ""
# Test délégation membres
for member in "${MEMBERS[@]}"; do
echo "2. Délégation ${member}.${DOMAIN}:"
dig +short ${member}.${DOMAIN} NS
echo ""
echo "3. Services ${member}.${DOMAIN}:"
dig +short mail.${member}.${DOMAIN} A
dig +short cloud.${member}.${DOMAIN} A
echo ""
done
# Test AXFR (si autorisé)
echo "4. Test AXFR (depuis ns1):"
dig @ns1.${DOMAIN} ${DOMAIN} AXFR +short | head -10
echo ""
echo "=== Fin vérification ==="
B.2 Génération Certificat Let's Encrypt
Fichier : scripts/certbot-wildcard.sh
#!/bin/bash
# Obtenir certificat wildcard Let's Encrypt avec Cloudflare DNS
DOMAIN="$1"
EMAIL="admin@${DOMAIN}"
CLOUDFLARE_CREDS="/root/.secrets/cloudflare.ini"
if [ -z "$DOMAIN" ]; then
echo "Usage: $0 <domain>"
echo "Exemple: $0 chezlepro.boreal.ca"
exit 1
fi
certbot certonly \
--dns-cloudflare \
--dns-cloudflare-credentials ${CLOUDFLARE_CREDS} \
--email ${EMAIL} \
--agree-tos \
--non-interactive \
-d "*.${DOMAIN}" \
-d "${DOMAIN}"
echo "Certificat généré dans /etc/letsencrypt/live/${DOMAIN}/"
Annexe C : Checklist Démarrage Membre
Pour nouveau membre rejoignant la fédération :
Phase 1 : Préparation (Semaines 1-2)
- Choisir slug (unique, vérifier disponibilité)
- Obtenir domaine public propre (optionnel mais recommandé)
- Configurer infrastructure de base (1+ serveur)
- Installer OS (Debian/Ubuntu/autre Linux)
- Configurer réseau interne (10.[ID].0.0/16)
Phase 2 : DNS et Connectivité (Semaine 3)
- Installer serveur DNS (Bind9, PowerDNS)
- Configurer zone
[slug].boreal.ca - Demander délégation au Cercle Opérationnel
- Tester résolution publique
- Configurer AXFR avec 1+ pair
- Configurer firewall (ports standards ouverts)
Phase 3 : Services de Base (Semaines 4-6)
- Déployer serveur email (Postfix, Dovecot)
- Configurer DKIM, SPF, DMARC
- Obtenir certificats SSL/TLS (Let's Encrypt)
- Déployer services optionnels (Nextcloud, Matrix)
- Configurer backups quotidiens
- Tester restauration
Phase 4 : Monitoring et Documentation (Semaines 7-8)
- Installer Prometheus + Node Exporter
- Configurer Grafana
- Créer status page publique
- Documenter architecture (wiki)
- Rédiger runbooks (≥ 3 procédures)
Phase 5 : Intégration (Semaines 9-12)
- Participer à audits pair-à-pair
- Contribuer à documentation commune
- Établir VPN avec 1+ pair (si besoin backups croisés)
- Demander labellisation (Bronze minimum)
Durée totale estimée : 3 mois (phase probatoire)
MÉTADONNÉES
Document : 05_Architecture_Reference_Standards_Techniques.md
Version : 1.0
Date de création : 23 octobre 2025
Auteur : Claude (profils #3 Infrastructure, #4 Réseau, #5 IaC, #12 Documentaliste)
Révision par : Cercle Opérationnel
Statut : À adopter par Cercle Stratégique
Longueur : ~15 000 mots (30 pages équivalent)
Licence : CC BY-SA 4.0
Sources utilisées :
00_Glossaire_et_Definitions.md01_Charte_Fondatrice_v2_1.md02_Reglement_de_Regie_Interne.md03_Cadre_Conformite_Label_Prestige.mddevis_alliance_boreale_v2.md
Prochaine révision prévue : Octobre 2026 (après 1 an d'usage terrain)
Changelog :
- 2025-10-23 v1.0 : Création initiale Architecture & Standards Techniques
FIN DE L'ARCHITECTURE DE RÉFÉRENCE
"Un nom bien choisi vaut mieux qu'une longue documentation."
🌲 L'Alliance Boréale
Standards mnémotechniques pour une fédération durable.