Wireguard unter Linux einrichten

WireGuard ist ein modernes und einfach zu konfigurierendes VPN-Tool. In diesem Tutorial zeige ich Schritt für Schritt, wie WireGuard auf einem Linux-Server installiert und konfiguriert wird.

Vorbereitungen Link zu Überschrift

Zunächst müssen wir sicherstellen, dass das System aktuell ist und alle benötigten Pakete verfügbar sind:

sudo apt update && sudo apt upgrade

Ebenfalls sollte nftables und fail2ban bereits eingerichtet sein.

Installation von WireGuard Link zu Überschrift

WireGuard ist in den meisten Linux-Distributionen direkt über die Paketverwaltung verfügbar. Die Installation erfolgt einfach mit:

sudo apt install wireguard

Nun ist WireGuard auf dem System installiert und wir können mit der Konfiguration fortfahren.

Schlüssel erstellen Link zu Überschrift

WireGuard verwendet ein Schlüsselpaar (private und öffentliche Schlüssel) für die Authentifizierung. Die Erstellung erfolgt mit:

wg genkey | tee server_private_key | wg pubkey > server_public_key

Der private Schlüssel wird in der Datei server_private_key gespeichert und der öffentliche Schlüssel in server_public_key.

Konfiguration der wg0-Schnittstelle Link zu Überschrift

Die Hauptkonfiguration von WireGuard erfolgt in der Datei /etc/wireguard/wg0.conf. Diese Datei enthält die Einstellungen für das Interface, die IP-Adressen und die Schlüssel:

sudo vim /etc/wireguard/wg0.conf

Die Datei sollte folgenden Inhalt haben:

[Interface]
Address = 10.10.10.1/24
ListenPort = 51820
PrivateKey = <<privatekey>>

Ersetze «privatekey» durch den Inhalt der Datei server_private_key, den du zuvor erstellt hast.

Firewall-Konfiguration mit nftables Link zu Überschrift

Um sicherzustellen, dass der Traffic korrekt geroutet und gesichert wird, passen wir die nftables-Konfiguration an. Erstelle oder bearbeite die Datei /etc/nftables.conf:

sudo vim /etc/nftables.conf

Die Konfiguration könnte wie folgt aussehen:

#!/usr/sbin/nft -f

flush ruleset

table inet filter {
    chain input {
        type filter hook input priority filter; policy drop;

        ct state { established, related } counter accept
        ct state invalid drop

        iifname "lo" counter accept
        ip protocol icmp counter accept

        tcp dport { 443, 80 } counter accept comment "HTTP/S"
        tcp dport {22} counter accept comment "SSH"
        udp dport {51820} counter accept comment "Allow VPN"
    }

    chain forward {
        type filter hook forward priority filter; policy drop;

        iifname "wg0" oifname "eth0" ct state { established, related, new } counter accept
        iifname "eth0" oifname "wg0" ct state { established, related } counter accept
    }

    chain output {
        type filter hook output priority filter; policy accept;
        tcp dport 25 counter drop comment "Drop SMTP over port 25"
    }
}

table inet nat {
    chain POSTROUTING {
        type nat hook postrouting priority srcnat; policy accept;
        oifname "eth0" ip saddr 10.10.10.0/24 counter masquerade comment "Masquerade VPN traffic"
    }
}

Diese Regeln ermöglichen den VPN-Traffic und leiten ihn korrekt über das Interface eth0. Bei dieser Config handelt es sich um eine Erweiterung der Konfiguration aus einem bestehenden Tutorial, nicht alle Einstellungen sind zwigend notwendig.

Aktivieren und Starten des WireGuard-Dienstes Link zu Überschrift

Um sicherzustellen, dass WireGuard bei jedem Systemstart aktiviert wird, aktivieren wir den Dienst:

sudo systemctl enable wg-quick@wg0.service

Starte den Dienst anschließend:

sudo systemctl start wg-quick@wg0.service

IP-Forwarding aktivieren Link zu Überschrift

Damit der Traffic von WireGuard über das Netzwerk weitergeleitet wird, muss IP-Forwarding aktiviert sein. Dies wird in der Datei /etc/sysctl.conf konfiguriert:

sudo vim /etc/sysctl.conf

Füge die folgende Zeile hinzu oder entferne das Kommentarzeichen, falls die Zeile bereits existiert:

net.ipv4.ip_forward=1

Anschließend laden wir die geänderte Konfiguration:

sudo sysctl -p

Neustarten der Firewall Link zu Überschrift

Um die Änderungen an nftables wirksam zu machen, starten wir die Firewall neu:

sudo systemctl restart nftables

Einrichten eines neuen Peers Link zu Überschrift

Um ein Gerät mit dem Server zu verbinden, muss WireGuard auch auf dem Server und Client installiert werden und ein Peer in beiden Configs hinterlegt werden.

Zu Beginn muss WireGuard angehalten werden:

sudo systemctl stop wg-quick@wg0.service

Jetzt kann die Config bearbeitet werden:

sudo vim /etc/wireguard/wg0.conf

Das Interface muss um einen Peer erweitert werden Es können so viele Peers hinzugefügt werden, wie der IP-Bereich ermöglicht.

[Interface]
Address = 10.10.10.1/24
ListenPort = 51820
PrivateKey = <<private_key>>

[Peer]
PublicKey = <<client_public_key>>
AllowedIPs = 10.10.10.2/32

Auf der Client-Seite sieht die Config folgendermaßen aus:

[Interface]
PrivateKey = <<client_private_key>>
Address = 10.10.10.2/24
DNS = 1.1.1.1

[Peer]
PublicKey = <<server_public_key>>
AllowedIPs = 10.10.10.1/32, 0.0.0.0/0
Endpoint = <<server_ip:port>>
PersistentKeepalive = 25

Nun kann der Dienst wieder gestartet werden:

sudo systemctl start wg-quick@wg0.service

Mit diesen Schritten ist WireGuard auf einem Linux-Server eingerichtet und konfiguriert.