Wie richte ich OpenVPN ein, damit ich das Internet von einem ungesicherten Hotspot aus sicher nutzen kann?

31

Ziel: Ich möchte das Internet sicher über meinen Heim-PC nutzen können, während mein Notebook mit einem offenen Hotspot / Access Point verbunden ist.

Ich weiß , dass ich einen SSH-Tunnel / SOCKS-Proxy verwenden kann, aber ich möchte nicht mit Anwendungen herumfummeln (sie dazu bringen, sie zu verwenden, wenn es überhaupt möglich ist). Ich denke, was ich brauche, ist ein OpenVPN-Setup. Daher suche ich nach einer detaillierten Anleitung, wie man:

  1. Installieren und konfigurieren Sie den OpenVPN-Server
  2. Einrichten des OpenVPN-Clients (NetworkManager)

Ubuntu-Versionen, auf denen dies funktionieren sollte, sind 10.10 und 11.04.

Drehmoment
quelle
Dies ist eher eine Serverfehler-Frage als eine Ubuntu-Frage, denke ich.
Luis Alvarado
1
@ Cyrex: 1) ist, 2) wahrscheinlich nicht
Lekensteyn

Antworten:

40

Ich habe die genaue Frage vor ein paar Monaten, aber zusätzlich wollte ich eine IPv6-Verbindung, wenn möglich. Meine Fragen zu Serverfault könnten Sie interessieren:

Ich hatte nur eine Netzwerkkarte ("Netzwerkschnittstelle") auf meinem Server zur Verwendung. In meinem Setup war NetworkManager nicht ausreichend, da ich ein benutzerdefiniertes Skript ausführen muss, um IPv6 zu unterstützen. Der Einfachheit halber werde ich hier jedoch NetworkManager verwenden und die IPv6-Unterstützung weglassen.

Treffen Sie zunächst eine Entscheidung über die Authentifizierungsmethode. Ich verwende die sicherere Zertifikatsmethode, die wie SSL funktioniert: Während des Handshakes wird ein gemeinsames Geheimnis ausgewählt, das für die Sitzung verwendet wird. Die anderen Methoden sind ein gemeinsam genutzter Schlüssel. einen Benutzernamen und ein Passwort.

Server

1. Vorbereiten

Installieren Sie zunächst den OpenVPN-Server. Das ist so einfach wie sudo apt-get install openvpn. Der schwierige Teil ist die Konfiguration. Die Konfiguration ist in vorhanden /etc/openvpn.

2. Konfigurieren Sie die Authentifizierung

Der Server benötigt Zertifikate, um sich und seine Clients zu identifizieren. Dieses Zertifikat wird von einer Zertifizierungsstelle (Common Authority) abgerufen. Die Erstellung der Zertifikate und der zugehörigen privaten Schlüssel kann auf jedem Computer erfolgen, sie muss nicht auf dem Server erfolgen. Wenn Sie wirklich paranoid sind, sollten Sie dies auf einem Computer tun, der nicht mit einem Netzwerk verbunden ist, und einen Memory Stick zum Übertragen der Zertifikate verwenden.

Erstellen Sie eine Zertifizierungsstelle und Zertifikate für den Server

Dieser Schritt muss einmal ausgeführt werden, es sei denn, der private Schlüssel Ihrer Zertifizierungsstelle wurde kompromittiert. In diesem Fall können gültige Zertifikate erstellt werden, die vom Server akzeptiert werden und zu einer Sicherheitsverletzung führen.

