GNU/Linux >> Znalost Linux >  >> Panels >> OpenVPN

Nastavení serveru OpenVPN s webovou autentizací Okta Single Sign-on a viskozitou

Po nastavení vlastního serveru OpenVPN možná budete chtít zvýšit jeho zabezpečení. Jedním ze způsobů, jak to udělat a zefektivnit proces ověřování, je použití jednotného přihlášení nebo jednotného přihlášení (SSO), někdy také označovaných jako SAML (toto je protokol SSO). To přidává další bezpečnostní opatření, které zabrání nechtěným uživatelům připojovat se k vašemu serveru a zároveň se integruje s vaším stávajícím systémem správy uživatelů, identit nebo klientů nebo procesem ověřování.

Tato příručka poskytuje příklad toho, jak by to mohlo fungovat s Okta, populární cloudovou platformou identity. Základy tohoto příkladu lze převést do většiny systémů správy identit (IDMS) s pouhými změnami způsobu komunikace s vaším vybraným IDMS.

Vezměte prosím na vědomí, že tento příklad je navržen tak, aby ukázal základy toho, jak se systém IDM nebo SSO může integrovat s OpenVPN na straně serveru, není navržen tak, aby byl používán samostatně tak, jak je.

Příprava

Pro tuto příručku předpokládáme:

  • Máte účet Okta (tato příručka bude fungovat s bezplatnou zkušební verzí Okta)
  • Již jste nainstalovali nejnovější verzi Ubuntu (20.04 v době psaní tohoto článku)
  • Máte root přístup k této instalaci
  • Máte veřejný přístup k tomuto systému na portu 80 a 443 pro přístup HTTP a HTTPS a DNS A-NAME, které na něj odkazuje (například openvpnsso.server.com)
  • Na klientském zařízení již máte nainstalovanou kopii aplikace Viscosity a je již nastavena pro tento server

Dokumentaci pro Okta lze nalézt na https://help.okta.com/en/prod/Content/index.htm

Další příklad Okta lze nalézt na jejich stránce GitHub na adrese https://github.com/okta

Tato příručka by měla sloužit pouze jako příklad pro nastavení jednotného přihlášení na vašem serveru. Poskytnutá webová stránka Python Flask je navržena pouze jako příklad a není určena pro produkční použití.

Pokud začínáte od nuly s novou instalací Ubuntu 20.04, tento proces odsud až po dokončení by měl trvat jen asi 20 minut.

Nastavení Okta

Nejprve musíme nakonfigurovat Okta pro nový web, který bude zpracovávat komunikaci mezi OpenVPN a Okta.

  • Přihlaste se do Okta na svém účtu správce
  • Vlevo rozbalte nabídku a přejděte na Aplikace> Aplikace
  • Klikněte na možnost Vytvořit integraci aplikace
  • Vyberte ODIC – OpenID Connect a poté Webová aplikace a klikněte na Další
  • Zadejte název pro integraci aplikace název, který poznáte jako „Můj server OpenVPN“
  • Zajistěte Autorizační kód je jedinou možností zaškrtnutou pod 'Klient jednající jménem uživatele' pod 'Typ grantu'
  • Nahrazením „“ v následujícím textu nastavte URI přesměrování přihlášení na http://<yourserver.com>/authorization-code/callback
  • Volitelně, opětovným nahrazením „“ v následujícím textu, nastavte URI přesměrování při odhlášení na http://<yourserver.com>/logout
  • Nastavte Řízený přístup podle vašeho výběru, pro účely testování, pokud se jedná o zkušební účet, stačí vybrat Povolit přístup všem ve vaší organizaci
  • Klikněte na Uložit

Po uložení se stránka znovu načte. Buď ponechte tuto stránku otevřenou, nebo si poznamenejte ID klienta , Tajný klíč klienta a doména Okta , budeme je potřebovat později.




Nastavení serveru

Dále musíme nastavit server. Stručně řečeno, potřebujeme server OpenVPN připravený k použití, abychom mohli nainstalovat nginx jako proxy pro aplikaci Python Flask, provést nějaké malé změny firewallu, nainstalovat certifikát SSL, nakonfigurovat aplikaci flask a provést nějaké malé změny v OpenVPN.

Příprava serveru

Nejprve se přihlaste ke svému serveru přes SSH nebo otevřete terminál a spusťte následující, abyste se ujistili, že je vše aktuální

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


Nastavení serveru OpenVPN

