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
|
- Migration SSD: infra/ssd-migration.md
|
||||||
- Services:
|
- Services:
|
||||||
- Overview: services/overview.md
|
- Overview: services/overview.md
|
||||||
|
- Transmission: services/transmission.md
|
||||||
- Changelog:
|
- Changelog:
|
||||||
|
- 2026-01-03: changelog/2026-01-03.md
|
||||||
- 2025-12-31: changelog/2025-12-31.md
|
- 2025-12-31: changelog/2025-12-31.md
|
||||||
- Vault:
|
- Vault:
|
||||||
- README: vault/README.md
|
- README: vault/README.md
|
||||||
|
|||||||
Reference in New Issue
Block a user