← Zurueck zu VPN & Security

VPN Best Practices

Sichere Konfiguration, Key-Management und Netzwerk-Sicherheit fuer dein VPN.

⏱️ 25 Minuten 📊 Mittel
🔑 Key Management
🛡️ Firewall-Regeln
📊 Logging
🔄 Updates
🔑 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
Sichere Key-Generierung
bash

# 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:

  1. Neuen Key generieren
  2. Alten Public Key aus Server-Config entfernen
  3. Neuen Public Key hinzufuegen
  4. Vorfall dokumentieren und analysieren
🛡️ Firewall-Konfiguration +

Der VPN-Server sollte minimal exponiert sein.

UFW (Debian/Ubuntu)
bash

# 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
iptables (erweitert)
bash

# 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.

Client-Konfiguration
bash

[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
DNS-Server auf VPN-Server (Pi-hole/Unbound)
bash

# 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:

📊 Logging & Monitoring +

VPN-Aktivitaeten ueberwachen ohne Privatsphaere zu verletzen.

WireGuard-Status ueberwachen
bash

# 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'
Logging mit systemd
bash

# 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.

Linux Kill Switch (iptables)
bash

# 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
WireGuard PostUp/PostDown Kill Switch
bash

# 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

  1. VPN verbinden
  2. IP pruefen (sollte VPN-Server sein)
  3. VPN-Interface deaktivieren: wg-quick down wg0
  4. 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
Automatische Updates
bash

# 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 →