Die offizielle Dokumentation schlägt vor, die Verwaltung in zu erledigen /etc/openvpn. Ich bin kein großer Fan davon, alles als root auszuführen, also werde ich es in ein anderes Verzeichnis stellen.

  1. Erstellen Sie das Administrationsverzeichnis und kopieren Sie die darin enthaltenen Dateien, indem Sie Folgendes ausführen:

    mkdir ~/openvpn-admin
    cd ~/openvpn-admin
    cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/ ./easy-rsa
    cd easy-rsa
    
  2. Bearbeiten Sie die Standardeinstellungen nach varsBedarf, indem KEY_SIZE=2048Sie beispielsweise festlegen, dass Sie paranoid sind.
  3. Laden Sie die Variablen und erstellen Sie das Schlüsselverzeichnis, indem Sie Folgendes ausführen:

    . vars
    
  4. Wenn Sie eine Fehlermeldung erhalten , dass No ... openssl.cnf file could be found Further invocations will fail, laufen ln -s openssl-1.0.0.cnf openssl.cnf, dann . varswieder.

  5. Wenn Sie diese Zertifizierungsstelle zum ersten Mal verwenden, bereiten Sie die Schlüsselumgebung vor. Sie nicht diesen Befehl ausführen , wenn Sie Ihre zuvor erstellten CA beibehalten möchten Dazu müssen Sie ein neues implementieren ca.crt.

    ./clean-all
    
  6. Erstellen Sie die Zertifizierungsstelle, indem Sie ausführen ./build-ca. Sie können beliebige Details eingeben. Beachten Sie jedoch, dass diese Informationen in Protokolldateien angezeigt werden, wenn die Clients eine Verbindung zum Server herstellen. Dadurch werden die Dateien ca.keyund ca.crtim Unterordner erstellt keys. Halten Sie die ca.keyDatei unter allen Umständen geheim . Andernfalls kann jeder mit dem Schlüssel eine Verbindung zu Ihrem Server herstellen.
  7. Wenn Sie ein früheres Zertifikat haben, das verloren gegangen oder abgelaufen ist, müssen Sie das alte Zertifikat zuerst mit widerrufen ./revoke-full server. Andernfalls erhalten Sie einen Datenbankfehler.
  8. Erstellen Sie das Zertifikat für den Server, indem Sie Folgendes ausführen:

    ./build-key-server server
    

    Wenn Sie nach einem Kennwort gefragt werden, lassen Sie es leer, es sei denn, Sie möchten das Kennwort bei jedem Serverstart eingeben (nicht empfohlen). Bestätigen Sie, dass Sie das Zertifikat signiert und festgeschrieben haben. Im Verzeichnis werden zwei neue Dateien angezeigt keys: server.keyund server.crt.

DH und bereite dich auf tls-auth vor

Generieren Sie Diffie-Hellman- Parameter mit:

./build-dh

Pro Aushärtungsspitzen verwenden tls-auth. Generieren Sie dazu den gemeinsamen geheimen Schlüssel mit:

openvpn --genkey --secret ta.key

Die resultierende Datei ( ta.key) muss ebenfalls an Clients verteilt werden, Sie sollten sie jedoch nicht öffentlich zugänglich machen.

Erstellen Sie Zertifikate für Clients

Für jeden Kunden sollten diese Schritte wiederholt werden:

  1. Geben Sie das Verzeichnis ein, in dem Sie Ihr CA- und Server-Zertifikat erstellt haben:

    cd ~/openvpn-admin/easy-rsa
    
  2. Wenn Sie den CA-Erstellungsschritt übersprungen haben, weil Sie bereits einen haben, müssen Sie zuerst die Variablen laden:

    . vars
    
  3. Wenn Sie neue Zertifikate erstellen, weil die alten verloren gehen oder abgelaufen sind , müssen Sie die alten Zertifikate zuerst mit widerrufen ./revoke-full you. Andernfalls erhalten Sie einen Datenbankfehler.
  4. Erstellen Sie das Client-Zertifikat you.keyund das zugehörige Zertifikat you.crt:

    ./build-key you
    

    Das CommonNamesollte einzigartig sein. Lassen Sie das Passwort leer, wenn Sie KDE verwenden, da es ab 10.10 noch nicht unterstützt wird. Bestätigen Sie wie bei der Serverzertifikaterstellung das Signieren des Zertifikats und das Übernehmen der Änderungen.

3. Richten Sie den OpenVPN-Dienst ein

