chore: remove test trigger file
This commit is contained in:
@@ -18,6 +18,9 @@ Complete documentation for deploying the Custom PHP Framework to production.
|
||||
**Want automation?**
|
||||
- [Ansible Deployment](ANSIBLE_DEPLOYMENT.md) - Infrastructure as Code with Ansible
|
||||
|
||||
**Need secure access?**
|
||||
- [WireGuard VPN Setup](WIREGUARD-SETUP.md) - Secure VPN access to production services
|
||||
|
||||
---
|
||||
|
||||
## Documentation Structure
|
||||
@@ -120,6 +123,21 @@ Complete documentation for deploying the Custom PHP Framework to production.
|
||||
|
||||
---
|
||||
|
||||
### 7. [WIREGUARD-SETUP.md](WIREGUARD-SETUP.md)
|
||||
**Best for**: Secure VPN access to production services
|
||||
|
||||
**Content**:
|
||||
- Complete WireGuard VPN setup guide
|
||||
- Server installation via Ansible
|
||||
- Client configuration and management
|
||||
- Connection testing and troubleshooting
|
||||
- Security best practices
|
||||
- Monitoring and maintenance
|
||||
|
||||
**Use when**: You need secure access to internal services (Prometheus, Grafana, Portainer) or want to restrict access via VPN.
|
||||
|
||||
---
|
||||
|
||||
## Which Guide Should I Use?
|
||||
|
||||
### Scenario 1: First-Time Deployment
|
||||
@@ -452,6 +470,7 @@ This documentation should be updated after each deployment to reflect:
|
||||
- [Production Guide](PRODUCTION_DEPLOYMENT.md) - Comprehensive reference
|
||||
- [Logging Guide](production-logging.md) - Production logging configuration
|
||||
- [Ansible Guide](ANSIBLE_DEPLOYMENT.md) - Infrastructure automation
|
||||
- [WireGuard VPN](WIREGUARD-SETUP.md) - Secure VPN access to production
|
||||
|
||||
---
|
||||
|
||||
|
||||
213
docs/deployment/WIREGUARD-FUTURE-SECURITY.md
Normal file
213
docs/deployment/WIREGUARD-FUTURE-SECURITY.md
Normal file
@@ -0,0 +1,213 @@
|
||||
# WireGuard - Zukünftige Sicherheitshärtung
|
||||
|
||||
**Status**: 📋 Geplant
|
||||
**Aktueller Status**: Alle Dienste öffentlich erreichbar
|
||||
**Ziel**: Backend-Dienste nur noch über VPN erreichbar
|
||||
|
||||
---
|
||||
|
||||
## Übersicht
|
||||
|
||||
Dieses Dokument beschreibt die geplante Sicherheitshärtung für Backend-Dienste, sodass diese nur noch über WireGuard VPN erreichbar sind.
|
||||
|
||||
**Aktueller Zustand:**
|
||||
- ✅ WireGuard VPN ist installiert und funktionsfähig
|
||||
- ✅ Backend-Dienste sind öffentlich über Traefik erreichbar
|
||||
- ✅ VPN-Zugriff funktioniert parallel
|
||||
|
||||
**Zielzustand:**
|
||||
- 🔒 Backend-Dienste nur noch über VPN erreichbar
|
||||
- 🔒 Öffentlicher Zugriff auf Prometheus, Grafana, Portainer blockiert
|
||||
- 🔒 SSH-Zugriff weiterhin über normale IP möglich
|
||||
|
||||
---
|
||||
|
||||
## Betroffene Dienste
|
||||
|
||||
Folgende Dienste sollen später nur noch über VPN erreichbar sein:
|
||||
|
||||
1. **Prometheus** (Port 9090)
|
||||
- Aktuell: `http://prometheus.michaelschiemer.de` (öffentlich)
|
||||
- Zukünftig: Nur `http://10.8.0.1:9090` über VPN
|
||||
|
||||
2. **Grafana** (Port 3000)
|
||||
- Aktuell: `https://grafana.michaelschiemer.de` (öffentlich)
|
||||
- Zukünftig: Nur `http://10.8.0.1:3000` über VPN
|
||||
|
||||
3. **Portainer** (Port 9443)
|
||||
- Aktuell: `https://portainer.michaelschiemer.de` (öffentlich)
|
||||
- Zukünftig: Nur `https://10.8.0.1:9443` über VPN
|
||||
|
||||
---
|
||||
|
||||
## Geplante Implementierungsschritte
|
||||
|
||||
### Schritt 1: Traefik-Labels anpassen
|
||||
|
||||
**Datei**: `deployment/stacks/monitoring/docker-compose.yml`
|
||||
|
||||
Traefik-Router für interne Dienste entfernen oder anpassen:
|
||||
|
||||
```yaml
|
||||
# Entfernen/Anpassen der öffentlichen Traefik-Labels:
|
||||
labels:
|
||||
# - "traefik.enable=true"
|
||||
# - Orchestra: "traefik.http.routers.prometheus.rule=Host(`prometheus.${DOMAIN}`)"
|
||||
# - Orchestra: "traefik.http.routers.grafana.rule=Host(`grafana.${DOMAIN}`)"
|
||||
# - Orchestra: "traefik.http.routers.portainer.rule=Host(`portainer.${DOMAIN}`)"
|
||||
```
|
||||
|
||||
### Schritt 2: Firewall-Regeln anpassen
|
||||
|
||||
**Option A: UFW-Regeln**
|
||||
|
||||
```bash
|
||||
# Öffentliche Ports für Monitoring blockieren
|
||||
sudo ufw deny 9090/tcp # Prometheus
|
||||
sudo ufw deny 3000/tcp # Grafana
|
||||
sudo ufw deny 9443/tcp # Portainer
|
||||
|
||||
# VPN-Zugriff explizit erlauben (falls notwendig)
|
||||
sudo ufw allow from 10.8.0.0/24 to any port 9090
|
||||
sudo ufw allow from 10.8.0.0/24 to any port 3000
|
||||
sudo ufw allow from 10.8.0.0/24 to any port 9443
|
||||
```
|
||||
|
||||
**Option B: Traefik Middleware**
|
||||
|
||||
Traefik-Middleware erstellen, die nur VPN-IPs erlaubt:
|
||||
|
||||
```yaml
|
||||
labels:
|
||||
- "traefik.http.middlewares.vpn-only.ipwhitelist.sourcerange=10.8.0.0/24"
|
||||
- "traefik.http.routers.prometheus.middlewares=vpn-only"
|
||||
```
|
||||
|
||||
### Schritt 3: Docker-Netzwerk-Konfiguration
|
||||
|
||||
**Datei**: `deployment/stacks/monitoring/docker-compose.yml`
|
||||
|
||||
Dienste nur auf `app-internal` Netzwerk belassen, nicht auf `traefik-public`:
|
||||
|
||||
```yaml
|
||||
services:
|
||||
prometheus:
|
||||
networks:
|
||||
- app-internal # Nur internes Netzwerk
|
||||
# - traefik-public # Entfernen
|
||||
|
||||
grafana:
|
||||
networks:
|
||||
- app-internal
|
||||
# - traefik-public
|
||||
|
||||
portainer:
|
||||
networks:
|
||||
- app-internal
|
||||
# - traefik-public
|
||||
```
|
||||
|
||||
### Schritt 4: Nginx/Traefik-Konfiguration
|
||||
|
||||
Traefik-Router entfernen, sodass die Dienste nicht mehr öffentlich erreichbar sind.
|
||||
|
||||
---
|
||||
|
||||
## Testplan
|
||||
|
||||
### Vor der Umsetzung
|
||||
|
||||
1. ✅ VPN-Verbindung testen
|
||||
2. ✅ Zugriff auf Dienste über VPN testen (10.8.0.1: term
|
||||
3. ✅ Öffentliche URLs dokumentieren (für späteren Vergleich)
|
||||
|
||||
### Nach der Umsetzung
|
||||
|
||||
1. ✅ Öffentliche URLs sollten nicht mehr erreichbar sein (404/Connection refused)
|
||||
2. ✅ VPN-Zugriff sollte weiterhin funktionieren
|
||||
3. ✅ SSH-Zugriff über normale IP sollte weiterhin funktionieren
|
||||
4. ✅ Hauptanwendung (michaelschiemer.de) sollte weiterhin öffentlich erreichbar sein
|
||||
|
||||
---
|
||||
|
||||
## Rollback-Plan
|
||||
|
||||
Falls Probleme auftreten:
|
||||
|
||||
1. Traefik-Labels wieder aktivieren
|
||||
2. Firewall-Regeln zurücksetzen:
|
||||
```bash
|
||||
sudo ufw delete deny 9090/tcp
|
||||
sudo ufw delete deny 3000/tcp
|
||||
sudo ufw delete deny 9443/tcp
|
||||
```
|
||||
3. Docker-Container neu starten:
|
||||
```bash
|
||||
cd deployment/stacks/monitoring
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Zeitplan
|
||||
|
||||
**Nicht geplant für sofortige Umsetzung**
|
||||
|
||||
Die Härtung kann durchgeführt werden, wenn:
|
||||
- ✅ WireGuard-VPN stabil läuft
|
||||
- ✅ Alle notwendigen Clients push
|
||||
4. **Optional**: Monitoring-Alerts für VPN-Verbindungen
|
||||
5. **Optional**: Automatische Firewall-Regeln via Ansible
|
||||
|
||||
---
|
||||
|
||||
## Weitere Überlegungen
|
||||
|
||||
### Alternative: Traefik mit VPN-IP-Whitelist
|
||||
|
||||
Statt die Dienste komplett aus Traefik zu entfernen, könnte eine Middleware verwendet werden:
|
||||
|
||||
```yaml
|
||||
# Traefik-Middleware für VPN-only
|
||||
- "traefik.http.middlewares.vpn-only.ipwhitelist.sourcerange=10.8.0.0/24"
|
||||
- "traefik.http.routers.prometheus.middlewares=vpn-only"
|
||||
```
|
||||
|
||||
**Vorteil**: Konfiguration bleibt in Traefik, einfaches Toggle
|
||||
**Nachteil**: Traefik muss weiterhin die Requests verarbeiten
|
||||
|
||||
### Alternative: Separates Traefik-Instance für VPN
|
||||
|
||||
Ein separater Traefik-Container nur für VPN-Dienste:
|
||||
|
||||
```yaml
|
||||
services:
|
||||
traefik-vpn:
|
||||
image: traefik:v3.0
|
||||
networks:
|
||||
- app-internal
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||
command:
|
||||
- "--api.insecure=false"
|
||||
- "--providers.docker.network=app-internal"
|
||||
- "--entrypoints.web.address=:80"
|
||||
- "--entrypoints.websecure.address=:443"
|
||||
```
|
||||
|
||||
**Vorteil**: Komplette Trennung von öffentlichen und VPN-Diensten
|
||||
**Nachteil**: Zusätzliche Ressourcen, komplexere Konfiguration
|
||||
|
||||
---
|
||||
|
||||
## Dokumentation
|
||||
|
||||
Nach der Umsetzung sollte aktualisiert werden:
|
||||
|
||||
1. `WIREGUARD-SETUP.md` - Status aktualisieren
|
||||
2. `production-deployment-guide.md` - Firewall-Konfiguration dokumentieren
|
||||
3. `README.md` - Hinweise auf VPN-only-Zugriff
|
||||
|
||||
---
|
||||
|
||||
**Hinweis**: Diese Härtung wird erst durchgeführt, wenn das VPN stabil läuft und alle notwendigen Clients konfiguriert sind.
|
||||
558
docs/deployment/WIREGUARD-SETUP.md
Normal file
558
docs/deployment/WIREGUARD-SETUP.md
Normal file
@@ -0,0 +1,558 @@
|
||||
# WireGuard VPN Setup - Complete Guide
|
||||
|
||||
**Status**: ✅ Active
|
||||
**Last Updated**: 2025-10-31
|
||||
**Server**: 94.16.110.151 (michaelschiemer.de)
|
||||
|
||||
---
|
||||
|
||||
## Übersicht
|
||||
|
||||
WireGuard ist ein modernes, schnelles und sicheres VPN-Protokoll, das für den sicheren Zugriff auf interne Services auf dem Production-Server verwendet wird.
|
||||
|
||||
**Features:**
|
||||
- ✅ Schnell und performant
|
||||
- ✅ Moderne Kryptographie
|
||||
- ✅ Einfache Konfiguration
|
||||
- ✅ Native Unterstützung in Linux, macOS, Windows, iOS, Android
|
||||
- ✅ Automatisierte Installation via Ansible
|
||||
|
||||
---
|
||||
|
||||
## Server-Informationen
|
||||
|
||||
**Server-Endpoint:**
|
||||
- **Host**: 94.16.110.151
|
||||
- **Port**: 51820 (UDP)
|
||||
- **VPN-Netzwerk**: 10.8.0.0/24
|
||||
- **Server-IP (VPN)**: 10.8.0.1
|
||||
|
||||
**Server-Public-Key:**
|
||||
```
|
||||
hT3OCWZ6ElX79YdAdexSsZnbWLzRM/5szk+XNEBUaS8=
|
||||
```
|
||||
|
||||
**Wichtige Sicherheitshinweise:**
|
||||
- ✅ SSH-Zugriff über normale IP bleibt vollständig funktionsfähig
|
||||
- ✅ WireGuard routet standardmäßig nur das VPN-Netzwerk (10.8.0.0/24)
|
||||
- ✅ Normale Internet-Routen werden nicht geändert
|
||||
- ✅ Firewall-Regeln für SSH (Port 22) werden NICHT entfernt oder blockiert
|
||||
|
||||
**Zukünftige Sicherheitshärtung (geplant):**
|
||||
- 🔒 Backend-Dienste (Prometheus, Grafana, Portainer) sollen später nur noch über VPN erreichbar sein
|
||||
- 🔒 Aktuell sind alle Dienste noch öffentlich erreichbar (für einfachere Einrichtung)
|
||||
- 🔒 Firewall-Regeln können später angepasst werden, um nur VPN-Zugriff zu erlauben
|
||||
|
||||
---
|
||||
|
||||
## Installation
|
||||
|
||||
### Server-Installation (via Ansible)
|
||||
|
||||
Die Server-Installation erfolgt automatisch via Ansible:
|
||||
|
||||
```bash
|
||||
cd deployment/ansible
|
||||
ansible-playbook -i inventory/production.yml playbooks/setup-wireguard.yml
|
||||
```
|
||||
|
||||
**Was wird installiert:**
|
||||
- WireGuard und Tools
|
||||
- Server-Keys (generiert oder vorhandene verwendet)
|
||||
- Server-Konfiguration
|
||||
- IP Forwarding aktiviert
|
||||
- NAT (Masquerading) konfiguriert
|
||||
- Firewall-Port 51820/udp geöffnet
|
||||
- WireGuard-Service gestartet
|
||||
|
||||
### Client hinzufügen
|
||||
|
||||
Um einen neuen Client hinzuzufügen:
|
||||
|
||||
```bash
|
||||
cd deployment/ansible
|
||||
ansible-playbook -i inventory/production.yml playbooks/add-wireguard-client.yml \
|
||||
-e "client_name=myclient"
|
||||
```
|
||||
|
||||
**Optionale Parameter:**
|
||||
- `client_ip`: Spezifische Client-IP (Standard: automatisch berechnet)
|
||||
- `allowed_ips`: Erlaubte IP-Ranges (Standard: 10.8.0.0/24)
|
||||
|
||||
**Beispiel mit spezifischer IP:**
|
||||
```bash
|
||||
ansible-playbook -i inventory/production.yml playbooks/add-wireguard-client.yml \
|
||||
-e "client_name=myclient" \
|
||||
-e "client_ip=10.8.0.5"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Client-Konfiguration
|
||||
|
||||
### 1. Config-Datei abrufen
|
||||
|
||||
Die Client-Konfigurationsdatei liegt auf dem Server unter:
|
||||
```
|
||||
/etc/wireguard/clients/{client_name}.conf
|
||||
```
|
||||
|
||||
**Abrufen der Config-Datei:**
|
||||
|
||||
```bash
|
||||
# Von Ansible Control Machine
|
||||
scp -i ~/.ssh/production \
|
||||
deploy@94.16.110.151:/etc/wireguard/clients/development.conf \
|
||||
~/development.conf
|
||||
```
|
||||
|
||||
Oder direkt auf dem Server:
|
||||
|
||||
```bash
|
||||
ssh -i ~/.ssh/production deploy@94.16.110.151
|
||||
sudo cat /etc/wireguard/clients/development.conf
|
||||
```
|
||||
|
||||
### 2. WireGuard auf Client installieren
|
||||
|
||||
**Linux (Ubuntu/Debian):**
|
||||
```bash
|
||||
sudo apt update
|
||||
sudo apt install wireguard wireguard-tools
|
||||
```
|
||||
|
||||
**Linux (CentOS/RHEL):**
|
||||
```bash
|
||||
sudo yum install wireguard-tools
|
||||
# oder
|
||||
sudo dnf install wireguard-tools
|
||||
```
|
||||
|
||||
**macOS:**
|
||||
```bash
|
||||
brew install wireguard-tools
|
||||
```
|
||||
|
||||
**Windows:**
|
||||
Download von https://www.wireguard.com/install/
|
||||
|
||||
**iOS/Android:**
|
||||
WireGuard App aus dem App Store/Play Store installieren
|
||||
|
||||
### 3. VPN verbinden
|
||||
|
||||
**Linux/macOS (Command Line):**
|
||||
```bash
|
||||
# Config-Datei kopieren
|
||||
sudo cp ~/development.conf /etc/wireguard/development.conf
|
||||
|
||||
# VPN starten
|
||||
sudo wg-quick up development
|
||||
|
||||
# Status prüfen
|
||||
sudo wg show
|
||||
|
||||
# VPN trennen
|
||||
sudo wg-quick down development
|
||||
```
|
||||
|
||||
**Linux/macOS (Alternative):**
|
||||
```bash
|
||||
# Direkt mit Datei
|
||||
sudo wg-quick up ~/development.conf
|
||||
```
|
||||
|
||||
**Windows:**
|
||||
1. WireGuard-App öffnen
|
||||
2. "Import tunnel(s) from file" wählen
|
||||
3. `development.conf` Datei auswählen
|
||||
4. "Activate" klicken
|
||||
|
||||
**iOS/Android:**
|
||||
1. WireGuard-App öffnen
|
||||
2. QR-Code scannen (falls verfügbar) oder Config-Datei importieren
|
||||
3. Tunnel aktivieren
|
||||
|
||||
### 4. QR-Code generieren
|
||||
|
||||
Falls `qrencode` auf dem Server installiert ist, kann ein QR-Code generiert werden:
|
||||
|
||||
```bash
|
||||
# Auf dem Server
|
||||
qrencode -t ansiutf8 < /etc/wireguard/clients/development.conf
|
||||
# oder für PNG
|
||||
qrencode -t png -o /tmp/development-qr.png < /etc/wireguard/clients/development.conf
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Verbindung testen
|
||||
|
||||
Nach dem Verbinden mit dem VPN:
|
||||
|
||||
### 1. VPN-Status prüfen
|
||||
|
||||
```bash
|
||||
# Status anzeigen
|
||||
sudo wg show
|
||||
|
||||
# Erwartete Ausgabe:
|
||||
# interface: development
|
||||
# public key: <client_public_key>
|
||||
# private key: (hidden)
|
||||
# listening port: <random_port>
|
||||
#
|
||||
# peer: hT3OCWZ6ElX79YdAdexSsZnbWLzRM/5szk+XNEBUaS8=
|
||||
# endpoint: 94.16.110.151:51820
|
||||
# allowed ips: 10.8.0.0/24
|
||||
# latest handshake: <timestamp>
|
||||
# transfer: <received>, <sent>
|
||||
```
|
||||
|
||||
### 2. Server-IP pingen
|
||||
|
||||
```bash
|
||||
# Server im VPN-Netzwerk pingen
|
||||
ping 10.8.0.1
|
||||
|
||||
# Sollte erfolgreich sein
|
||||
```
|
||||
|
||||
### 3. VPN-Netzwerk prüfen
|
||||
|
||||
```bash
|
||||
# Routing-Tabelle prüfen
|
||||
ip route show
|
||||
|
||||
# Sollte einen Eintrag für 10.8.0.0/24 über wg0 zeigen
|
||||
```
|
||||
|
||||
### 4. Services über VPN erreichen
|
||||
|
||||
Nach erfolgreicher VPN-Verbindung sollten folgende Services über das VPN-Netzwerk erreichbar sein:
|
||||
|
||||
- **Prometheus**: http://10.8.0.1:9090
|
||||
- **Grafana**: http://10.8.0.1:3000
|
||||
- **Portainer**: https://10.8.0.1:9443
|
||||
|
||||
**Hinweis**:
|
||||
- ⚠️ Aktuell sind diese Services auch öffentlich erreichbar (Traefik-Routing)
|
||||
- 🔒 **Geplant**: Später sollen alle Backend-Dienste nur noch über VPN erreichbar sein
|
||||
- ✅ Für die Einrichtung bleibt der öffentliche Zugriff vorerst aktiviert
|
||||
|
||||
---
|
||||
|
||||
## Client-Verwaltung
|
||||
|
||||
### Client-Liste anzeigen
|
||||
|
||||
```bash
|
||||
# Auf dem Server
|
||||
sudo wg show
|
||||
|
||||
# Zeigt alle verbundenen Clients
|
||||
```
|
||||
|
||||
### Client-Config-Dateien anzeigen
|
||||
|
||||
```bash
|
||||
# Auf dem Server
|
||||
ls -la /etc/wireguard/clients/
|
||||
```
|
||||
|
||||
### Client entfernen
|
||||
|
||||
Um einen Client zu entfernen:
|
||||
|
||||
```bash
|
||||
# Auf dem Server
|
||||
sudo nano /etc/wireguard/wg0.conf
|
||||
# Entferne den [Peer] Block für den Client
|
||||
|
||||
# WireGuard neu starten
|
||||
sudo wg-quick down wg0
|
||||
sudo wg-quick up wg0
|
||||
|
||||
# Optional: Client-Config löschen
|
||||
sudo rm /etc/wireguard/clients/clientname.conf
|
||||
```
|
||||
|
||||
Oder über Ansible (manuelle Datei-Bearbeitung erforderlich):
|
||||
|
||||
```bash
|
||||
# 1. Client aus /etc/wireguard/wg0.conf entfernen
|
||||
# 2. WireGuard-Service neu starten:
|
||||
cd deployment/ansible
|
||||
ansible production -m shell -a "sudo wg-quick down wg0 && sudo wg-quick up wg0"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### VPN verbindet nicht
|
||||
|
||||
**1. Firewall prüfen:**
|
||||
```bash
|
||||
# Auf dem Server
|
||||
sudo ufw status | grep 51820
|
||||
# Sollte zeigen: 51820/udp ALLOW
|
||||
|
||||
# Falls nicht:
|
||||
sudo ufw allow 51820/udp comment 'WireGuard VPN'
|
||||
```
|
||||
|
||||
**2. WireGuard-Service prüfen:**
|
||||
```bash
|
||||
# Auf dem Server
|
||||
sudo systemctl status wg-quick@wg0
|
||||
|
||||
# Logs anzeigen
|
||||
sudo journalctl -u wg-quick@wg0 -f
|
||||
```
|
||||
|
||||
**3. Server-Konfiguration prüfen:**
|
||||
```bash
|
||||
# Auf dem Server
|
||||
sudo wg show
|
||||
sudo cat /etc/wireguard/wg0.conf
|
||||
```
|
||||
|
||||
**4. Client-Config prüfen:**
|
||||
- Endpoint korrekt? (94.16.110.151:51820)
|
||||
- Server-Public-Key korrekt?
|
||||
- Client-Private-Key vorhanden?
|
||||
- AllowedIPs korrekt?
|
||||
|
||||
**5. Netzwerk-Verbindung prüfen:**
|
||||
```bash
|
||||
# Vom Client aus
|
||||
ping 94.16.110.151
|
||||
# Sollte erfolgreich sein
|
||||
|
||||
# UDP-Port testen
|
||||
nc -u -v 94.16.110.151 51820
|
||||
```
|
||||
|
||||
### VPN verbindet, aber kein Traffic
|
||||
|
||||
**1. IP Forwarding prüfen:**
|
||||
```bash
|
||||
# Auf dem Server
|
||||
cat /proc/sys/net/ipv4/ip_forward
|
||||
# Sollte "1" sein
|
||||
|
||||
# Falls nicht:
|
||||
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
|
||||
echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf
|
||||
sudo sysctl -p
|
||||
```
|
||||
|
||||
**2. NAT-Rules prüfen:**
|
||||
```bash
|
||||
# Auf dem Server
|
||||
sudo iptables -t nat -L -n | grep MASQUERADE
|
||||
sudo iptables -L FORWARD -n | grep wg0
|
||||
```
|
||||
|
||||
**3. Routing prüfen:**
|
||||
```bash
|
||||
# Auf dem Server
|
||||
ip route show
|
||||
# Sollte Routes für wg0 zeigen
|
||||
|
||||
# Vom Client
|
||||
ip route show
|
||||
# Sollte Route für 10.8.0.0/24 über VPN zeigen
|
||||
```
|
||||
|
||||
### SSH-Zugriff funktioniert nicht mehr
|
||||
|
||||
**WICHTIG**: SSH-Zugriff sollte weiterhin über die normale IP funktionieren!
|
||||
|
||||
```bash
|
||||
# SSH über normale IP (nicht VPN)
|
||||
ssh -i ~/.ssh/production deploy@94.16.110.151
|
||||
|
||||
# Falls nicht funktioniert:
|
||||
# 1. Prüfe, ob VPN alle Traffic routet (AllowedIPs = 0.0.0.0/0)
|
||||
# 2. Deaktiviere VPN: sudo wg-quick down development
|
||||
# 3. Prüfe Firewall: sudo ufw status | grep 22
|
||||
```
|
||||
|
||||
### Performance-Probleme
|
||||
|
||||
**1. MTU anpassen:**
|
||||
```bash
|
||||
# In Client-Config hinzufügen:
|
||||
# [Interface]
|
||||
# MTU = 1420
|
||||
```
|
||||
|
||||
**2. PersistKeepalive anpassen:**
|
||||
```bash
|
||||
# In Client-Config bereits konfiguriert:
|
||||
# PersistentKeepalive = 25
|
||||
```
|
||||
|
||||
**3. Server-Last prüfen:**
|
||||
```bash
|
||||
# Auf dem Server
|
||||
sudo wg show
|
||||
# Zeigt Transfer-Statistiken
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Best Practices
|
||||
|
||||
### Sicherheit
|
||||
|
||||
1. **Backup der Server-Keys:**
|
||||
```bash
|
||||
# Auf dem Server
|
||||
sudo tar czf wireguard-backup.tar.gz /etc/wireguard/
|
||||
# Sicher speichern (z.B. verschlüsselt)
|
||||
```
|
||||
|
||||
2. **Client-Keys sicher verwalten:**
|
||||
- Client-Private-Keys niemals teilen
|
||||
- Config-Dateien sicher speichern
|
||||
- Nicht genutzte Clients entfernen
|
||||
|
||||
3. **Regelmäßige Updates:**
|
||||
```bash
|
||||
# Auf dem Server
|
||||
sudo apt update && sudo apt upgrade wireguard wireguard-tools
|
||||
```
|
||||
|
||||
4. **Firewall-Regeln:**
|
||||
- Nur notwendige Ports öffnen
|
||||
- Regelmäßig Firewall-Status prüfen
|
||||
|
||||
### Monitoring
|
||||
|
||||
1. **VPN-Verbindungen überwachen:**
|
||||
```bash
|
||||
# Auf dem Server
|
||||
sudo wg show
|
||||
```
|
||||
|
||||
2. **Logs prüfen:**
|
||||
```bash
|
||||
# Auf dem Server
|
||||
sudo journalctl -u wg-quick@wg0 -f
|
||||
```
|
||||
|
||||
3. **Transfer-Statistiken:**
|
||||
```bash
|
||||
# Auf dem Server
|
||||
sudo wg show
|
||||
# Zeigt received/sent für jeden Client
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Ansible Playbooks
|
||||
|
||||
### Setup WireGuard Server
|
||||
|
||||
**Datei**: `deployment/ansible/playbooks/setup-wireguard.yml`
|
||||
|
||||
**Verwendung:**
|
||||
```bash
|
||||
cd deployment/ansible
|
||||
ansible-playbook -i inventory/production.yml playbooks/setup-wireguard.yml
|
||||
```
|
||||
|
||||
**Variablen:**
|
||||
- `wireguard_port`: Port für WireGuard (Standard: 51820)
|
||||
- `wireguard_network`: VPN-Netzwerk (Standard: 10.8.0.0/24)
|
||||
- `wireguard_server_ip`: Server-IP im VPN (Standard: 10.8.0.1)
|
||||
|
||||
### Add WireGuard Client
|
||||
|
||||
**Datei**: `deployment/ansible/playbooks/add-wireguard-client.yml`
|
||||
|
||||
**Verwendung:**
|
||||
```bash
|
||||
cd deployment/ansible
|
||||
ansible-playbook -i inventory/production.yml playbooks/add-wireguard-client.yml \
|
||||
-e "client_name=myclient"
|
||||
```
|
||||
|
||||
**Variablen:**
|
||||
- `client_name`: Name des Clients (erforderlich)
|
||||
- `client_ip`: Spezifische Client-IP (Standard: automatisch berechnet)
|
||||
- `allowed_ips`: Erlaubte IP-Ranges (Standard: 10.8.0.0/24)
|
||||
|
||||
**Dokumentation**: Siehe `deployment/ansible/playbooks/README-WIREGUARD.md`
|
||||
|
||||
---
|
||||
|
||||
## Verzeichnisstruktur
|
||||
|
||||
**Auf dem Server:**
|
||||
|
||||
```
|
||||
/etc/wireguard/
|
||||
├── wg0.conf # Server-Konfiguration
|
||||
├── wg0_private.key # Server-Private-Key (600)
|
||||
├── wg0_public.key # Server-Public-Key (644)
|
||||
└── clients/ # Client-Konfigurationen
|
||||
├── development.conf # Development-Client
|
||||
└── ...
|
||||
```
|
||||
|
||||
**Auf dem Client (Linux/macOS):**
|
||||
|
||||
```
|
||||
/etc/wireguard/
|
||||
└── development.conf # Client-Konfiguration (600)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Support
|
||||
|
||||
Bei Problemen:
|
||||
|
||||
1. **Logs prüfen:**
|
||||
```bash
|
||||
sudo journalctl -u wg-quick@wg0 -f
|
||||
```
|
||||
|
||||
2. **Status prüfen:**
|
||||
```bash
|
||||
sudo wg show
|
||||
```
|
||||
|
||||
3. **Firewall prüfen:**
|
||||
```bash
|
||||
sudo ufw status
|
||||
```
|
||||
|
||||
4. **Connectivity testen:**
|
||||
```bash
|
||||
ping 10.8.0.1 # Vom Client
|
||||
```
|
||||
|
||||
5. **Ansible Playbook erneut ausführen:**
|
||||
```bash
|
||||
cd deployment/ansible
|
||||
ansible-playbook -i inventory/production.yml playbooks/setup-wireguard.yml
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Referenzen
|
||||
|
||||
- **WireGuard-Website**: https://www.wireguard.com/
|
||||
- **WireGuard-Installation**: https://www.wireguard.com/install/
|
||||
- **WireGuard-Dokumentation**: https://www.wireguard.com/papers/wireguard.pdf
|
||||
- **Ansible Playbook-Dokumentation**: `deployment/ansible/playbooks/README-WIREGUARD.md`
|
||||
|
||||
---
|
||||
|
||||
**Zuletzt aktualisiert**: 2025-10-31
|
||||
**Version**: 1.0
|
||||
Reference in New Issue
Block a user