GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> OpenVPN

Einrichten eines OpenVPN-Servers mit Okta Single Sign-on Web Authentication und Viscosity

Nachdem Sie Ihren eigenen OpenVPN-Server eingerichtet haben, möchten Sie vielleicht dessen Sicherheit verbessern. Eine Möglichkeit, dies zu tun und Ihren Authentifizierungsprozess zu optimieren, ist die Verwendung von Single Sign-in oder Single Sign-On (SSO), manchmal auch als SAML bezeichnet (Dies ist ein SSO-Protokoll). Dies fügt eine weitere Sicherheitsmaßnahme hinzu, um zu verhindern, dass sich unerwünschte Benutzer mit Ihrem Server verbinden, und integriert sich gleichzeitig in Ihr vorhandenes Benutzer-, Identitäts- oder Client-Verwaltungssystem oder Ihren Authentifizierungsprozess.

Dieser Leitfaden enthält ein Beispiel dafür, wie dies mit Okta, einer beliebten Cloud-basierten Identitätsplattform, funktionieren könnte. Die Grundlagen dieses Beispiels lassen sich auf die meisten Identitätsverwaltungssysteme (IDMS) übertragen, mit nur Änderungen an der Art und Weise, wie Sie mit dem IDMS Ihrer Wahl kommunizieren.

Bitte beachten Sie, dass dieses Beispiel darauf ausgelegt ist, die Grundlagen zu zeigen, wie ein IDM- oder SSO-System auf der Serverseite in OpenVPN integriert werden kann, es ist nicht darauf ausgelegt, eigenständig so wie es ist verwendet zu werden.

Vorbereitung

Für diese Anleitung gehen wir von Folgendem aus:

  • Sie haben ein Okta-Konto (diese Anleitung funktioniert mit der kostenlosen Testversion von Okta)
  • Sie haben bereits die neueste Version von Ubuntu installiert (20.04 zum Zeitpunkt des Schreibens)
  • Sie haben root Zugriff auf diese Installation
  • Sie haben öffentlichen Zugriff auf dieses System auf Port 80 und 443 für HTTP- und HTTPS-Zugriff und einen DNS-A-NAME, der darauf verweist (z. B. openvpnsso.server.com)
  • Sie haben bereits eine Kopie von Viscosity auf Ihrem Client-Gerät installiert und bereits für diesen Server eingerichtet

Die Dokumentation für Okta finden Sie unter https://help.okta.com/en/prod/Content/index.htm

Weitere Okta-Beispiele finden Sie auf ihrer GitHub-Seite unter https://github.com/okta

Diese Anleitung sollte nur als Beispiel für die Einrichtung von SSO auf Ihrem Server verwendet werden. Die bereitgestellte Python Flask-Website dient nur als Beispiel und ist nicht für den Produktionseinsatz vorgesehen.

Wenn Sie mit einer Neuinstallation von Ubuntu 20.04 von vorne anfangen, sollte dieser Vorgang von hier bis zur Fertigstellung nur etwa 20 Minuten dauern.

Okta-Setup

Zuerst müssen wir Okta für die neue Website konfigurieren, die die Kommunikation zwischen OpenVPN und Okta übernimmt.

  • Melden Sie sich mit Ihrem Administratorkonto bei Okta an
  • Erweitern Sie links das Menü und gehen Sie zu Anwendungen> Anwendungen
  • Klicken Sie auf App-Integration erstellen
  • Wählen Sie ODIC – OpenID Connect , dann Webanwendung und klicken Sie auf Weiter
  • Geben Sie Ihren Namen für die App-Integration ein ein Name, den Sie erkennen werden, wie „Mein OpenVPN-Server“
  • Stellen Sie den Autorisierungscode sicher ist die einzige Option, die unter „Client handelt im Auftrag eines Benutzers“ unter „Grant-Typ“ aktiviert ist
  • Ersetzen Sie im Folgenden „“ und legen Sie Ihre Anmeldungsumleitungs-URIs fest an http://<yourserver.com>/authorization-code/callback
  • Legen Sie optional Ihre Umleitungs-URIs für die Abmeldung fest, indem Sie im Folgenden wieder "" ersetzen zu http://<yourserver.com>/logout
  • Legen Sie Kontrollierten Zugriff fest Wenn es sich um ein Testkonto handelt, wählen Sie zu Testzwecken einfach Allen in Ihrer Organisation den Zugriff erlauben aus
  • Klicken Sie auf Speichern

