BBB-via-ansible/Runbook_BBB_VPS_Ubuntu22.04.md

199 lines
5.5 KiB
Markdown
Raw Normal View History

2026-02-08 18:21:55 -05:00
# 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).