OpenVPN 2.0 și versiunile ulterioare includ o caracteristică care permite serverului OpenVPN să obțină în siguranță un nume de utilizator și o parolă de la un client conectat și să utilizeze aceste informații ca bază pentru autentificarea clientului.
pentru a utiliza această metodă de autentificare, adăugați mai întâi Directiva auth-user-pass la configurația clientului. Acesta va direcționa clientul OpenVPN să interogheze utilizatorul pentru un nume de utilizator/parolă, transmitându-l serverului pe canalul TLS securizat.
apoi, configurați serverul pentru a utiliza un plugin de autentificare, care poate fi un script, obiect partajat sau DLL. Serverul OpenVPN va apela pluginul de fiecare dată când un client VPN încearcă să se conecteze, trecându-i numele de utilizator/parola introduse pe client. Pluginul de autentificare poate controla dacă serverul OpenVPN permite sau nu clientului să se conecteze returnând o valoare de eșec (1) sau succes (0).
utilizarea pluginurilor de Script
pluginurile de Script pot fi utilizate prin adăugarea Directivei auth-user-pass-verify la fișierul de configurare din partea serverului. De exemplu:
auth-user-pass-verify auth-pam.pl via-file
va folosi auth-pam.pl script perl pentru a autentifica numele de utilizator / parola de conectare clienti. Consultați descrierea auth-user-pass-verify în pagina manual pentru mai multe informații.
auth-pam.pl script-ul este inclus în distribuția OpenVPN fișier sursă în exemplu-scriptssubdirectory. Acesta va autentifica utilizatorii pe un server Linux folosind un modul de autentificare PAM, care la rândul său ar putea implementa parola shadow, RADIUS sau autentificarea LDAP. auth-pam.pl este destinat în primul rând scopurilor demonstrative. Pentru autentificarea Pam din lumea reală, utilizați pluginul de obiecte openvpn-auth-pamshared descris mai jos.
folosind obiect partajat sau plugin-uri DLL
obiect partajat sau plugin-uri DLL sunt de obicei compilate Module C care sunt încărcate de serverul OpenVPN în timpul rulării. De exemplu, dacă utilizați un pachet OpenVPN bazat pe RPM pe Linux, pluginul openvpn-auth-pam ar trebui să fie deja construit. Pentru a-l utiliza, adăugați acest lucru la fișierul de configurare din partea serverului:
plugin /usr/share/openvpn/plugin/lib/openvpn-auth-pam.so login
acest lucru va spune serverului OpenVPN să valideze numele de utilizator/parola introduse de clienți folosind modulul loginPAM.
pentru utilizarea producției în lumea reală, este mai bine să utilizați pluginul openvpn-auth-pam, deoarece are mai multe avantaje față de auth-pam.pl script:
- object shared OpenVPN-auth-Pam plugin utilizează un model de execuție split-privilege pentru o mai bună securitate. Aceasta înseamnă că serverul OpenVPN poate rula cu privilegii reduse utilizând directivele user nobody, group nobody și chroot și va putea totuși să se autentifice împotriva fișierului de parolă shadow care poate fi citit numai în rădăcină.
- OpenVPN poate transmite numele de utilizator/parola unui plugin prin memorie virtuală, mai degrabă decât printr-un fișier sau mediu, ceea ce este mai bun pentru securitatea locală pe mașina serverului.
- modulele de plugin compilate C rulează în general mai repede decât scripturile.
dacă doriți mai multe informații despre dezvoltarea propriilor pluginuri pentru a fi utilizate cu OpenVPN, consultați fișierele README din subdirectorul pluginului din distribuția sursei OpenVPN.
pentru a construi pluginul openvpn-auth-pam pe Linux, cd la directorul plugin/auth-pam din distribuția sursei OpenVPN și rulați make.
folosind autentificarea username/password ca singura formă de autentificare client
în mod implicit, folosind auth-user-pass-verify sau un plugin de verificare a numelui de utilizator/parolei pe server va permite autentificarea duală, necesitând ca atât certificatul client, cât și autentificarea username/password să reușească pentru ca clientul să fie autentificat.
deși este descurajat din punct de vedere al securității, este posibilă și dezactivarea utilizării certificatelor client și forțarea autentificării numelui de utilizator/parolei. Pe server:
client-cert-not-required
astfel de configurații ar trebui, de obicei, să stabilească:
username-as-common-name
care va spune serverului să utilizeze numele de utilizator în scopuri de indexare, deoarece ar folosi numele comun al unui client care se autentifică printr-un certificat de client.
rețineți că client-cert-not-required nu va evita necesitatea unui certificat server, astfel încât un client care se conectează la un server care utilizează client-cert-not-required poate elimina directivele cert și key din fișierul de configurare client, dar nu și Directiva ca, deoarece este necesar ca clientul să verifice certificatul server.