Nejprve budeme potřebovat OpenVPN Server připravený k použití. Pokud na tomto serveru ještě žádný nemáte, postupujte podle pokynů v části Nastavení serveru OpenVPN s Ubuntu a viskozitou.

Po nastavení se ujistěte, že se můžete připojit.

Dále musíme přidat několik řádků do konfigurace serveru OpenVPN:

  • Upravte konfiguraci sudo nano /etc/openvpn/server.conf
  • Na konec souboru přidejte následující:
management 127.0.0.1 50123
auth-user-pass-optional
management-client-auth
  • Stiskněte Ctrl+X pro ukončení, Y pro uložení a poté Enter pro potvrzení cesty
  • Restartujte server pomocí sudo systemctl restart [email protected]

Pokud se nyní pokusíte připojit, připojení by nakonec mělo selhat se zprávou o selhání ověření.

Poznámky:

Pokud máte existující server, který má nějaké ověřovací skripty nebo pluginy, bude nutné je odstranit, protože je nahradí jednotné přihlašování. Okta lze nakonfigurovat s možnostmi 2FA, i když se jimi v této příručce nebudeme zabývat, podívejte se do dokumentace Okta.

Nastavení webového serveru

Firewall

Pokud jste postupovali podle Průvodce nastavením serveru OpenVPN s Ubuntu a viskozitou, nejprve musíme otevřít bránu firewall, aby byl povolen provoz HTTP a HTTPS, spusťte následující:

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

Instalovat ningx

Dále musíme nainstalovat nginx. nginx je HTTP a reverzní proxy server, který bude obsluhovat komponenty naší webové aplikace a umožní použití funkcí jako TLS/SSL. Na svém serveru Ubuntu proveďte následující:

  • Spusťte sudo apt-get -y install nginx
  • Upravit sudo nano /etc/nginx/sites-enabled/default
  • Přejděte dolů na řádek server_name _; a podtržítko (_) nahraďte názvem DNS vašeho serveru, například můjserver.com, takže to vypadá takto - server_name myserver.com;
  • Stiskněte Ctrl+X pro ukončení, Y pro uložení a poté Enter pro potvrzení cesty
  • Znovu načtěte nginx pomocí sudo nginx -s reload


Nastavení Let's Encrypt

Pokud již máte certifikát SSL pro tuto sekci, můžete přeskočit na další sekci. Jinak Let's Encrypt a Certbot usnadňují získání certifikátu SSL.

  • Spusťte sudo apt-get install -y certbot python3-certbot-nginx
  • Spusťte následující, nahraďte myserver.com vaším FQDN a postupujte podle pokynů sudo certbot --nginx -d myserver.com . Můžete zadat další domény, pokud je požadujete, například sudo certbot --nginx -d myserver.com -d www.myserver.com -d sso.myserver.com .
  • Může trvat několik minut, než certbot po zodpovězení výzev odpoví
  • Po dokončení může certbot automaticky obnovit váš certifikát, stačí přidat cronjob ke spuštění /usr/bin/certbot renew --quiet jednou denně.

Nastavení nginx

Nyní máte certifikát SSL, můžeme dokončit nastavení nginx.

  • Upravit sudo nano /etc/nginx/sites-enabled/default
  • Odeberte následující sekci:
location / {
  # First attempt to serve request as file, then
  # as directory, then fall back to displaying a 404.
  try_files $uri $uri/ =404;
}
  • Přejděte dolů za řádky # managed by Certbot , ale před } a vložte následující:
  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;
  }
  • Stiskněte Ctrl+X pro ukončení, Y pro uložení a poté Enter pro potvrzení cesty
  • Znovu načtěte nginx pomocí sudo nginx -s reload


Instalace webové aplikace

Nyní můžeme nainstalovat webovou aplikaci a spustit ji. Vytvoříme uživatele, který bude webovou aplikaci spouštět, protože vytváří trochu větší zabezpečení. Spusťte následující:

  • sudo apt-get install -y python3-pip Nainstalujte python pip, abychom mohli nainstalovat závislosti Flask
  • sudo adduser --system --no-create-home --group ssoappuser Vytvořte uživatele, který bude webovou aplikaci spouštět jako
  • cd /home
  • sudo mkdir ssoapp
  • sudo chown ssoappuser:ssoappuser ssoapp
  • cd ssoapp
  • sudo git clone https://github.com/thesparklabs/openvpn-okta-sso-example.git Stáhněte si webovou aplikaci z GitHubu
  • cd openvpn-okta-sso-example
  • sudo python3 -m pip install -r requirements.txt Nainstalujte závislosti pro webovou aplikaci
  • sudo cp ssoapp.service /lib/systemd/system/ssoapp.service Nainstalujte soubor služby
  • sudo chown root:root /lib/systemd/system/ssoapp.service
  • sudo systemctl daemon-reload