Nach dem Speichern wird die Seite neu geladen. Lassen Sie entweder diese Seite offen oder notieren Sie sich jetzt die Kunden-ID , Clientgeheimnis und Okta-Domain , wir werden diese später brauchen.




Server-Setup

Als nächstes müssen wir den Server einrichten. Zusammenfassend brauchen wir einen einsatzbereiten OpenVPN-Server, um nginx als Proxy für die Python Flask-Anwendung zu installieren, einige kleine Firewall-Änderungen vorzunehmen, ein SSL-Zertifikat zu installieren, die Flask-Anwendung zu konfigurieren und einige kleine Änderungen an OpenVPN vorzunehmen.

Servervorbereitung

Melden Sie sich zuerst über SSH bei Ihrem Server an oder öffnen Sie ein Terminal und führen Sie Folgendes aus, um sicherzustellen, dass alles auf dem neuesten Stand ist

sudo apt-get update
sudo apt-get -y upgrade


OpenVPN-Server-Setup

Zuerst brauchen wir einen einsatzbereiten OpenVPN-Server. Wenn Sie auf diesem Server noch keinen haben, folgen Sie den Anweisungen zum Einrichten eines OpenVPN-Servers mit Ubuntu und Viscosity.

Stellen Sie nach der Einrichtung sicher, dass Sie eine Verbindung herstellen können.

Als nächstes müssen wir der OpenVPN-Serverkonfiguration ein paar Zeilen hinzufügen:

  • Bearbeiten Sie die Konfiguration sudo nano /etc/openvpn/server.conf
  • Fügen Sie am Ende der Datei Folgendes hinzu:
management 127.0.0.1 50123
auth-user-pass-optional
management-client-auth
  • Drücken Sie Strg+X zum Beenden, Y zum Speichern und dann die Eingabetaste, um den Pfad zu bestätigen
  • Starten Sie den Server mit sudo systemctl restart [email protected] neu

Wenn Sie jetzt versuchen, eine Verbindung herzustellen, sollte die Verbindung schließlich mit einer Meldung zum Fehlschlagen der Authentifizierung fehlschlagen.

Hinweise:

Wenn Sie einen vorhandenen Server mit Authentifizierungsskripten oder Plugins haben, müssen diese entfernt werden, da SSO sie ersetzen wird. Okta kann mit 2FA-Optionen konfiguriert werden, obwohl wir sie in diesem Handbuch nicht behandeln, konsultieren Sie die Okta-Dokumentation.

Webserver-Setup

Firewall

Wenn Sie dem Leitfaden Einrichten eines OpenVPN-Servers mit Ubuntu und Viscosity gefolgt sind, müssen wir zuerst die Firewall öffnen, um HTTP- und HTTPS-Verkehr zuzulassen, führen Sie Folgendes aus:

  • sudo ufw allow http
  • sudo ufw allow https
  • sudo ufw reload

Installieren Sie ningx

Als nächstes müssen wir nginx installieren. nginx ist ein HTTP- und Reverse-Proxy-Server, der Komponenten unserer Webanwendung ausliefert und die Nutzung von Funktionen wie TLS/SSL ermöglicht. Gehen Sie auf Ihrem Ubuntu-Server wie folgt vor:

  • Führen Sie sudo apt-get -y install nginx aus
  • Bearbeiten Sie sudo nano /etc/nginx/sites-enabled/default
  • Scrollen Sie nach unten bis zur Zeile server_name _; , und ersetzen Sie den Unterstrich (_) durch den DNS-Namen Ihres Servers, z. B. myserver.com, sodass er folgendermaßen aussieht:server_name myserver.com;
  • Drücken Sie Strg+X zum Beenden, Y zum Speichern und dann die Eingabetaste, um den Pfad zu bestätigen
  • Laden Sie nginx mit sudo nginx -s reload neu


Let's Encrypt einrichten

