# Runbook de référence — VPS BigBlueButton (BBB) — Préparation & Recréation Ce document sert de **procédure de reconstitution** (“rebuild/runbook”) pour remettre en place un VPS prêt à héberger BigBlueButton (BBB) avec : - Ubuntu **22.04 LTS** - **Docker** (requis par BBB 3.x) - Firewall **nftables** (table dédiée `inet hostfilter`, compatible avec les règles Docker) - **Fail2ban** (action nftables) - Durcissement SSH (clé seulement, root interdit) - journald persistant + rotation - sysctl (incl. forwarding pour Docker) - swap idempotent --- ## 1) Hypothèses & invariants - VPS public (OVH Beauharnois) avec IPv4 publique. - FQDN prévu : `bbb.chezlepro.ca` - Distribution : **Ubuntu 22.04** - L’install BBB viendra ensuite (BBB 3.x). --- ## 2) Paramètres à personnaliser (avant exécution) ### FQDN - `fqdn: "bbb.chezlepro.ca"` ### Compte d’exploitation Ansible - `admin_user: "ansible"` - `admin_pubkeys: [...]` (clé(s) SSH ED25519) ### SSH allowlist (IPv4) Range **69.70.26.50 → 69.70.26.62** : ```yaml ssh_allow_cidrs_v4: - "69.70.26.50/31" # .50-.51 - "69.70.26.52/30" # .52-.55 - "69.70.26.56/30" # .56-.59 - "69.70.26.60/31" # .60-.61 - "69.70.26.62/32" # .62 ``` ### SSH allowlist (IPv6) Si vous n’avez pas un /128 fixe, **désactiver SSH en IPv6** (temps de chantier) : ```yaml ssh_allow_cidrs_v6: ["::1/128"] ``` ### Ports BBB + TURN - BBB : `80/tcp`, `443/tcp`, `16384–32768/udp` - TURN : `3478/tcp+udp`, `5349/tcp`, relais UDP (plage à réduire) Recommandation : réduire le relais TURN à **50000–55000/udp** : ```yaml turn_relay_udp_min: 50000 turn_relay_udp_max: 55000 ``` > À répliquer ensuite dans coturn : `min-port=50000`, `max-port=55000`. --- ## 3) Checklist DNS / réseau (avant d’installer BBB) 1. Le DNS `A` de `bbb.chezlepro.ca` pointe vers l’IPv4 du VPS. 2. (Optionnel) `AAAA` si IPv6 utilisée. 3. Les ports nécessaires sont ouverts côté firewall VPS (nftables). --- ## 4) Dépôt / arborescence attendue - `inventory.ini` (définit l’hôte `bbb`) - `group_vars/all.yml` (variables) - `site.yml` (playbook) - `roles/bbb_vps_prep/*` (rôle de préparation) Idéalement : initialiser un dépôt git pour historiser les changements : ```bash git init git add . git commit -m "Initial: BBB VPS prep (Ubuntu 22.04, nftables, docker)" ``` --- ## 5) Procédure d’exécution (rebuild) ### 5.1 Amorçage sudo (première exécution) Si le user `ansible` n’a pas encore NOPASSWD : ```bash ansible-playbook -i inventory.ini site.yml --become --ask-become-pass ``` Après cette première passe, `/etc/sudoers.d/90-ansible` est créé et les runs suivants se font sans prompt. ### 5.2 Exécution standard ```bash make run ``` ### 5.3 Dry-run ⚠️ Le `--check` ne crée pas réellement les services/units; certaines tâches doivent être conditionnées par `not ansible_check_mode`. ```bash make dry-run ``` --- ## 6) Contrôles post-déploiement ### 6.1 Services ```bash systemctl is-active docker && echo "docker OK" systemctl is-active fail2ban && echo "fail2ban OK" systemctl is-active hostfilter-nft && echo "hostfilter OK" ``` ### 6.2 Firewall ```bash sudo nft list ruleset | sed -n '1,220p' sudo nft -c -f /etc/nftables/hostfilter.nft ``` ### 6.3 SSH Valider que root est interdit et que l’auth est clé-only : ```bash sudo sshd -t sudo systemctl reload ssh ``` --- ## 7) Points de conception importants (à ne pas casser) ### 7.1 nftables + Docker - Docker gère ses propres tables (`ip nat`, `ip filter`, etc.). - Notre politique “host” est dans `table inet hostfilter`. - Le script **ne flush pas** le ruleset complet : il supprime/recrée **uniquement** `inet hostfilter`. ### 7.2 Fail2ban + nftables Fail2ban ajoute sa table `inet f2b-table` et hook avant `hostfilter`, ce qui est souhaité. ### 7.3 Swap idempotent - Ne pas relancer `mkswap` si le swap est actif. - Logique : `blkid TYPE` + `swapon --show`. --- ## 8) Dépannage rapide (symptômes connus) ### “Missing sudo password” - Lancer une fois avec `--ask-become-pass`, ou créer `NOPASSWD` manuellement dans `/etc/sudoers.d/`. ### “Destination directory /etc/nftables does not exist” - Créer le répertoire avant de templater le fichier : `file: path=/etc/nftables state=directory` ### hostfilter-nft.service échoue / erreur nft - Lire : ```bash journalctl -xeu hostfilter-nft --no-pager -l | tail -200 sudo nft -c -f /etc/nftables/hostfilter.nft ``` - Éviter certains patterns dans sets (ex: `iifname { "docker0", "br-*" }`) et préférer des règles séparées. ### Warnings Ansible Python interpreter - Pinner l’interpréteur dans `inventory.ini` : ```ini bbb ansible_python_interpreter=/usr/bin/python3.10 ``` --- ## 9) Sécurité — recommandations “après chantier” - Restreindre SSH à des CIDR stricts (fait). - Option : limiter le trafic depuis les interfaces Docker vers le host (au lieu de `accept` global). - Réduire la plage UDP TURN relay (fait/recommandé). - Ajouter une sauvegarde régulière des configs (git + backup `/etc` ciblé). - Ajouter une supervision (ex: node_exporter + Loki/Promtail si souhaité). --- ## 10) Prochaine étape (installation BBB + coturn) Créer un rôle `bbb_install` séparé qui : 1) installe BBB 3.x (docker) 2) installe et configure coturn 3) configure Let’s Encrypt pour `bbb.chezlepro.ca` 4) applique la plage UDP relay TURN **alignée** avec nftables 5) exécute des tests de santé (ports + WebRTC) --- ### Historique - 2026-02-08 : Base VPS opérationnelle (SSH, nftables, fail2ban, docker, journald, sysctl, swap idempotent).