Nastavení webové aplikace

Nakonec potřebujeme jen rychlé nastavení, aby webová aplikace fungovala a mluvila s Oktou. Zde budete potřebovat ID klienta , Tajný klíč klienta a doména Okta dříve jsme se shromáždili při nastavování Okta.

  • Vytvořte kopii šablony tajných klíčů pomocí sudo cp client_secrets.json.dist client_secrets.json
  • Vytvořte náhodný tajný klíč pomocí následujícího a zkopírujte jej openssl rand -hex 20
  • Upravte konfiguraci pomocí sudo nano client_secrets.json
  • Nahradit {{THIS_IS_A_SECRET}} s náhodným řetězcem, který jsme vygenerovali před dvěma kroky
  • Nahraďte {{OKTA_DOMAIN}} v auth_uri, issuer, token_uri a userinfo_uri s vaší doménou Okta
  • Nahraďte {{CLIENT_ID}} s vaším ID klienta
  • Nahradit {{CLIENT_SECRET]] s vaším tajemstvím klienta
  • Nahraďte {{YOUR_DOMAIN}} s adresou vašeho serveru, např. myserver.com
  • Stiskněte Ctrl+X pro ukončení, Y pro uložení a poté Enter pro potvrzení cesty
  • Znovu načtěte nginx pomocí sudo nginx -s reload

Nyní můžeme povolit a spustit aplikační službu pomocí

  • Povolte spuštění služby, když systém sudo systemctl enable ssoapp
  • Spusťte službu sudo systemctl start ssoapp

Nastavení klienta

Pokud jste postupovali podle tohoto průvodce a zahrnuli jste i použití našeho Průvodce nastavením serveru OpenVPN s Ubuntu a viskozitou, nemusíte nic dělat, jednoduše se připojte k aplikaci Viscosity.

Pokud jste upravili existující server, jedinou změnou, kterou budete muset provést, je vypnout ověřování uživatele/hesla, pokud je zapnuto. Chcete-li to provést, upravte připojení, přejděte do Authentication a zrušte zaškrtnutí "User User Name/Password authentication", Uložte připojení a připojte se.

Ověřovací tokeny

OpenVPN auth-gen-token

Vzorová aplikace zahrnuje podporu pro auth-gen-token. Protože nepoužíváme uživatelské jméno/heslo přes OpenVPN, je třeba to řešit přes rozhraní pro správu. Chcete-li to povolit, jednoduše přidejte auth-gen-token 0 external-auth na konfiguraci vašeho serveru.

Obnovení tokenu Okta

Výše uvedený příklad lze rozšířit o použití tokenů Okta místo ověřovacích tokenů OpenVPN pro opětovné ověření. Nebudeme poskytovat příklad tohoto, protože vestavěná podpora OpenVPN pokryje velkou většinu nastavení.

Pokud však místo toho chcete používat Okta, zde jsou hlavní věci, které je třeba mít na paměti:

  • Budete muset upravit odpověď funkce clientAllow, aby se vložil váš auth-token.
  • Budete muset upravit funkci clientReauth tak, aby převzala heslo z klientského prostředí, které se předává přes rozhraní pro správu, podle dokumentace Oktas obnovte tento token a poté odešlete odpověď pro ověření klienta podobnou jako clientAllow včetně obnoveného tokenu.
  • Budete muset upravit konfiguraci serveru a klienta, abyste zajistili, že reneg-sec bude kratší než vypršení platnosti tokenů Okta

OpenVPN
  1. Jak nastavit a nakonfigurovat server OpenVPN na Ubuntu 22.04

  2. Jak nainstalovat a hostovat server OpenVPN pomocí Dockeru

  3. Nainstalujte a nakonfigurujte OpenVPN Server FreeBSD 12

  1. Nastavení serveru Obfuscation s Obfsproxy a Viscosity

  2. Nastavení serveru OpenVPN s CentOS a viskozitou

  3. Nastavení serveru OpenVPN s DD-WRT a viskozitou

  1. Nastavení serveru OpenVPN s Netgear a viskozitou

  2. Nastavení serveru OpenVPN s OPNsense a viskozitou

  3. Nastavení OpenVPN serveru s pfSense a Viscosity