GNU/Linux >> Linux Esercitazione >  >> Panels >> OpenVPN

Configurazione di un server OpenVPN con autenticazione Web e viscosità Okta Single Sign-on

Dopo aver configurato il tuo server OpenVPN, potresti voler migliorarne la sicurezza. Un modo per farlo e semplificare il processo di autenticazione è utilizzare Single Sign-in o Single Sign-On (SSO), a volte indicato anche come SAML (questo è un protocollo SSO). Ciò aggiunge un'altra misura di sicurezza per impedire che utenti indesiderati si connettano al tuo server e allo stesso tempo si integrano con il tuo sistema di gestione utente, identità o client o processo di autenticazione esistente.

Questa guida fornisce un esempio di come potrebbe funzionare con Okta, una popolare piattaforma di identità basata su cloud. Le nozioni di base di questo esempio si traducono nella maggior parte dei sistemi di gestione delle identità (IDMS) con solo modifiche al modo in cui comunichi con il tuo IDMS preferito.

Tieni presente che questo esempio è progettato per mostrare le basi di come un sistema IDM o SSO può integrarsi con OpenVPN lato server, non è progettato per essere utilizzato da solo così com'è.

Preparazione

Per questa guida, assumiamo:

  • Hai un account Okta (questa guida funzionerà con la prova gratuita di Okta)
  • Hai già installato l'ultima versione di Ubuntu (20.04 al momento della scrittura)
  • Hai root accedere a questa installazione
  • Hai accesso pubblico a questo sistema sulle porte 80 e 443 per l'accesso HTTP e HTTPS e un NOME A DNS che punta ad esso (ad esempio, openvpnsso.server.com)
  • Hai già una copia di Viscosity installata sul tuo dispositivo client e già configurata per questo server

La documentazione per Okta può essere trovata su https://help.okta.com/en/prod/Content/index.htm

Ulteriori esempi di Okta possono essere trovati sulla loro pagina GitHub su https://github.com/okta

Questa guida dovrebbe essere utilizzata solo come esempio per configurare SSO sul tuo server. Il sito Web Python Flask fornito è progettato solo come esempio e non è destinato all'uso in produzione.

Se stai iniziando da zero con una nuova installazione di Ubuntu 20.04, questo processo da qui alla fine dovrebbe richiedere solo circa 20 minuti.

Impostazione Okta

Innanzitutto, dobbiamo configurare Okta per il nuovo sito Web che gestirà la comunicazione tra OpenVPN e Okta.

  • Accedi a Okta dal tuo account amministratore
  • A sinistra espandi il menu e vai su Applicazioni> Applicazioni
  • Fai clic su Crea integrazione app
  • Seleziona ODIC - OpenID Connect , quindi Applicazione Web e fai clic su Avanti
  • Assegna il tuo nome integrazione app un nome che riconoscerai come 'Il mio server OpenVPN'
  • Garantire il Codice di autorizzazione è l'unica opzione selezionata in "Cliente che agisce per conto di un utente" in "Tipo di concessione"
  • Sostituendo '' in seguito, imposta i tuoi URI di reindirizzamento dell'accesso a http://<yourserver.com>/authorization-code/callback
  • Facoltativamente, sostituendo di nuovo "" di seguito, imposta i tuoi URI di reindirizzamento della disconnessione a http://<yourserver.com>/logout
  • Imposta Accesso controllato a tua scelta, a scopo di test se si tratta di un account di prova, seleziona Consenti a tutti nella tua organizzazione di accedere
  • Fai clic su Salva

Dopo il salvataggio, la pagina verrà ricaricata. Tieni aperta questa pagina o prendi nota ora dell'ID cliente , Segreto cliente e dominio Okta , avremo bisogno di questi in seguito.




Configurazione del server

Successivamente, dobbiamo configurare il server. In sintesi, abbiamo bisogno di un server OpenVPN pronto per l'uso, per installare nginx come proxy per l'applicazione Python Flask, apportare alcune piccole modifiche al firewall, installare un certificato SSL, configurare l'applicazione flask e apportare alcune piccole modifiche a OpenVPN.

Preparazione del server

Innanzitutto, accedi al tuo server tramite SSH o apri un Terminale ed esegui quanto segue per assicurarti che tutto sia aggiornato

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


Configurazione del server OpenVPN

