använda alternativa autentiseringsmetoder

OpenVPN 2.0 och senare inkluderar en funktion som gör att OpenVPN-servern säkert kan få ett användarnamn och lösenord från en anslutande klient och använda den informationen som grund för autentisering av klienten.

för att använda den här autentiseringsmetoden, lägg först till auth-user-pass-direktivet i klientkonfigurationen. Det kommer att leda OpenVPN-klienten att fråga användaren om ett användarnamn / lösenord och vidarebefordra det till servern via den säkra TLS-kanalen.

konfigurera sedan servern för att använda ett autentiseringsplugin, som kan vara ett skript, delat objekt eller DLL. OpenVPN-servern kommer att ringa plugin varje gång en VPN-klient försöker ansluta och skickar det användarnamnet/lösenordet som anges på klienten. Autentiseringspluginet kan styra huruvida OpenVPN-servern tillåter klienten att ansluta genom att returnera ett fel (1) eller framgång (0) värde.

använda Script-insticksprogram

Script-insticksprogram kan användas genom att lägga till direktivet auth-user-pass-verify i konfigurationsfilen på serversidan. Exempelvis:

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

kommer att använda auth-pam.pl perl-skript för att autentisera användarnamnet / lösenordet för anslutande klienter. Se beskrivningen av auth-user-pass-verify på manualsidan för mer information.

den auth-pam.pl script ingår i OpenVPN källfilen distribution i sample-scriptssubdirectory. Det kommer att autentisera användare på en Linux-server med en Pam-autentiseringsmodul, som i sin tur kan implementera shadow password, RADIUS eller LDAP-autentisering. auth-pam.pl är främst avsedd för demonstrationsändamål. För verklig Pam-autentisering, använd openvpn-auth-pamshared objektplugin som beskrivs nedan.

använda delade objekt-eller DLL-Plugins

Delade objekt-eller DLL-plugins sammanställs vanligtvis C-moduler som laddas av OpenVPN-servern vid körning. Om du till exempel använder ett rpm-baserat OpenVPN-paket på Linux, bör openvpn-auth-pam-plugin redan byggas. För att använda den, lägg till detta i konfigurationsfilen på serversidan:

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

detta kommer att berätta för OpenVPN-servern att validera användarnamnet / lösenordet som angetts av klienter som använder loginPAM-modulen.

för användning i verklig produktion är det bättre att använda openvpn-auth-pam-plugin, eftersom det har flera fördelar jämfört med auth-pam.pl script:

  • den delade objektet openvpn-auth-pam plugin använder en split-privilegium exekveringsmodell för bättre säkerhet. Detta innebär att OpenVPN-servern kan köras med reducerade privilegier genom att använda direktiven user nobody, group nobody och chroot, och kommer fortfarande att kunna autentisera mot den root-läsbara skugglösenordfilen.
  • OpenVPN kan skicka användarnamnet/lösenordet till ett plugin via virtuellt minne, snarare än via en fil eller miljön, vilket är bättre för lokal säkerhet på serverns maskin.
  • C-kompilerade plugin-moduler körs vanligtvis snabbare än skript.

om du vill ha mer information om att utveckla dina egna plugins för användning med OpenVPN, se README-filerna i plugin-underkatalogen för OpenVPN-källdistributionen.

för att bygga openvpn-auth-pam-plugin på Linux, cd till plugin / auth-pam-katalogen i OpenVPN-källdistributionen och kör make.

använda användarnamn / lösenordsautentisering som den enda formen av klientautentisering

som standard använder du auth-user-pass-verify eller ett användarnamn/lösenordskontrollplugin på servern möjliggör dubbel autentisering, vilket kräver att både klientcertifikat och användarnamn/lösenordsautentisering lyckas för att klienten ska autentiseras.

även om det avskräcks ur ett säkerhetsperspektiv är det också möjligt att inaktivera användningen av klientcertifikat och endast tvinga användarnamn/lösenordsautentisering. På servern:

client-cert-not-required

sådana konfigurationer bör vanligtvis också ställa in:

username-as-common-name

vilket kommer att berätta för servern att använda användarnamnet för indexeringsändamål eftersom det skulle använda det vanliga namnet på en klient som autentiserades via ett klientcertifikat.

Observera att client-cert-not-required inte kommer att undanröja behovet av ett servercertifikat, så en klient som ansluter till en server som använder client-cert-not-required kan ta bort cert-och nyckeldirektiven från klientkonfigurationsfilen, men inte ca-direktivet, eftersom det är nödvändigt för klienten att verifiera servercertifikatet.



+