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

Ho un'impostazione openVPN in cui gli utenti non dispongono di account shell sul Debian VM in esecuzione openVPN. Gli articoli che ho trovato durante il Google sono tutti istruzioni per l'impostazione di Google Authenticator per un utente classico * nix (ad esempio per eseguire il binario Authenticator nella home directory dell'utente).

C'è un documento che spiega come integrare Google Authenticator per i server openvpn che autenticano basati esclusivamente sui file .ovpn usati sul lato client?

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

  • Perché Openvpn utilizza la networking 0.0.0.0 netmask 128.0.0.0 come path predefinito?
  • Come verificare che un server OpenVPN ascolti in una port remota senza utilizzare il client OpenVPN?
  • Accelerare la velocità VPN utilizzando più connessioni
  • Il client OpenVPN si connette ma non può accedere a Internet
  • OpenVPN su AWS EC2 fornisce il codice di errore 1232 (trasmissione non rioutput)
  • Come migliorare l'affidabilità di OpenVPN su un collegamento a elevata latenza?
  • Accesso sito ospitato sullo stesso server come VPN tramite VPN
  • Cisco ASA 5505 e openvpn funzionano insieme?
  • One Solution collect form web for “Come abilitare l'authorization a due fattori utilizzando Google Authenticator per l'accesso openVPN basato su file .ovpn?”

    No. Naturalmente non puoi farlo. Questo avrebbe sconfitto il vero scopo di 2FA. Il server deve avere un modo per verificare le credenziali dell'utente e queste informazioni non devono essere inviate tramite la networking (ad esempio non è ansible utilizzare solo il file client.ovpn).

    Anche se non è necessariamente necessario creare utenti unix, è necessario consentire agli utenti di installare i codici di verifica sul server. È ansible utilizzare sftp con gli utenti virtuali utilizzando il certificato già rilasciato, https con l'authorization lato client (reciproca), CIFS (samba) o un buon ftp con estensione TLS o in qualsiasi altro modo che consente al server di conoscere i codici di verifica creati dagli utenti . Il canale di comunicazione deve essere sicuro (criptato || locale).

    Naturalmente se i tuoi utenti caricano i propri file, non è ansible utilizzare le credenziali aggregate basate su file utilizzate da openvpn-otp. Fortunatamente abbiamo un'altra opzione (e molto meglio) utilizzando linux ottimo module di sicurezza pam.

    Innanzitutto, è necessario raccogliere i file utente creati da google-authenticator in una directory tramite uno dei methods sopra indicati. Nel nostro caso sarà / etc / google-auth.

    È necessario applicare qui un solo ID utente per tutti i file, in quanto non si hanno utenti reali. Lasciate che sia openvpn . Le autorizzazioni devono essere 0400 (-r ——–). Pam non ama credenziali leggibili a livello mondiale / gruppo (certamente). Puoi facilmente applicarla con samba, apache, ftp o nel caso peggiore utilizzando una scheda cron (non consigliata).

    A scopo di prova, fai semplicemente:

     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 

    Dopo di che si chiede a openvpn di autenticare contro libpam, che ha il proprio module di authorization google. Aggiungilo al file del server openvpn:

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

    Questo dice che utilizzeremo il metodo di authentication con il pam aut id openvpn .

    Ora, crea la configuration del 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 

    Diciamo che senza l'authentication google di successo non riusciamo immediatamente (requisito), utilizziamo un file speciale segreto invece del default $ HOME / .google_authenticator (secret =) e accediamo ai file come openvpn dato che non esiste un utente reale associato con i nostri utenti. Nella prossima row si dice solo che permettiamo a tutti di connettersi dopo l'authentication di successo. Naturalmente dovresti implementare la tua politica di authorization qui. È ansible controllare gli utenti consentiti per file, mysql db o ldap con i rispettivi moduli pam.

    Aggiungilo al tuo file client openvpn

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

    Noi utilizziamo auth-user-pass per consentire al client openvpn di richiedere nome utente e password. Non ci piace il caching ("password" sta cambiando) e la periodica re-negotion è male per noi per lo stesso motivo.

    Dopo di che si dovrebbe essere in grado di connettersi senza openvpn-otp. Si prega di considerare questo metodo molto più flessibile, in quanto è ansible implementare regole molto complesse nei file di controllo di image, se lo si desidera. È ansible abilitare / disabilitare gli utenti in base alla directory di mysql o ldap senza toccarli per esempio.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.