Per prima cosa avremo bisogno di un server OpenVPN pronto per l'uso. Se non ne hai già uno su questo server, segui la sezione Configurazione di un server OpenVPN con Ubuntu e Viscosity.

Una volta completata la configurazione, assicurati di poterti connettere.

Successivamente, dobbiamo aggiungere alcune righe alla configurazione del server OpenVPN:

  • Modifica la configurazione sudo nano /etc/openvpn/server.conf
  • Alla fine del file, aggiungi quanto segue:
management 127.0.0.1 50123
auth-user-pass-optional
management-client-auth
  • Premi Ctrl+X, per uscire, Y per salvare, quindi Invio per confermare il percorso
  • Riavvia il server con sudo systemctl restart [email protected]

Se provi a connetterti ora, la connessione alla fine dovrebbe fallire con un messaggio di autenticazione fallita.

Note:

Se disponi di un server esistente che dispone di script o plug-in di autenticazione, questi dovranno essere rimossi poiché SSO li sostituirà. Okta può essere configurato con le opzioni 2FA anche se non le tratteremo in questa guida, consulta la documentazione di Okta.

Configurazione del server Web

Firewall

Se hai seguito la guida Configurazione di un server OpenVPN con Ubuntu e Viscosity, prima dobbiamo aprire il firewall per consentire il traffico HTTP e HTTPS, eseguire quanto segue:

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

Installa ningx

Quindi dobbiamo installare nginx. nginx è un server HTTP e proxy inverso che servirà i componenti della nostra applicazione Web e consentirà l'uso di funzionalità come TLS/SSL. Esegui le seguenti operazioni sul tuo server Ubuntu:

  • Esegui sudo apt-get -y install nginx
  • Modifica sudo nano /etc/nginx/sites-enabled/default
  • Scorri verso il basso fino alla riga server_name _; e sostituisci il trattino basso (_) con il nome DNS del tuo server, ad esempio mioserver.com, in modo che assomigli a questo - server_name myserver.com;
  • Premi Ctrl+X, per uscire, Y per salvare, quindi Invio per confermare il percorso
  • Ricarica nginx con sudo nginx -s reload


Installazione Let's Encrypt

Se hai già un certificato SSL per questa sezione, puoi passare alla sezione successiva. Altrimenti, Let's Encrypt e Certbot rendono semplice ottenere un certificato SSL.

  • Esegui sudo apt-get install -y certbot python3-certbot-nginx
  • Esegui quanto segue, sostituendo myserver.com con il tuo FQDN e segui le istruzioni sudo certbot --nginx -d myserver.com . Puoi specificare domini extra se ne hai bisogno, ad esempio sudo certbot --nginx -d myserver.com -d www.myserver.com -d sso.myserver.com .
  • Potrebbero essere necessari alcuni minuti prima che certbot risponda dopo aver risposto alle richieste
  • Una volta terminato, certbot può rinnovare automaticamente il tuo certificato, basta aggiungere un cronjob per eseguire /usr/bin/certbot renew --quiet una volta al giorno.

Imposta nginx

Ora che hai un certificato SSL, possiamo completare la configurazione di nginx.

  • Modifica sudo nano /etc/nginx/sites-enabled/default
  • Rimuovere la seguente sezione:
location / {
  # First attempt to serve request as file, then
  # as directory, then fall back to displaying a 404.
  try_files $uri $uri/ =404;
}
  • Scorri fino a dopo le righe # managed by Certbot , ma prima del } e incolla quanto segue:
  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;
  }
  • Premi Ctrl+X, per uscire, Y per salvare, quindi Invio per confermare il percorso
  • Ricarica nginx con sudo nginx -s reload


Installazione dell'app Web

Ora possiamo installare la webapp e avviarla. Creeremo un utente per eseguire l'applicazione Web poiché crea un po' più di sicurezza. Eseguire quanto segue:

  • sudo apt-get install -y python3-pip Installa python pip in modo da poter installare le dipendenze di Flask
  • sudo adduser --system --no-create-home --group ssoappuser Crea un utente per eseguire la webapp come
  • cd /home
  • sudo mkdir ssoapp
  • sudo chown ssoappuser:ssoappuser ssoapp
  • cd ssoapp
  • sudo git clone https://github.com/thesparklabs/openvpn-okta-sso-example.git Scarica l'applicazione web da GitHub
  • cd openvpn-okta-sso-example
  • sudo python3 -m pip install -r requirements.txt Installa le dipendenze per l'applicazione web
  • sudo cp ssoapp.service /lib/systemd/system/ssoapp.service Installa il file di servizio
  • sudo chown root:root /lib/systemd/system/ssoapp.service
  • sudo systemctl daemon-reload