Wenn Sie bereits ein SSL-Zertifikat für diesen Abschnitt haben, können Sie mit dem nächsten Abschnitt fortfahren. Ansonsten machen Let's Encrypt und Certbot es einfach, ein SSL-Zertifikat zu erhalten.

  • Führen Sie sudo apt-get install -y certbot python3-certbot-nginx aus
  • Führen Sie Folgendes aus, ersetzen Sie myserver.com durch Ihren FQDN und folgen Sie den Eingabeaufforderungen sudo certbot --nginx -d myserver.com . Sie können zusätzliche Domänen angeben, wenn Sie diese benötigen, zum Beispiel sudo certbot --nginx -d myserver.com -d www.myserver.com -d sso.myserver.com .
  • Es kann einige Minuten dauern, bis certbot antwortet, nachdem die Eingabeaufforderungen beantwortet wurden
  • Sobald Sie fertig sind, kann certbot Ihr Zertifikat automatisch erneuern, fügen Sie einfach einen Cronjob hinzu, um /usr/bin/certbot renew --quiet auszuführen einmal am Tag.

nginx einrichten

Jetzt haben Sie ein SSL-Zertifikat, wir können die nginx-Einrichtung abschließen.

  • Bearbeiten Sie sudo nano /etc/nginx/sites-enabled/default
  • Entfernen Sie den folgenden Abschnitt:
location / {
  # First attempt to serve request as file, then
  # as directory, then fall back to displaying a 404.
  try_files $uri $uri/ =404;
}
  • Scrollen Sie nach unten bis nach den Zeilen # managed by Certbot , aber vor dem } , und fügen Sie Folgendes ein:
  real_ip_header X-Real-IP;
  real_ip_recursive on;
  proxy_connect_timeout       600;
  proxy_send_timeout          600;
  proxy_read_timeout          600;
  send_timeout                600;

  location / {
    try_files $uri @proxy;
  }

  location @proxy {
    proxy_pass http://127.0.0.1:8080;
    proxy_pass_header Server;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_pass_header Server;
    proxy_connect_timeout 3s;
    proxy_read_timeout 10s;
  }
  • Drücken Sie Strg+X zum Beenden, Y zum Speichern und dann die Eingabetaste, um den Pfad zu bestätigen
  • Laden Sie nginx mit sudo nginx -s reload neu


Web-App-Installation

Jetzt können wir die Webapp installieren und starten. Wir erstellen einen Benutzer zum Ausführen der Webanwendung, da dies etwas mehr Sicherheit schafft. Führen Sie Folgendes aus:

  • sudo apt-get install -y python3-pip Installieren Sie Python Pip, damit wir Flask-Abhängigkeiten installieren können
  • sudo adduser --system --no-create-home --group ssoappuser Erstellen Sie einen Benutzer zum Ausführen der Webapp als
  • cd /home
  • sudo mkdir ssoapp
  • sudo chown ssoappuser:ssoappuser ssoapp
  • cd ssoapp
  • sudo git clone https://github.com/thesparklabs/openvpn-okta-sso-example.git Laden Sie die Webanwendung von GitHub herunter
  • cd openvpn-okta-sso-example
  • sudo python3 -m pip install -r requirements.txt Abhängigkeiten für die Webanwendung installieren
  • sudo cp ssoapp.service /lib/systemd/system/ssoapp.service Installieren Sie die Servicedatei
  • sudo chown root:root /lib/systemd/system/ssoapp.service
  • sudo systemctl daemon-reload

Web-App-Setup

Schließlich brauchen wir nur noch ein paar schnelle Einrichtungsarbeiten, damit die Webanwendung funktioniert und mit Okta kommuniziert. Hier benötigen Sie die Client-ID , Clientgeheimnis und Okta-Domain wir haben uns vorhin über die Einrichtung von Okta informiert.

  • Erstellen Sie eine Kopie der Secrets-Vorlage mit sudo cp client_secrets.json.dist client_secrets.json
  • Erstellen Sie ein zufälliges Geheimnis mit dem Folgenden und kopieren Sie es openssl rand -hex 20
  • Bearbeiten Sie die Konfiguration mit sudo nano client_secrets.json
  • Ersetzen Sie {{THIS_IS_A_SECRET}} mit der Zufallszeichenfolge, die wir vor zwei Schritten generiert haben
  • Ersetzen Sie {{OKTA_DOMAIN}} in auth_uri, issuer, token_uri und userinfo_uri mit Ihrer Okta-Domain
  • Ersetzen Sie {{CLIENT_ID}} mit Ihrer Kunden-ID
  • Ersetzen Sie {{CLIENT_SECRET]] mit Ihrem Client-Secret
  • Ersetzen Sie {{YOUR_DOMAIN}} mit Ihrer Serveradresse, z.B. meinserver.com
  • Drücken Sie Strg+X zum Beenden, Y zum Speichern und dann die Eingabetaste, um den Pfad zu bestätigen
  • Laden Sie nginx mit sudo nginx -s reload neu

