In Fortsetzung der Reihe von VPN-Artikeln installieren wir jetzt OpenVPN auf Ubuntu 16.04 Server. OpenVPN ist eine bekannte VPN-Software des gleichnamigen Unternehmens. Es ist etwas schwieriger zu konfigurieren als andere VPN-Software, daher konzentrieren wir uns in diesem Artikel auf die serverseitige Konfiguration und das Erstellen von ovpn-Dateien. Dieses Handbuch ist so konzipiert, dass es als Nicht-Root-Benutzer ausgeführt werden kann. Wenn Sie als Root angemeldet sind, beginnen wir zunächst mit dem Hinzufügen des Nicht-Root-Benutzers.
adduser newuser
Dann geben wir ihm sudo-Rechte und melden uns als Benutzer
anusermod -aG sudo newuser
su newuser
Sie können diese Schritte überspringen, wenn Sie bereits Nicht-Root-Benutzer haben, was höchstwahrscheinlich der Fall ist.
Jetzt als neuer Benutzer oder ein anderer Nicht-Root-Benutzer angemeldet, installieren wir openvpn
sudo apt-get install openvpn easy-rsa
Server- und Client-Zertifikate
Zuerst müssen wir dir für die Zertifizierungsstelle erstellen und die Vars-Datei bearbeiten
make-cadir ~/openvpn-ca
cd ~/openvpn-ca
nano vars
Finden Sie die Zeilen, die export KEY_ enthalten, und machen Sie sie so
export KEY_COUNTRY="US"
export KEY_PROVINCE="New York State"
export KEY_CITY="New York City"
export KEY_ORG="Linoxide"
export KEY_EMAIL="[email protected]"
export KEY_OU="LinuxGeeks"
Es gibt auch eine Zeile mit dem Namen KEY_NAME in derselben Datei, also geben wir dort einfach den Server als Namen ein
export KEY_NAME="server"
Nachdem wir die vars-Datei gespeichert haben, geben wir als nächstes ein:
source vars
was Ihnen den Hinweis über den Befehl ./clean-all geben sollte. Geben Sie es daher ein, um sicherzustellen, dass wir die saubere Umgebung ausführen.
./clean-all
Jetzt gehen wir zum Teil zur Zertifikatserstellung über:
./build-ca
Es wird Ihnen einige Fragen aufwerfen, aber da wir vars bearbeitet haben, sollten die neuen Standardwerte in Ordnung sein, sodass Sie in allen Punkten die Eingabetaste drücken können.
./build-key-server server
Geben Sie erneut ein, aber diesmal nicht in allen Punkten. Wenn Sie aufgefordert werden, ein Passwort einzugeben, geben Sie es nicht ein und drücken Sie am Ende, um ein Zertifikat zu erstellen. Als nächstes kommt diffie hellman:
./build-dh
Es wird einige Zeit dauern, also seien Sie geduldig. Als nächstes brauchen wir den ta.key, um die Sicherheit des Servers zu verbessern.
openvpn --genkey --secret keys/ta.key
Und dann kopieren wir alle relevanten Dateien in das Verzeichnis /etc/openvpn, da openvpn nur von dort liest.
cd ~/openvpn-ca/keys
sudo cp ca.crt ca.key server.crt server.key ta.key dh2048.pem /etc/openvpn
Wir sind mit dem Serverzertifikat fertig, also erstellen wir jetzt ein Zertifikat für client100.
cd ~/openvpn-ca
source vars
./build-key client100
Die Sourced Defaults sind wieder ok, also einfach Enter und y am Ende drücken.
Serverkonfiguration
Als Ausgangspunkt kopieren wir die Beispielkonfiguration mit folgendem Befehl:
gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server.conf
Als nächstes müssen wir server.conf bearbeiten, um unseren Server funktionsfähig zu machen. Sie können jeden Editor verwenden, aber wir werden jetzt den Befehl sed verwenden
sudo sed -i 's/;push "redirect-gateway def1 bypass-dhcp"/push "redirect-gateway def1 bypass-dhcp"/g' /etc/openvpn/server.conf
sudo sed -i 's/;push "dhcp-option DNS 208.67.222.222"/push "dhcp-option DNS 208.67.222.222"/g' /etc/openvpn/server.conf
sudo sed -i 's/;push "dhcp-option DNS 208.67.220.220"/push "dhcp-option DNS 208.67.220.220"/g' /etc/openvpn/server.conf
sudo sed -i 's/;user nobody/user nobody/g' /etc/openvpn/server.conf
sudo sed -i 's/;group nogroup/group nogroup/g' /etc/openvpn/server.conf
sudo sed -i 's/;log-append/log-append/g' /etc/openvpn/server.conf
Dinge, die wir hier gemacht haben:Wir haben den gesamten Datenverkehr so eingestellt, dass er über OpenVPN geht, wir haben die Gruppe und den Benutzer auf nogroup und niemand eingestellt, und wir haben die Protokolle so eingestellt, dass sie nach /etc/openvpn/openvpn.log gehen. Danach brauchen wir noch eine Änderung an ta.key:
sudo nano /etc/openvpn/server.conf
Und finde diese Zeile
tls-auth ta.key 0 # This file is secret
key-direction 0
Das war's für server.conf, als nächstes müssen wir die Paketweiterleitung für unseren Ubuntu-Server aktivieren
sudo sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/g' /etc/sysctl.conf
sudo sysctl -p
ufw-Regeln müssen ebenfalls geändert werden, um Maskierung zu ermöglichen, fügen Sie dies also am Anfang vor *filter hinzu
Abschnitt
sudo nano /etc/ufw/before.rules
# START OPENVPN RULES
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Allow traffic from OpenVPN client to eth0
-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
COMMIT
# END OPENVPN RULES
Beachten Sie, dass Sie den eth0-Teil höchstwahrscheinlich ändern müssen, um den echten Namen Ihrer mit dem Internet verbundenen Netzwerkschnittstelle widerzuspiegeln, daher habe ich ihn hervorgehoben. Als nächstes aktivieren wir die Weiterleitung in ufw wie in sysctl:
sudo sed -i 's/DEFAULT_FORWARD_POLICY="DROP"/DEFAULT_FORWARD_POLICY="ACCEPT"/g' /etc/default/ufw
Wir konfigurieren die Firewall
sudo ufw allow 1194/udp
sudo ufw disable
sudo ufw enable
sudo systemctl start openvpn@server
sudo systemctl status -l openvpn
Wenn alles gut gegangen ist, aktivieren Sie den Start von openvpn beim Booten
sudo systemctl enable openvpn@server
Client-Konfiguration
Beim Client-Konfigurationsteil verwenden wir Zertifikate, die wir bereits erstellt haben, zum Beispiel client100. Wir brauchen auch Client-Konfigurationsdateien
mkdir -p ~/client-configs/files
chmod 700 ~/client-configs/files
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf
Die Datei, die wir kopiert haben, ist eine grundlegende Einrichtung, daher muss sie bearbeitet werden.
nano ~/client-configs/base.conf
Und dann finden Sie eine Zeile, die remote sagt. Ändern Sie es auch auf Ihre Server-IP-Adresse von FQDN.
remote your.serv.ipor.fqdn 1194
Speichern Sie das, als Rest der Bearbeitung werden wir die Befehle sed und echo verwenden:
sudo sed -i 's/;user nobody/user nobody/g' ~/client-configs/base.conf
sudo sed -i 's/;group nogroup/group nogroup/g' ~/client-configs/base.conf
sudo sed -i 's/ca ca.crt/#ca ca.crt/g' ~/client-configs/base.conf
sudo sed -i 's/cert client.crt/#cert client.crt/g' ~/client-configs/base.conf
sudo sed -i 's/key client.key/#key client.key/g' ~/client-configs/base.conf
sudo echo key-direction 1 >> ~/client-configs/base.conf
Also, was haben wir hier gemacht? Wir setzen zuerst user und group auf none und nogroup. Dann haben wir die Zertifikatspfade auskommentiert, da wir Inline-Zertifikate in die .ovpn-Datei integrieren werden. Dann haben wir den Parameter Schlüsselrichtung 1 hinzugefügt.
Skript zum Erstellen von Client-Konfigurationen
Zum Einbetten der Client-Konfiguration, Schlüssel und Zertifikate in eine einzelne .ovpn-Datei zur einfacheren Übertragung an Remote-Clients verwenden wir ein einfaches Skript. Lass es uns tun
nano ~/client-configs/make_config.sh
Und fügen Sie dann diesen Pastebin dort ein. Nach dem Speichern müssen wir das ausführbare Bit hinzufügen, also führen Sie diesen Befehl aus:
chmod +x ~/client-configs/make_config.sh
Dann können wir einfach Konfigurationsdateien erstellen
cd ~/client-configs
./make_config.sh client100
ls ~/client-configs/files
Die Syntax des Befehls ist einfach, Sie müssen sich im client-configs-Verzeichnis befinden und den Befehl mit dem Argument ausführen, das den Namen des Clients angibt, den Sie zuvor erstellt haben. Wenn Sie mehr Clients benötigen, erstellen Sie weitere Clientzertifikate mit einem anderen Namen und führen Sie diesen Befehl erneut aus. Wenn alles gut gelaufen ist, sollten sich im Verzeichnis client-configs/files ovpn-Dateien befinden. Sie müssen diese an Ihren Client oder Ihre Clients übertragen und eine Verbindung herstellen. Ich werde es mit scp machen, von meinem Fedora-Laptop habe ich so befehlen
scp [email protected]:/home/newuser/client-configs/files/client100.ovpn /home/miki/Documents/
Von dort aus können Sie es mit einem USB-Kabel oder über AirDroid auf ein Android-Telefon oder auf eine Windows-VM oder auf einen Mac laden. Für den Linux-Netzwerkmanager müssten Sie die Datei disassemblieren
Schlussfolgerung
Hier geht es um die Serverkonfiguration, als nächstes müssten wir uns von verschiedenen Clients verbinden. Für Android können wir OpenVPN Connect verwenden, für Mac Tunnelblick, für Windows gibt es OpenVPN von der offiziellen Seite und für Linux gibt es den Netzwerkmanager. In einigen der folgenden Artikel werden wir all dies behandeln.