Impostazione dell'app Web

Infine, abbiamo solo bisogno di un rapido lavoro di configurazione affinché l'applicazione Web funzioni e parli con Okta. Qui è dove avrai bisogno di un ID cliente , Segreto cliente e dominio Okta abbiamo raccolto prima la configurazione di Okta.

  • Crea una copia del modello dei segreti con sudo cp client_secrets.json.dist client_secrets.json
  • Crea un segreto casuale con quanto segue e copialo openssl rand -hex 20
  • Modifica la configurazione con sudo nano client_secrets.json
  • Sostituisci {{THIS_IS_A_SECRET}} con la stringa casuale che abbiamo generato due passaggi fa
  • Sostituisci {{OKTA_DOMAIN}} in auth_uri, Issuer, token_uri e userinfo_uri con il tuo dominio Okta
  • Sostituisci {{CLIENT_ID}} con il tuo ID cliente
  • Sostituisci {{CLIENT_SECRET]] con il tuo Segreto cliente
  • Sostituisci {{YOUR_DOMAIN}} con l'indirizzo del tuo server, ad es. mioserver.com
  • Premi Ctrl+X, per uscire, Y per salvare, quindi Invio per confermare il percorso
  • Ricarica nginx con sudo nginx -s reload

Ora possiamo abilitare e avviare il servizio dell'applicazione con

  • Abilita l'avvio del servizio quando il sistema esegue sudo systemctl enable ssoapp
  • Avvia il servizio sudo systemctl start ssoapp

Impostazione client

Se hai seguito questa guida includendo l'utilizzo della nostra guida alla configurazione di un server OpenVPN con Ubuntu e alla viscosità, non devi fare nulla, connettiti semplicemente a Viscosity.

Se hai modificato un server esistente, l'unica modifica che dovrai apportare è disattivare l'autenticazione utente/password se è attiva. Per fare ciò, modifica la connessione, vai su Autenticazione e deseleziona "Autenticazione nome utente/password utente", Salva la connessione e connetti.

Token di autenticazione

OpenVPN auth-gen-token

L'applicazione di esempio include il supporto per auth-gen-token. Poiché non utilizziamo nome utente/password tramite OpenVPN, questo deve essere gestito tramite l'interfaccia di gestione. Per abilitarlo, aggiungi semplicemente auth-gen-token 0 external-auth alla configurazione del tuo server.

Aggiorna token Okta

L'esempio sopra può essere esteso per utilizzare i token Okta invece dei token di autenticazione di OpenVPN per la riautenticazione. Non forniremo un esempio in quanto il supporto integrato di OpenVPN coprirà la stragrande maggioranza delle configurazioni.

Tuttavia, se invece desideri utilizzare Okta, ecco le cose principali da tenere a mente:

  • Dovrai modificare la risposta della funzione clientAllow per inviare il tuo token di autenticazione.
  • Sarà necessario modificare la funzione clientReauth per prendere la password dall'ambiente client che viene passata tramite l'interfaccia di gestione, seguire la documentazione di Oktas per aggiornare questo token, quindi inviare una risposta di autenticazione client simile a clientAllow includendo il token aggiornato.
  • Dovrai modificare la configurazione del server e del client per assicurarti che il reeg-sec sia inferiore alla scadenza dei token Okta

OpenVPN
  1. Come configurare e configurare un server OpenVPN su Ubuntu 22.04

  2. Come installare e ospitare il server OpenVPN con Docker

  3. Configurazione di un server di offuscamento con Obfsproxy e Viscosity

  4. Configurazione di un server OpenVPN con CentOS e Viscosity

  5. Installa e configura il server OpenVPN FreeBSD 12

Configurazione di un server OpenVPN con Synology e Viscosity

Configurazione di un server OpenVPN con router Tomato e Viscosity

Configurazione di un server OpenVPN con Ubiquiti EdgeRouter (EdgeOS) e Viscosity

Configurazione di un server OpenVPN con Ubuntu e Viscosity

Configurazione di un server OpenVPN con VyOS e Viscosity

Come installare il server Web OpenLiteSpeed ​​con MariaDB e PHP