BBB-via-ansible/Runbook_BBB_VPS_Ubuntu22.04.md
2026-02-08 18:21:55 -05:00

198 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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**
- Linstall BBB viendra ensuite (BBB 3.x).
---
## 2) Paramètres à personnaliser (avant exécution)
### FQDN
- `fqdn: "bbb.chezlepro.ca"`
### Compte dexploitation 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 navez 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`, `1638432768/udp`
- TURN : `3478/tcp+udp`, `5349/tcp`, relais UDP (plage à réduire)
Recommandation : réduire le relais TURN à **5000055000/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 dinstaller BBB)
1. Le DNS `A` de `bbb.chezlepro.ca` pointe vers lIPv4 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 lhô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 dexécution (rebuild)
### 5.1 Amorçage sudo (première exécution)
Si le user `ansible` na 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 lauth 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 linterpré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 Lets 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).