Wir können jetzt den Anwendungsdienst mit

aktivieren und starten
  • Aktivieren Sie den Dienst so, dass er gestartet wird, wenn das System sudo systemctl enable ssoapp ausführt
  • Starten Sie den Dienst sudo systemctl start ssoapp

Client-Setup

Wenn Sie diese Anleitung bis einschließlich der Verwendung unserer Anleitung zum Einrichten eines OpenVPN-Servers mit Ubuntu und Viscosity befolgt haben, brauchen Sie nichts weiter zu tun, sondern sich einfach mit Viscosity zu verbinden.

Wenn Sie einen vorhandenen Server geändert haben, müssen Sie lediglich die Benutzer-/Kennwortauthentifizierung deaktivieren, falls sie aktiviert ist. Bearbeiten Sie dazu die Verbindung, gehen Sie zu Authentifizierung und deaktivieren Sie "Benutzer Benutzername/Passwort-Authentifizierung", speichern Sie die Verbindung und stellen Sie eine Verbindung her.

Authentifizierungstoken

OpenVPN-auth-gen-token

Die Beispielanwendung umfasst Unterstützung für auth-gen-token. Da wir Benutzername/Passwort nicht über OpenVPN verwenden, muss dies über die Verwaltungsschnittstelle gehandhabt werden. Um es zu aktivieren, fügen Sie einfach auth-gen-token 0 external-auth hinzu zu Ihrer Serverkonfiguration.

Okta-Token-Aktualisierung

Das obige Beispiel kann erweitert werden, um Okta-Token anstelle der Auth-Token von OpenVPN für die erneute Authentifizierung zu verwenden. Wir werden kein Beispiel dafür geben, da die integrierte Unterstützung von OpenVPN die überwiegende Mehrheit der Setups abdeckt.

Wenn Sie stattdessen Okta verwenden möchten, sollten Sie jedoch Folgendes beachten:

  • Sie müssen die clientAllow-Funktionsantwort ändern, um Ihr Authentifizierungstoken zu übertragen.
  • Sie müssen die clientReauth-Funktion ändern, um das Passwort aus der Client-Umgebung zu übernehmen, das über die Verwaltungsschnittstelle übergeben wird, die Oktas-Dokumentation befolgen, um dieses Token zu aktualisieren, und dann eine client-auth-Antwort ähnlich wie clientAllow senden, einschließlich des aktualisierten Tokens.
  • Sie müssen die Server- und Client-Konfiguration ändern, um sicherzustellen, dass die Reneg-Sek kleiner ist als das Ablaufdatum der Okta-Token

OpenVPN
  1. So richten Sie einen OpenVPN-Server unter Ubuntu 22.04 ein und konfigurieren ihn

  2. So installieren und hosten Sie einen OpenVPN-Server mit Docker

  3. Einrichten eines Verschleierungsservers mit Obfsproxy und Viscosity

  4. Einrichten eines OpenVPN-Servers mit CentOS und Viscosity

  5. Installieren und konfigurieren Sie den OpenVPN-Server FreeBSD 12

Einrichten eines OpenVPN-Servers mit Synology und Viscosity

Einrichten eines OpenVPN-Servers mit Tomato-Router und Viscosity

Einrichten eines OpenVPN-Servers mit Ubiquiti EdgeRouter (EdgeOS) und Viscosity

Einrichten eines OpenVPN-Servers mit Ubuntu und Viscosity

Einrichten eines OpenVPN-Servers mit VyOS und Viscosity

So installieren Sie den OpenLiteSpeed-Webserver mit MariaDB und PHP