Utilizzo di metodi di autenticazione alternativi

OpenVPN 2.0 e versioni successive includono una funzionalità che consente al server OpenVPN di ottenere in modo sicuro un nome utente e una password da un client connesso e di utilizzare tali informazioni come base per l’autenticazione del client.

Per utilizzare questo metodo di autenticazione, aggiungere prima la direttiva auth-user-pass alla configurazione del client. Dirigerà il client OpenVPN a interrogare l’utente per un nome utente/password, passandolo al server sul canale TLS sicuro.

Quindi, configurare il server per utilizzare un plugin di autenticazione, che può essere uno script, un oggetto condiviso o una DLL. Il server OpenVPN chiamerà il plugin ogni volta che un client VPN tenta di connettersi, passandogli il nome utente/password immessi sul client. Il plugin di autenticazione può controllare se il server OpenVPN consente al client di connettersi restituendo un valore failure (1) o success (0).

Utilizzo dei plugin di script

I plugin di script possono essere utilizzati aggiungendo la direttiva auth-user-pass-verify al file di configurazione lato server. Biru:

auth-user-pass-verify auth-pam.pl via-file

userà il auth-pam.pl script perl per autenticare il nome utente / password dei client di connessione. Vedere la descrizione di auth-user-pass-verify nella pagina di manuale per ulteriori informazioni.

Il auth-pam.pl lo script è incluso nella distribuzione del file sorgente OpenVPN nell’esempio-scriptssubdirectory. Autenticherà gli utenti su un server Linux utilizzando un modulo di autenticazione PAM, che potrebbe a sua volta implementare l’autenticazione shadow password, RADIUS o LDAP. auth-pam.pl è destinato principalmente a scopi dimostrativi. Per l’autenticazione PAM nel mondo reale, utilizzare il plug-in oggetto openvpn-auth-pamshared descritto di seguito.

Utilizzando Shared Object o DLL Plugin

Shared object o DLL plugin sono solitamente compilati moduli C che vengono caricati dal server OpenVPN in fase di esecuzione. Ad esempio, se si utilizza un pacchetto OpenVPN basato su RPM su Linux, il plugin openvpn-auth-pam dovrebbe essere già costruito. Per usarlo, aggiungere questo al file di configurazione lato server:

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

Questo dirà al server OpenVPN di convalidare il nome utente / password inseriti dai client utilizzando il modulo loginPAM.

Per l’uso di produzione nel mondo reale, è meglio usare il plugin openvpn-auth-pam, perché ha diversi vantaggi rispetto al auth-pam.pl script:

  • Il plugin shared object openvpn-auth-pam utilizza un modello di esecuzione split-privilege per una maggiore sicurezza. Ciò significa che il server OpenVPN può essere eseguito con privilegi ridotti utilizzando le direttive user nobody, group nobody e chroot, e sarà comunque in grado di autenticarsi contro il file shadow password solo leggibile da root.
  • OpenVPN può passare il nome utente / password a un plugin tramite memoria virtuale, piuttosto che tramite un file o l’ambiente, che è meglio per la sicurezza locale sulla macchina server.
  • I moduli plugin compilati con C generalmente funzionano più velocemente degli script.

Se desideri maggiori informazioni sullo sviluppo dei tuoi plugin da utilizzare con OpenVPN, consulta i file README nella sottodirectory plugin della distribuzione sorgente OpenVPN.

Per costruire il plugin openvpn-auth-pam su Linux, cd alla directory plugin/auth-pam nella distribuzione sorgente OpenVPN ed eseguire make.

Utilizzo dell’autenticazione nome utente/password come unica forma di autenticazione client

Per impostazione predefinita, l’utilizzo di auth-user-pass-verify o di un plug-in di controllo nome utente/password sul server abiliterà la doppia autenticazione, richiedendo che sia il certificato client che l’autenticazione nome utente/password abbiano successo in modo che il client possa essere autenticato.

Sebbene sia sconsigliato dal punto di vista della sicurezza, è anche possibile disabilitare l’uso dei certificati client e forzare solo l’autenticazione nome utente/password. Sul server:

client-cert-not-required

Tali configurazioni dovrebbero di solito anche impostare:

username-as-common-name

che dirà al server di utilizzare il nome utente per scopi di indicizzazione in quanto utilizzerebbe il nome comune di un client che si stava autenticando tramite un certificato client.

Si noti che client-cert-not-required non eviterà la necessità di un certificato server, quindi un client che si connette a un server che utilizza client-cert-not-required può rimuovere le direttive cert e key dal file di configurazione del client, ma non la direttiva ca, perché è necessario che il client verifichi il certificato del server.



+