Come abilitare l'autenticazione a 2 fattori utilizzando Google Authenticator per l'accesso openVPN basato su file .ovpn?


11

Ho una configurazione openVPN in cui gli utenti non hanno account di shell sulla VM Debian che esegue openVPN. Gli articoli che ho trovato su Google hanno tutti le istruzioni per configurare Google Authenticator per un utente * nix classico (ad esempio, è necessario eseguire il binario Authenticator nella home directory dell'utente).

Esiste un documento che spiega come integrare Google Authenticator per i server openvpn che eseguono l'autenticazione in base esclusivamente ai .ovpnfile utilizzati sul lato client?

Ho guardato https://github.com/evgeny-gridasov/openvpn-otp , ma richiede ancora la configurazione di Google Authenticator.


Il problema è la registrazione dell'autenticatore di Google o la necessità di inserire una password?
cornelinux il

Risposte:


4

No. Certo che non puoi farlo. Ciò vanificherebbe lo scopo stesso di 2FA. Il tuo server deve avere un modo per verificare le credenziali dell'utente e queste informazioni non devono essere inviate sulla rete (cioè non puoi usare solo il file client.ovpn).

Anche se non devi necessariamente creare utenti unix, ma devi consentire ai tuoi utenti di installare i loro codici di verifica sul server. Puoi usare sftp con utenti virtuali usando il loro certificato già emesso, https con autorizzazione (reciproca) lato client, CIFS (samba) o un buon vecchio ftp con estensione TLS o qualsiasi altro modo che faccia conoscere al server i codici di verifica creati dagli utenti . Il canale di comunicazione dovrebbe essere sicuro (crittografato || locale).

Naturalmente se gli utenti caricano i propri file, non è possibile utilizzare le credenziali basate su file aggregate utilizzate da openvpn-otp. Fortunatamente abbiamo un'altra (e molto migliore) opzione usando il modulo di sicurezza eccellente linux pam.

Prima di tutto, devi raccogliere i file utente creati da Google Authenticator in una directory con uno dei metodi sopra menzionati. Nel nostro caso sarà / etc / google-auth.

È necessario applicare un singolo ID utente per tutti i file qui, perché non si hanno utenti reali. Lascia che sia openvpn . Le autorizzazioni devono essere 0400 (-r --------). A Pam non piacciono le credenziali leggibili dal mondo / dal gruppo (certamente). Puoi facilmente applicarlo con samba, apache, ftp o nel peggiore dei casi usando una scheda cron (non consigliata).

A scopo di test, basta fare questo:

mkdir /etc/google-auth
apt-get install libpam-google-authenticator
google-authenticator
# set up as you wish, save image and/or codes
mv ~/.google_authenticator /etc/google-auth/some_username
chown -R openvpn /etc/google-auth

Dopodiché chiedi a openvpn di autenticarti contro libpam, che ha il suo modulo di autenticazione di Google. Aggiungi questo al tuo file server openvpn:

plugin /usr/lib/openvpn/openvpn-plugin-auth-pam.so openvpn

Questo dice che useremo il metodo di autenticazione pam con l'id pam auth openvpn .

Ora crea la configurazione di pam per openvpn. Modifica /etc/pam.d/openvpn:

auth    requisite       /lib/security/pam_google_authenticator.so secret=/etc/google-auth/${USER}  user=openvpn
account    required     pam_permit.so

Qui diciamo che senza una corretta autenticazione di Google falliamo immediatamente (requisito), stiamo usando un file segreto speciale invece del predefinito $ HOME / .google_authenticator (secret =) e accediamo ai file come utente openvpn poiché non è associato alcun userid reale con i nostri utenti. Nella riga successiva diciamo solo che consentiamo a tutti di connettersi dopo un'autenticazione riuscita. Ovviamente dovresti implementare la tua politica di autorizzazione qui. Puoi controllare gli utenti consentiti per file, mysql db o ldap con i rispettivi moduli pam.

Aggiungi questo al tuo file client openvpn

   auth-user-pass
   auth-nocache
   reneg-sec 0

Usiamo auth-user-pass per consentire al client openvpn di chiedere nome utente e password. Non ci piace la memorizzazione nella cache (la "password" sta cambiando) e la re-negazione periodica è dannosa per noi per lo stesso motivo.

Dopodiché dovresti essere in grado di connetterti senza openvpn-otp. Si prega di considerare che questo è un metodo molto più flessibile, poiché se lo si desidera è possibile implementare regole molto complesse nei file di controllo pam. È possibile abilitare / disabilitare gli utenti in base alla directory mysql o ldap senza toccare tali certificati, ad esempio.


1

Installazione: server OpenVPN con 2FA (Google Authenticator) su Ubuntu Server 18.04.4 LTS per hardware Raspberry Pi: Raspberry Pi 3 modello B + Rev 1.3

  • devi accedere con un utente linux senza configurazione di accesso 2FA attiva (il mio caso un utente)
  • inserisci i seguenti comandi
sudo apt install libqrencode3 libpam-google-authenticator
google-authenticator
sudo mv /home/someuser/.google_authenticator /etc/google-auth/someuser
sudo chown -R root /etc/google-auth
  • aggiungi il seguente file il tuo file di configurazione di openvpn (nel mio caso /etc/openvpn/server/server.conf)
plugin /usr/lib/aarch64-linux-gnu/openvpn/plugins/openvpn-plugin-auth-pam.so  openvpn
  • creare il file /etc/pam.d/openvpn e riempirlo con il seguente contenuto
# Google Authenticator
auth    requisite       /lib/aarch64-linux-gnu/security/pam_google_authenticator.so secret=/etc/google-auth/someuser user=root
account    required     pam_permit.so
  • aggiungi le seguenti 3 righe al tuo file client openvpn
auth-user-pass
auth-nocache
reneg-sec 0
  • riavviare il servizio openvpn ed eseguire un test
systemctl restart openvpn@server
  • quando la connessione con il client OpenVPN (in Windows 10) si ottiene un ulteriore accesso (Utente: someuser / Password: 'OTP da Google Authenticator')
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.