VPN Best Practices
Sichere Konfiguration, Key-Management und Netzwerk-Sicherheit fuer dein VPN.
🔑 Key Management
Private Keys sind das Herzstrueck deiner VPN-Sicherheit. Schuetze sie entsprechend!
✓ Richtig
- Keys nur auf dem Zielgeraet generieren
- Private Keys niemals uebertragen
- Dateiberechtigungen: 600 (nur root)
- Keys regelmaessig rotieren
- Pro Geraet ein eigener Key
✗ Falsch
- Private Keys per E-Mail senden
- Keys in Git-Repos speichern
- Einen Key fuer alle Geraete
- Keys nie rotieren
- Keys in Cloud-Storage
# Schluessel direkt auf dem Geraet generieren
umask 077 # Nur Besitzer darf lesen/schreiben
# WireGuard-Keys
wg genkey | tee privatekey | wg pubkey > publickey
# Berechtigungen pruefen
ls -la privatekey
# -rw------- 1 root root 45 ... privatekey
# NIEMALS den Private Key kopieren!
# Nur den PUBLIC Key zum Server uebertragen
Private Key kompromittiert?
Wenn ein Private Key kompromittiert wurde:
- Neuen Key generieren
- Alten Public Key aus Server-Config entfernen
- Neuen Public Key hinzufuegen
- Vorfall dokumentieren und analysieren
🛡️ Firewall-Konfiguration
Der VPN-Server sollte minimal exponiert sein.
# Nur noetige Ports oeffnen
ufw default deny incoming
ufw default allow outgoing
# SSH (von bestimmten IPs, wenn moeglich)
ufw allow from 203.0.113.0/24 to any port 22
# WireGuard
ufw allow 51820/udp
# Nach VPN-Verbindung: Interne Services nur ueber VPN
ufw allow in on wg0 to any port 80
ufw allow in on wg0 to any port 443
# Firewall aktivieren
ufw enable
ufw status verbose
# Nur etablierte Verbindungen und VPN-Traffic erlauben
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p udp --dport 51820 -j ACCEPT
iptables -A INPUT -i wg0 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -j DROP
# Forwarding nur fuer VPN
iptables -A FORWARD -i wg0 -j ACCEPT
iptables -A FORWARD -o wg0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -j DROP
# NAT fuer VPN-Clients
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Minimale Angriffsflaeche
- Nur WireGuard-Port (51820/UDP) von aussen erreichbar
- SSH nur ueber VPN oder von bekannten IPs
- Alle anderen Services nur ueber VPN
- Regelmaessig offene Ports pruefen:
ss -tulnp
🌐 DNS Leak Prevention
DNS-Anfragen sollten durch das VPN gehen, nicht direkt ins Internet.
[Interface]
PrivateKey = ...
Address = 10.0.0.2/24
# DNS ueber VPN erzwingen
DNS = 10.0.0.1
[Peer]
PublicKey = ...
Endpoint = vpn.example.com:51820
# Wichtig: 0.0.0.0/0 fuer Full Tunnel
AllowedIPs = 0.0.0.0/0, ::/0
# Pi-hole installieren (eigener DNS-Resolver)
curl -sSL https://install.pi-hole.net | bash
# In WireGuard-Config:
# DNS = 10.0.0.1 (VPN-Server IP)
# DNS-Leak testen:
# https://dnsleaktest.com
# https://www.dnsleaktest.com
# https://ipleak.net
DNS Leaks pruefen
Nach VPN-Verbindung immer testen:
- dnsleaktest.com
- ipleak.net
- DNS-Server sollte dein VPN-Server sein, nicht dein ISP!
📊 Logging & Monitoring
VPN-Aktivitaeten ueberwachen ohne Privatsphaere zu verletzen.
# Aktuelle Verbindungen
wg show
# Output:
# interface: wg0
# public key: SERVER_PUBLIC_KEY
# private key: (hidden)
# listening port: 51820
#
# peer: CLIENT_PUBLIC_KEY
# endpoint: 203.0.113.50:54321
# allowed ips: 10.0.0.2/32
# latest handshake: 42 seconds ago
# transfer: 1.23 MiB received, 4.56 MiB sent
# Als Skript fuer Monitoring
watch -n 5 'wg show'
# WireGuard-Logs
journalctl -u wg-quick@wg0 -f
# Firewall-Logs (blockierte Verbindungen)
# /etc/rsyslog.d/iptables.conf
:msg,contains,"[IPTABLES]" /var/log/iptables.log
# In iptables:
iptables -A INPUT -j LOG --log-prefix "[IPTABLES] DROP: " --log-level 4
Was loggen?
- Ja: Verbindungszeiten, Handshakes, Fehler
- Nein: Traffic-Inhalte, besuchte Seiten
- Logs regelmaessig rotieren und nach Bedarf loeschen
🚫 Kill Switch
Verhindert Datenverkehr wenn VPN-Verbindung unterbrochen wird.
# Nur Traffic ueber VPN erlauben (auf dem Client)
# Alles blockieren ausser VPN
iptables -P OUTPUT DROP
iptables -P INPUT DROP
# Loopback erlauben
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# WireGuard-Verbindung zum Server erlauben
iptables -A OUTPUT -d VPN_SERVER_IP -p udp --dport 51820 -j ACCEPT
iptables -A INPUT -s VPN_SERVER_IP -p udp --sport 51820 -j ACCEPT
# Traffic ueber VPN-Interface erlauben
iptables -A OUTPUT -o wg0 -j ACCEPT
iptables -A INPUT -i wg0 -j ACCEPT
# Lokales Netzwerk (optional)
iptables -A OUTPUT -d 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT
# In der Client-Config:
[Interface]
PrivateKey = ...
Address = 10.0.0.2/24
DNS = 10.0.0.1
# Kill Switch aktivieren
PostUp = iptables -I OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT
PreDown = iptables -D OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT
[Peer]
PublicKey = ...
Endpoint = vpn.example.com:51820
AllowedIPs = 0.0.0.0/0, ::/0
Kill Switch testen
- VPN verbinden
- IP pruefen (sollte VPN-Server sein)
- VPN-Interface deaktivieren:
wg-quick down wg0 - Keine Internet-Verbindung mehr → Kill Switch funktioniert!
🔄 Updates & Wartung
Regelmaessige Wartung haelt das VPN sicher.
Taeglich
- Logs auf Anomalien pruefen
- Aktive Verbindungen verifizieren
Woechentlich
- System-Updates installieren
- Firewall-Regeln ueberpruefen
- Unbenutzte Peers entfernen
Monatlich / Quartalsweise
- Keys rotieren (bei Bedarf)
- Konfiguration auditieren
- Penetration Testing
# Unattended-upgrades (Debian/Ubuntu)
apt install -y unattended-upgrades
# Konfigurieren
dpkg-reconfigure -plow unattended-upgrades
# Nur Sicherheitsupdates automatisch
# /etc/apt/apt.conf.d/50unattended-upgrades
Unattended-Upgrade::Allowed-Origins {
"[distro_id]:[distro_codename]-security";
};
# Ersetze [distro_id] und [distro_codename] durch Variablen
# Automatischer Reboot wenn noetig (nachts)
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "03:00";
Updates planen
Updates koennen VPN-Verbindungen unterbrechen. Plane Wartungsfenster und informiere Nutzer vorab.
✅ Security Checkliste
Vor dem Go-Live pruefen:
Pre-Deployment Checklist
- ☐ Private Keys sind geschuetzt (chmod 600)
- ☐ Nur notwendige Ports offen
- ☐ SSH nur ueber VPN oder von bekannten IPs
- ☐ DNS-Leak-Test bestanden
- ☐ Kill Switch konfiguriert (wenn noetig)
- ☐ Logging aktiviert
- ☐ Automatische Updates konfiguriert
- ☐ Backup der Konfiguration erstellt
- ☐ Dokumentation aktuell
Geschafft!
Mit diesen Best Practices ist dein VPN sicher konfiguriert. Vergiss nicht, regelmaessig zu pruefen und zu aktualisieren!
Security-Audit gewuenscht?
Wir pruefen deine VPN-Konfiguration und helfen bei der Haertung deiner Infrastruktur.
Beratung anfragen →