Standardmäßig wird OpenVPN beim Akzeptieren von Verbindungen als Root ausgeführt. Keine gute Idee, wenn der Dienst über das böse Internet erreichbar ist.

  1. Erstellen Sie einen dedizierten Benutzer für OpenVPN, sagen Sie openvpn:

    sudo useradd openvpn
    
  2. Kopieren Sie die Dateien server.key, server.crt, ca.crtund dh1024.pem(oder , dh2048.pemwenn Sie haben Schlüsselgröße geändert) aus dem Schlüssel - Verzeichnis in /etc/openvpn. Eine Erlaubnis von 400 (nur lesbar für den Besitzer) ist in Ordnung.

    sudo cp ~/openvpn-admin/easy-rsa/keys/{server.key,server.crt,ca.crt,dh*.pem} /etc/openvpn
    sudo chmod 400 /etc/openvpn/{server.key,server.crt,ca.crt}
    
  3. Kopieren Sie auch die Datei ta.key:

    sudo cp ~/openvpn-admin/easy-rsa/ta.key /etc/openvpn
    sudo chmod 400 /etc/openvpn/ta.key
    
  4. Erstellen Sie die Datei /etc/openvpn/server.confund fügen Sie die nächsten Zeilen ein:

    proto udp
    dev tap
    ca ca.crt
    cert server.crt
    key server.key
    dh dh1024.pem
    server 10.8.0.0 255.255.255.0
    push "redirect-gateway def1"
    ifconfig-pool-persist ipp.txt
    keepalive 10 120
    tls-auth ta.key 0
    # Compress data to save bandwidth
    comp-lzo
    user openvpn
    group openvpn
    persist-key
    persist-tun
    # Logs are useful for debugging
    log-append openvpn-log
    verb 3
    mute 10
    
  5. Stellen Sie die entsprechenden Berechtigungen ein, es muss nicht geheim sein, aber ich bevorzuge es, keine Konfigurationsdetails preiszugeben:

    sudo chmod 640 /etc/openvpn/server.conf
    

4. Beenden Sie den Server

Wenn Sie die Zertifikate auf dem Server erstellt haben, sollten Sie sie verschlüsseln oder vom Server entfernen. Verlieren Sie auf keinen Fall das ca.keyund server.key. Im ersten Fall können andere Benutzer eine Verbindung zu Ihrem Server herstellen. In letzterem ist eine MITM möglich.

Klient

Neben der Server-IP-Adresse sollte der Serveradministrator die folgenden Dateien übergeben:

  • ca.crt: zur Überprüfung der Zertifikate
  • server.crt: um den Server zu überprüfen und mit ihm zu kommunizieren
  • ta.key: zum Härten der Sicherheit
  • you.crt: um sich mit dem Server zu identifizieren
  • you.key: Es ist wie bei Ihrem Passwort, die Dateiberechtigungen sollten 400 sein (schreibgeschützt für Besitzer)

1. Installation

Installieren Sie OpenVPN und das NetworkManager-Plugin (geeignet für KDE und Gnome):

sudo apt-get install openvpn network-manager-openvpn

network-manager-openvpn befindet sich im Universums-Repository.

2. Konfiguration

Verwenden Sie in der Systemsteuerung die folgenden Details:

  • Gateway: Die IP-Adresse des Servers
  • Typ: "Zertifikate (TLS)" (Gnome) oder "X.509-Zertifikat" (KDE)
  • CA-Zertifikat: Pfad zu ca.crt
  • Benutzerzertifikat: Pfad zu you.crt
  • Privater Schlüssel: Pfad zu you.key

Bei Advanced :

  • Gateway-Port: Automatisch (1194) (muss nicht geändert werden)
  • LZO-Datenkomprimierung verwenden: aktiviert
  • TCP-Verbindung verwenden: deaktiviert
  • TAP-Gerät verwenden: aktiviert
  • Verschlüsselung: Standard
  • HMAC-Authentifizierung: Standard
  • TLS-Authentifizierung verwenden: aktiviert
    Geben Sie den Pfad der Schlüsseldatei an ta.keyund setzen Sie "Schlüsselrichtung" auf 1.
  • (Zu erledigen - Auschecken ) Der Server pusht das Standard-Gateway, damit der gesamte Datenverkehr über die VPN-Verbindung geleitet wird. Das letzte Mal, als ich nachgesehen habe, hat das Plug-in "network-manager-openvpn" dies nicht getan.

Wenn NetworkManager nicht funktioniert oder nicht verwendet werden soll, legen Sie die Dateien ( ca.crt, ...) ein /etc/openvpnund erstellen Sie die Datei /etc/openvpn/client.conffile:

client
dev tap
proto udp
# replace 1.2.3.4 by your server IP
remote 1.2.3.4 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert you.crt
key you.key
ns-cert-type server
tls-auth ta.key 1
comp-lzo
user nobody
group nogroup
verb 3
mute 20

Wenn Sie dieses VPN beim Booten nicht aktivieren möchten, bearbeiten Sie /etc/default/openvpndie nächste Zeile und kommentieren Sie sie aus, indem Sie Folgendes entfernen #:

