OpenVPN 2.0 en later een functie opnemen waarmee de OpenVPN-server veilig een gebruikersnaam en wachtwoord kan verkrijgen van een verbindende client, en die informatie kan gebruiken als basis voor de verificatie van de client.
om deze verificatiemethode te gebruiken, voegt u eerst de instructie auth-user-pass toe aan de clientconfiguratie. Het zal de OpenVPN client om de gebruiker te vragen om een gebruikersnaam/wachtwoord, het doorgeven aan de server via het beveiligde TLS-kanaal.
configureer vervolgens de server om een authenticatieplugin te gebruiken, wat een script, gedeeld object of DLL kan zijn. De OpenVPN-server zal de plugin bellen elke keer dat een VPN-client probeert verbinding te maken, het doorgeven van de gebruikersnaam/wachtwoord ingevoerd op de client. De verificatieplugin kan bepalen of de OpenVPN-server de client toestaat verbinding te maken door een fout (1) of succes (0) waarde terug te geven.
Scriptplug-ins
Scriptplug-ins kunnen worden gebruikt door de instructie auth-user-pass-verify toe te voegen aan het configuratiebestand aan de serverzijde. Bijvoorbeeld:
auth-user-pass-verify auth-pam.pl via-file
zal de auth-pam.pl perl-script om de gebruikersnaam/wachtwoord van verbindende clients te verifiëren. Zie de beschrijving van auth-user-pass-verify in de hulppagina voor meer informatie.
de auth-pam.pl script is opgenomen in de OpenVPN bronbestand distributie in de sample-scriptssubdirectory. Het zal gebruikers op een Linux server authenticeren met behulp van een PAM authenticatiemodule, die op zijn beurt shadow password, RADIUS of LDAP authenticatie kan implementeren. auth-pam.pl is voornamelijk bedoeld voor demonstratiedoeleinden. Voor PAM authenticatie in de echte wereld, gebruik je de openvpn-auth-pamshared object plugin die hieronder wordt beschreven.
met behulp van Shared Object of DLL Plugins
Shared object of DLL plugins zijn meestal gecompileerde C-modules die worden geladen door de OpenVPN-server tijdens het draaien. Als je bijvoorbeeld een op RPM gebaseerd OpenVPN-pakket op Linux gebruikt, zou de openvpn-auth-pam plugin al gebouwd moeten zijn. Om het te gebruiken, voeg je dit toe aan het server-side configuratiebestand:
plugin /usr/share/openvpn/plugin/lib/openvpn-auth-pam.so login
dit zal de OpenVPN server vertellen om de gebruikersnaam/wachtwoord te valideren die door clients zijn ingevoerd met behulp van de loginPAM module.
voor real-world productie gebruik, is het beter om de openvpn-auth-pam plugin te gebruiken, omdat het verschillende voordelen heeft ten opzichte van de auth-pam.pl script:
- de Shared object openvpn-auth-pam plugin gebruikt een split-privilege uitvoering model voor een betere beveiliging. Dit betekent dat de OpenVPN-server kan draaien met verminderde privileges door gebruik te maken van de richtlijnen user nobody, group nobody en chroot, en nog steeds in staat zal zijn om te authenticeren tegen de root-leesbaar-only shadow password bestand.
- OpenVPN kan de gebruikersnaam/wachtwoord doorgeven aan een plugin via virtueel geheugen, in plaats van via een bestand of de omgeving, wat beter is voor de lokale veiligheid op de server machine.
- C-gecompileerde pluginmodules werken over het algemeen sneller dan scripts.
als u meer informatie wilt over het ontwikkelen van uw eigen plugins voor gebruik met OpenVPN, zie de README-bestanden in de plugin-submap van de OpenVPN-brondistributie.
om de openvpn-auth-pam plugin op Linux te bouwen, cd naar de plugin/auth-pam directory in de OpenVPN bron distributie en voer make uit.
gebruikersnaam / wachtwoord authenticatie gebruiken als de enige vorm van client authenticatie
standaard zal het gebruik van auth-user-pass-verify of een plugin voor gebruikersnaam/wachtwoord controleren op de server dubbele authenticatie mogelijk maken, waarbij zowel client-certificaat als Gebruikersnaam/wachtwoord authenticatie nodig zijn om de client te kunnen verifiëren.
hoewel dit vanuit een beveiligingsperspectief wordt afgeraden, is het ook mogelijk om het gebruik van clientcertificaten uit te schakelen en alleen gebruikersnaam/wachtwoord authenticatie te forceren. Op de server:
client-cert-not-required
dergelijke configuraties moeten meestal ook instellen:
username-as-common-name
dit zal de server vertellen om de Gebruikersnaam te gebruiken voor indexeringsdoeleinden omdat het de Algemene naam zou gebruiken van een client die werd geverifieerd via een client certificaat.
merk op dat client-cert-not-required de noodzaak van een servercertificaat niet zal wegnemen, dus een client die verbinding maakt met een server die client-cert-not-required gebruikt, kan de Cert-en key-richtlijnen uit het clientconfiguratiebestand verwijderen, maar niet de CA-richtlijn, omdat het noodzakelijk is voor de client om het servercertificaat te verifiëren.