From 48d7aff5487614c50fe46d9e99506556eb782dd6 Mon Sep 17 00:00:00 2001 From: Lionel Date: Sat, 3 Jan 2026 02:25:01 +0100 Subject: [PATCH] Auto-sync Sat 3 Jan 02:25:01 CET 2026 --- docs/changelog/2026-01-03.md | 40 +++++++++ docs/services/transmission.md | 162 ++++++++++++++++++++++++++++++++++ mkdocs.yml | 2 + 3 files changed, 204 insertions(+) create mode 100644 docs/changelog/2026-01-03.md create mode 100644 docs/services/transmission.md diff --git a/docs/changelog/2026-01-03.md b/docs/changelog/2026-01-03.md new file mode 100644 index 0000000..2c4cfdd --- /dev/null +++ b/docs/changelog/2026-01-03.md @@ -0,0 +1,40 @@ +# 2026-01-03 - Sécurisation Transmission + +## Résumé + +Transmission est maintenant accessible uniquement via Tailscale avec authentification Authelia. + +## Changements + +### Sécurité Transmission + +- **Accès LAN bloqué** : `transmission.talloires.local` retourne 403 +- **Accès Tailscale uniquement** : `transmission.talloires.tailfd281f.ts.net` +- **Go-links mis à jour** : `go/torrent`, `go/trn`, `go/transmission` redirigent vers le FQDN Tailscale +- **Auth native désactivée** : Authelia gère l'authentification + +### Infrastructure + +- **Caddy** : Ajout du socket Tailscale pour certificats `.ts.net` +- **WireGuard** : Kill switch inclut `172.19.0.0/16` (lake_net) + +## Fichiers modifiés + +| Fichier | Changement | +|---------|------------| +| `/mnt/mediaserver/caddy/Caddyfile` | Séparation .local (403) / .ts.net (Authelia) | +| `~/lake/infra/docker-compose.yml` | Mount tailscaled.sock dans Caddy | +| `~/lake/p2p/docker-compose.yml` | Suppression USER/PASS env vars | +| `~/lake/p2p/transmission/settings.json` | `rpc-authentication-required: false` | + +## Shlink go-links + +``` +go/torrent → https://transmission.talloires.tailfd281f.ts.net +go/trn → https://transmission.talloires.tailfd281f.ts.net +go/transmission → https://transmission.talloires.tailfd281f.ts.net +``` + +## Documentation + +- Nouvelle page : [Services > Transmission](../services/transmission.md) diff --git a/docs/services/transmission.md b/docs/services/transmission.md new file mode 100644 index 0000000..5a1e6e7 --- /dev/null +++ b/docs/services/transmission.md @@ -0,0 +1,162 @@ +# Transmission + +Service BitTorrent sécurisé via VPN ProtonVPN. + +## Accès + +| Méthode | URL | Statut | +|---------|-----|--------| +| **Tailscale** | [transmission.talloires.tailfd281f.ts.net](https://transmission.talloires.tailfd281f.ts.net){:target="_blank"} | ✅ Autorisé | +| **LAN** | transmission.talloires.local | ❌ Bloqué | +| **Go-link** | [go/torrent](https://go.talloires.local/torrent){:target="_blank"} | ✅ Redirige vers TS | + +## Architecture de sécurité + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ INTERNET │ +└─────────────────────────────────────────────────────────────────┘ + │ ▲ + │ Torrent traffic │ VPN tunnel + ▼ │ +┌─────────────────┐ ┌─────────────────┐ +│ ProtonVPN LU │◄───────────────►│ WireGuard │ +│ 5.253.204.x │ encrypted │ container │ +└─────────────────┘ └────────┬────────┘ + │ + ┌────────┴────────┐ + │ Transmission │ + │ container │ + │ (network_mode: │ + │ wireguard) │ + └────────┬────────┘ + │ + ┌──────────────┴──────────────┐ + │ │ + ┌─────────┴─────────┐ ┌────────┴────────┐ + │ Tailscale DNS │ │ LAN DNS │ + │ .ts.net résolu │ │ .local résolu │ + │ uniquement sur │ │ sur réseau │ + │ devices TS │ │ local │ + └─────────┬─────────┘ └────────┬────────┘ + │ │ + ▼ ▼ + ┌─────────────────┐ ┌─────────────────┐ + │ Authelia │ │ 403 Blocked │ + │ + Transmission │ │ "Use Tailscale"│ + └─────────────────┘ └─────────────────┘ +``` + +## Pourquoi cette configuration ? + +### 1. VPN obligatoire (WireGuard → ProtonVPN) + +Transmission utilise `network_mode: service:wireguard`. Tout le trafic réseau passe par le conteneur WireGuard, qui : + +- Chiffre tout le trafic vers ProtonVPN Luxembourg +- Applique un **kill switch** : si le VPN tombe, aucun trafic ne sort +- Masque l'IP réelle du serveur aux trackers et peers + +**IP publique visible** : `5.253.204.x` (ProtonVPN LU) + +### 2. Accès Tailscale uniquement + +| Risque | Mitigation | +|--------|------------| +| Quelqu'un sur le LAN voit les torrents | Accès LAN bloqué (403) | +| Quelqu'un sur le LAN ajoute des torrents | Accès LAN bloqué (403) | +| Quelqu'un hors Tailscale accède | DNS `.ts.net` non résolvable hors TS | +| Quelqu'un sur Tailscale non autorisé | Authelia (login requis) | + +**Principe** : Le DNS `*.tailfd281f.ts.net` n'est résolvable que par les devices connectés au tailnet. C'est une première couche de sécurité "gratuite". Authelia ajoute l'authentification. + +### 3. Pourquoi pas d'accès LAN ? + +Le LAN est considéré **moins sûr** que Tailscale pour Transmission : + +- Un appareil compromis sur le LAN pourrait scanner les ports +- Les guests WiFi pourraient potentiellement accéder +- Pas de logs d'authentification côté LAN + +Tailscale garantit que seuls les **devices explicitement autorisés** dans le tailnet peuvent même résoudre le nom DNS. + +## Risques résiduels + +| Risque | Probabilité | Impact | Mitigation | +|--------|-------------|--------|------------| +| Compromission d'un device TS | Faible | Moyen | Authelia 2FA recommandé | +| Fuite IP si WireGuard crash | Très faible | Élevé | Kill switch iptables | +| Contenu illégal téléchargé | Variable | Élevé | Responsabilité utilisateur | +| DMCA notice | Faible (VPN) | Faible | ProtonVPN no-logs policy | + +## Configuration technique + +### WireGuard kill switch + +```bash +# /home/lionel/lake/p2p/wireguard/wg_confs/wg0.conf +PostUp = iptables -I OUTPUT -o eth0 -d 5.253.204.162 -j ACCEPT +PostUp = iptables -I OUTPUT -o eth0 -d 172.18.0.0/16 -j ACCEPT +PostUp = iptables -I OUTPUT -o eth0 -d 172.19.0.0/16 -j ACCEPT +PostUp = iptables -A OUTPUT -o eth0 -j REJECT +``` + +Seuls autorisés : +- L'endpoint VPN ProtonVPN +- Les réseaux Docker internes (pour que Caddy puisse atteindre Transmission) + +### Caddy configuration + +```caddyfile +# LAN - Bloqué +transmission.talloires.local { + respond "Access denied - Use Tailscale" 403 +} + +# Tailscale - Authelia + Transmission +transmission.talloires.tailfd281f.ts.net { + import authelia + reverse_proxy wireguard:9091 +} +``` + +### Docker network + +```yaml +# Transmission utilise le réseau de WireGuard +transmission: + network_mode: service:wireguard + depends_on: + - wireguard + +# WireGuard est sur lake_net pour être joignable par Caddy +wireguard: + networks: + - lake_net +``` + +## Utilisation + +1. Aller sur [go/torrent](https://go.talloires.local/torrent){:target="_blank"} (depuis un device Tailscale) +2. S'authentifier via Authelia +3. Ajouter un torrent via l'interface web (magnet link ou fichier .torrent) +4. Les téléchargements arrivent dans `/mnt/mediaserver/transmission/downloads/` + +## Vérification VPN + +Pour confirmer que le trafic passe bien par le VPN : + +```bash +# IP publique vue par Transmission +docker exec wireguard curl -s https://ifconfig.me +# Devrait retourner 5.253.204.x (ProtonVPN LU) +``` + +## Fichiers + +| Fichier | Description | +|---------|-------------| +| `~/lake/p2p/docker-compose.yml` | Config Docker WireGuard + Transmission | +| `~/lake/p2p/wireguard/wg_confs/wg0.conf` | Config WireGuard + kill switch | +| `~/lake/p2p/transmission/settings.json` | Config Transmission | +| `/mnt/mediaserver/transmission/downloads/` | Dossier téléchargements | diff --git a/mkdocs.yml b/mkdocs.yml index 998f5cf..5162053 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -25,7 +25,9 @@ nav: - Migration SSD: infra/ssd-migration.md - Services: - Overview: services/overview.md + - Transmission: services/transmission.md - Changelog: + - 2026-01-03: changelog/2026-01-03.md - 2025-12-31: changelog/2025-12-31.md - Vault: - README: vault/README.md