#AUTOSTART="none"

Um diese Verbindung zu starten, führen Sie Folgendes aus:

sudo /etc/init.d/openvpn start client

clientsollte umbenannt werden, wenn Ihre Konfigurationsdatei nicht benannt ist client.conf. Beispiel: Wenn Sie Ihre Konfigurationsdatei benannt haben safe.conf, müssen Sie ausführen sudo /etc/init.d/openvpn start safe.

Um OpenVPN zu stoppen, müssen Sie Folgendes ausführen:

sudo /etc/init.d/openvpn stop
Lekensteyn
quelle
1
Wie lautet die Serverkonfiguration für die Anmeldung auf der Basis von Benutzername / Passwort, bei der mein Client keine Kenntnisse zum Einrichten des VPN-Clients hat und nur die IP-Adresse, den Benutzernamen und das Passwort des Servers verwenden soll?
@YumYumYum Keine Ahnung, wie man den Benutzernamen / das Passwort verwendet, schaue in die Handbuchseite von openvpn ( man openvpn). Aktuelle Versionen von openvpn bieten die Möglichkeit, Zertifikate und Schlüsseldateien einzubetten. Daher ist es möglicherweise noch einfacher, diese einzelne Konfigurationsdatei mit Anweisungen für den Benutzer zu versehen.
Lekensteyn
Beachten Sie, dass neuere Versionen von Ubuntu, die mit OpenSSL 1.0.1 ausgeliefert werden, und das Ausführen des . varsobigen Befehls möglicherweise einen Fehler erzeugen , der besagt, dass die Datei openssl.cnf gefunden werden kann. Weitere Aufrufe schlagen fehl. Sie müssen sudo -s; cd /usr/share/doc/openvpn/examples/easy-rsa/2.0/; ln -s openssl-1.0.0.cnf openssl.cnf, dann laufen . varsund die anderen Befehle.
Dan Dascalescu
@DanDascalescu Das Skript whichopensslfindet die openssl-1.0.0.cnfDatei korrekt für mich (easy-rsa 2.3.2, OpenSSL 1.0.1e)
Lekensteyn
Sehr informative, gründliche Antwort. Könnten Sie diese Frage beantworten ?
JB0x2D1
8

Sie müssen sich nicht mit Anwendungen beschäftigen. Dies funktioniert "genau wie VPN".

  1. Installieren Sie zuerst das tsocksPaket (temporäre Socken):

    sudo apt-get install tsocks
    
  2. Dann bearbeiten /etc/tsocks.confund eingeben

    server = 127.0.0.1
    server_port = 3333
    
  3. Öffnen Sie nun ein Terminal und geben Sie Folgendes ein (dies verbindet Sie):

    ssh -ND 3333 ssh.url.to.your.home.machine
    
  4. Ausführen (über ein anderes Terminal oder ALT-F2):

    tsocks firefox
    

Jetzt überträgt Firefox die gesamte Kommunikation an den SOCKS-Server auf Ihrem Computer, den SSH erstellt hat. Dies wird weiter zu Ihrer Heimmaschine getunnelt, wo es ins Web geht. Alles, was Sie auf Ihrem Heimcomputer benötigen, ist ein SSH-Server. Wiederholen Sie nach dem ersten Mal einfach die Schritte 3 und 4.

Es wirkt wie ein Zauber! Leider mag Chrom keine Tsocks, aber hey, Firefox funktioniert.

MarkovCh1
quelle
3
Nun, sehen Sie sich Ihren letzten Satz an - ich möchte nicht alle meine Programme zuerst überprüfen, ob sie wirklich gut mit tsocks zusammenarbeiten, wenn es nur ein Klick im NetworkManager-Applet mit OpenVPN sein könnte.
htorque
OKAY. Meine Antwort wird wahrscheinlich für Leute nützlich sein, die eine schnelle Lösung für den Zugriff auf Websites suchen.
MarkovCh1
1

Die SSH-Tunnellösung ist einfacher als Sie denken. Ein Programm wie gSTM startet / stoppt die Tunnel für Sie mit einer GUI. Öffnen Sie dann einfach den Netzwerk-Proxy und ändern Sie ihn von der direkten Internetverbindung zur manuellen Proxy-Konfiguration. Klicken Sie auf "Systemweit anwenden", und alle Ihre Apps sollten ihre Daten durch den Tunnel senden.

Felix
quelle