198 lines
5.5 KiB
Markdown
198 lines
5.5 KiB
Markdown
# 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).
|