Auto-sync Sat 3 Jan 02:25:01 CET 2026
This commit is contained in:
40
docs/changelog/2026-01-03.md
Normal file
40
docs/changelog/2026-01-03.md
Normal file
@@ -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)
|
||||
162
docs/services/transmission.md
Normal file
162
docs/services/transmission.md
Normal file
@@ -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 |
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user