ProHoster > blog > administratie > Authenticatie instellen in het L2TP-netwerk met behulp van Rutoken EDS 2.0 en Rutoken PKI
Authenticatie instellen in het L2TP-netwerk met behulp van Rutoken EDS 2.0 en Rutoken PKI
Problemen
De laatste tijd wisten velen niet hoe het was om vanuit huis te werken. De pandemie heeft de situatie in de wereld dramatisch veranderd; iedereen begint zich aan te passen aan de huidige omstandigheden, namelijk aan het feit dat het simpelweg onveilig is geworden om het huis te verlaten. En velen moesten snel het thuiswerk voor hun werknemers organiseren.
Het ontbreken van een competente aanpak bij het kiezen van oplossingen voor werken op afstand kan echter tot onomkeerbare verliezen leiden. Gebruikerswachtwoorden kunnen worden gestolen, waardoor een aanvaller ongecontroleerd verbinding kan maken met het netwerk en de IT-bronnen van de onderneming.
Daarom is de behoefte aan het creëren van betrouwbare bedrijfs-VPN-netwerken nu toegenomen. Ik zal je erover vertellen betrouwbaar, veilig и eenvoudig bij het gebruik van een VPN-netwerk.
Het werkt volgens het IPsec/L2TP-schema, dat niet-ophaalbare sleutels en certificaten gebruikt die op tokens zijn opgeslagen om clients te authenticeren, en ook gegevens in gecodeerde vorm over het netwerk verzendt.
Een server met CentOS 7 (adres: centos.vpn.server.ad) en een client met Ubuntu 20.04, evenals een client met Windows 10, werden gebruikt als demonstratiestandaarden voor configuratie.
Systeembeschrijving
De VPN werkt volgens het IPSec + L2TP + PPP-schema. Protocol Point-to-Point-protocol (PPP) werkt op de datalinklaag van het OSI-model en biedt gebruikersauthenticatie en encryptie van verzonden gegevens. De gegevens zijn ingekapseld in de gegevens van het L2TP-protocol, dat feitelijk zorgt voor het tot stand brengen van een verbinding in het VPN-netwerk, maar niet zorgt voor authenticatie en encryptie.
L2TP-gegevens zijn ingekapseld in IPSec, dat ook authenticatie en encryptie biedt, maar in tegenstelling tot PPP vinden authenticatie en encryptie plaats op apparaatniveau, niet op gebruikersniveau.
Met deze functie kunt u gebruikers alleen vanaf bepaalde apparaten verifiëren. We zullen het IPSec-protocol gebruiken zoals het is en gebruikersauthenticatie vanaf elk apparaat toestaan.
Gebruikersauthenticatie met behulp van smartcards wordt uitgevoerd op PPP-protocolniveau met behulp van het EAP-TLS-protocol.
Meer gedetailleerde informatie over de werking van deze schakeling vindt u in dit artikel.
Waarom voldoet dit schema aan alle drie de eisen van een goed VPN-netwerk?
De betrouwbaarheid van dit schema is door de tijd getest. Het wordt sinds 2000 gebruikt om VPN-netwerken in te zetten.
Veilige gebruikersauthenticatie wordt verzorgd door het PPP-protocol. Standaardimplementatie van het PPP-protocol ontwikkeld door Paul Mackerras biedt geen voldoende beveiligingsniveau, omdat Voor authenticatie wordt in het beste geval gebruik gemaakt van authenticatie met behulp van een login en wachtwoord. We weten allemaal dat een inlogwachtwoord kan worden bespioneerd, geraden of gestolen. Echter, al geruime tijd de ontwikkelaar Jan Gewoon Keijser в de implementatie ervan Dit protocol corrigeerde dit probleem en voegde de mogelijkheid toe om protocollen te gebruiken die zijn gebaseerd op asymmetrische codering, zoals EAP-TLS, voor authenticatie. Daarnaast voegde hij de mogelijkheid toe om smartcards te gebruiken voor authenticatie, waardoor het systeem veiliger werd.
Momenteel zijn er actieve onderhandelingen gaande om deze twee projecten samen te voegen en u kunt er zeker van zijn dat dit vroeg of laat toch zal gebeuren. Er staat bijvoorbeeld al een hele tijd een gepatchte versie van PPP in de Fedora repositories, waarbij gebruik wordt gemaakt van veilige protocollen voor authenticatie.
Tot voor kort kon dit netwerk alleen worden gebruikt door Windows-gebruikers, maar onze collega's van de Moskouse Staatsuniversiteit Vasily Shokov en Alexander Smirnov ontdekten oud L2TP-clientproject voor Linux en heb het aangepast. Samen hebben we veel bugs en tekortkomingen in het werk van de klant opgelost en de installatie en configuratie van het systeem vereenvoudigd, zelfs bij het bouwen vanaf de broncode. De belangrijkste daarvan zijn:
Compatibiliteitsproblemen van de oude client met de interface van nieuwe versies van openssl en qt opgelost.
Verwijderd dat pppd de token-PIN door een tijdelijk bestand stuurt.
Probleem opgelost waarbij het wachtwoordverzoekprogramma via de grafische interface onjuist werd gestart. Dit werd gedaan door de juiste omgeving voor de xl2tpd-service te installeren.
De build van de L2tpIpsecVpn-daemon wordt nu samen met de build van de client zelf uitgevoerd, wat het build- en configuratieproces vereenvoudigt.
Voor een gemakkelijke ontwikkeling is het Azure Pipelines-systeem verbonden om de juistheid van de build te testen.
De mogelijkheid toegevoegd om een downgrade te forceren beveiligings niveau in de context van openssl. Dit is handig voor het correct ondersteunen van nieuwe besturingssystemen waarbij het standaard beveiligingsniveau op 2 staat, bij VPN-netwerken die gebruik maken van certificaten die niet voldoen aan de beveiligingseisen van dit niveau. Deze optie is handig als u met bestaande oude VPN-netwerken werkt.
Deze client ondersteunt het gebruik van smartcards voor authenticatie, en verbergt ook zoveel mogelijk alle ontberingen en ontberingen van het opzetten van dit schema onder Linux, waardoor het instellen van de client zo eenvoudig en snel mogelijk wordt.
Voor een gemakkelijke verbinding tussen PPP en de client-GUI was het natuurlijk niet mogelijk zonder aanvullende bewerkingen aan elk van de projecten, maar toch werden ze geminimaliseerd en tot een minimum beperkt:
Gemaakt fout in de volgorde van het laden van de configuratie en het initialiseren van de openssl-context. Door deze fout konden we niets uit het lokale /etc/ppp/openssl.cnf configuratiebestand laden, behalve informatie over openssl-engines voor het werken met smartcards, wat een ernstig ongemak was als, bijvoorbeeld, naast informatie over engine, we wilden iets anders instellen. Leg bijvoorbeeld het beveiligingsniveau vast bij het tot stand brengen van een verbinding.
Nu kunt u beginnen met het instellen.
Serverafstemming
Laten we alle benodigde pakketten installeren.
Strongswan installeren (IPsec)
Laten we eerst de firewall configureren voor ipsec-werking
We zullen ook een gemeenschappelijk inlogwachtwoord instellen. Het gedeelde wachtwoord moet voor authenticatie bekend zijn bij alle netwerkdeelnemers. Deze methode is uiteraard onbetrouwbaar, omdat dit wachtwoord kan gemakkelijk bekend worden bij personen aan wie wij geen toegang tot het netwerk willen verlenen.
Maar zelfs dit feit heeft geen invloed op de veiligheid van het netwerk, omdat De basisgegevenscodering en gebruikersauthenticatie worden uitgevoerd door het PPP-protocol. Maar eerlijk gezegd is het de moeite waard om op te merken dat strongswan veiligere technologieën voor authenticatie ondersteunt, bijvoorbeeld met behulp van privésleutels. Strongswan heeft ook de mogelijkheid om authenticatie te bieden met behulp van smartcards, maar tot nu toe wordt slechts een beperkt aantal apparaten ondersteund en daarom is authenticatie met Rutoken-tokens en smartcards nog steeds moeilijk. Laten we een algemeen wachtwoord instellen via een bestand /etc/strongswan/ipsec.secrets:
Laten we het via een bestand configureren /etc/xl2tpd/xl2tpd.conf:
[global]
force userspace = yes
listen-addr = 0.0.0.0
ipsec saref = yes
[lns default]
exclusive = no
; определяет статический адрес сервера в виртуальной сети
local ip = 100.10.10.1
; задает диапазон виртуальных адресов
ip range = 100.10.10.1-100.10.10.254
assign ip = yes
refuse pap = yes
require authentication = yes
; данную опцию можно отключить после успешной настройки сети
ppp debug = yes
length bit = yes
pppoptfile = /etc/ppp/options.xl2tpd
; указывает адрес сервера в сети
name = centos.vpn.server.ad
Wij geven het rootcertificaat en servercertificaat uit:
#директория с сертификатами пользователей, УЦ и сервера
sudo mkdir /etc/ppp/certs
#директория с закрытыми ключами сервера и УЦ
sudo mkdir /etc/ppp/keys
#запрещаем любой доступ к этой дирректории кроме администатора
sudo chmod 0600 /etc/ppp/keys/
#генерируем ключ и выписываем сертификат УЦ
sudo openssl genrsa -out /etc/ppp/keys/ca.pem 2048
sudo openssl req -key /etc/ppp/keys/ca.pem -new -x509 -out /etc/ppp/certs/ca.pem -subj "/C=RU/CN=L2TP CA"
#генерируем ключ и выписываем сертификат сервера
sudo openssl genrsa -out /etc/ppp/keys/server.pem 2048
sudo openssl req -new -out server.req -key /etc/ppp/keys/server.pem -subj "/C=RU/CN=centos.vpn.server.ad"
sudo openssl x509 -req -in server.req -CAkey /etc/ppp/keys/ca.pem -CA /etc/ppp/certs/ca.pem -out /etc/ppp/certs/server.pem -CAcreateserial
We zijn dus klaar met de basisserverconfiguratie. De rest van de serverconfiguratie omvat het toevoegen van nieuwe clients.
Een nieuwe klant toevoegen
Om een nieuwe client aan het netwerk toe te voegen, moet u het bijbehorende certificaat toevoegen aan de lijst met vertrouwde clients voor deze client.
Als een gebruiker lid wil worden van een VPN-netwerk, maakt hij voor deze klant een sleutelpaar en een certificaataanvraag aan. Als de gebruiker wordt vertrouwd, kan deze applicatie worden ondertekend en kan het resulterende certificaat naar de directory met certificaten worden geschreven:
NOTITIE
Om verwarring te voorkomen is het beter dat: Algemene naam, certificaatbestandsnaam en gebruikersnaam uniek zijn.
Het is ook de moeite waard om te controleren of de naam van de gebruiker die we toevoegen nergens in andere authenticatiebestanden voorkomt, anders zullen er problemen zijn met de manier waarop de gebruiker wordt geverifieerd.
Hetzelfde certificaat moet naar de gebruiker worden teruggestuurd.
Het genereren van een sleutelpaar en certificaat
Voor succesvolle authenticatie moet de client:
een sleutelpaar genereren;
een CA-rootcertificaat hebben;
een certificaat voor uw sleutelpaar hebben, ondertekend door de root-CA.
voor client op Linux
Laten we eerst een sleutelpaar op het token genereren en een applicatie voor het certificaat maken:
Stuur de client.req-toepassing die verschijnt naar de CA. Zodra u een certificaat voor uw sleutelpaar ontvangt, schrijft u dit naar een token met dezelfde ID als de sleutel:
voor Windows- en Linux-clients (meer universele methode)
Deze methode is universeler, omdat Hiermee kunt u een sleutel en certificaat genereren die met succes worden herkend door Windows- en Linux-gebruikers, maar er is een Windows-machine voor nodig om de procedure voor het genereren van de sleutel uit te voeren.
Voordat u verzoeken genereert en certificaten importeert, moet u het basiscertificaat van het VPN-netwerk toevoegen aan de lijst met vertrouwde certificaathouders. Om dit te doen, opent u het en selecteert u in het geopende venster de optie “Certificaat installeren”:
In het geopende venster selecteert u het installeren van een certificaat voor de lokale gebruiker:
Laten we het certificaat installeren in het vertrouwde rootcertificaatarchief van de CA:
Na al deze acties zijn wij het met alle verdere punten eens. Het systeem is nu geconfigureerd.
Laten we een bestand cert.tmp maken met de volgende inhoud:
Hierna genereren wij een sleutelpaar en maken wij een aanvraag voor het certificaat aan. Om dit te doen, opent u powershell en voert u de volgende opdracht in:
certreq.exe -new -pin $PIN .cert.tmp .client.req
Stuur de gemaakte applicatie client.req naar uw CA en wacht tot het client.pem-certificaat is ontvangen. Het kan naar een token worden geschreven en aan het Windows-certificaatarchief worden toegevoegd met behulp van de volgende opdracht:
certreq.exe -accept .client.pem
Het is vermeldenswaard dat soortgelijke acties kunnen worden gereproduceerd met behulp van de grafische interface van het mmc-programma, maar deze methode is tijdrovender en minder programmeerbaar.
De Ubuntu-client instellen
NOTITIE
Het opzetten van een client op Linux is momenteel behoorlijk tijdrovend, omdat... vereist het bouwen van afzonderlijke programma's vanaf de broncode. We zullen proberen ervoor te zorgen dat alle wijzigingen in de nabije toekomst worden opgenomen in de officiële repositories.
Om verbinding op IPSec-niveau met de server te garanderen, worden het strongswan-pakket en de xl2tp-daemon gebruikt. Om het verbinden met het netwerk met behulp van smartcards te vereenvoudigen, zullen we het l2tp-ipsec-vpn-pakket gebruiken, dat een grafische schil biedt voor een vereenvoudigde verbindingsconfiguratie.
Laten we beginnen met het stap voor stap samenstellen van de elementen, maar daarvoor zullen we alle benodigde pakketten installeren om de VPN direct te laten werken:
sudo apt-get install xl2tpd strongswan libp11-3
Software installeren voor het werken met tokens
Installeer de nieuwste librtpkcs11ecp.so-bibliotheek van сайта, ook bibliotheken voor het werken met smartcards:
sudo apt-get -y install git make gcc libssl-dev
git clone "https://github.com/jjkeijser/ppp"
cd ppp
./configure --prefix /usr
make -j4
sudo make install
De L2tpIpsecVpn-client installeren
Momenteel moet de client ook vanuit de broncode worden samengesteld. Dit wordt gedaan met behulp van de volgende reeks opdrachten:
sudo apt-get -y install git qt5-qmake qt5-default build-essential libctemplate-dev libltdl-dev
git clone "https://github.com/Sander80/l2tp-ipsec-vpn"
cd l2tp-ipsec-vpn
make -j4
sudo make install
De L2tpIpsecVpn-client instellen
Start de geïnstalleerde client:
Na de lancering zou de applet L2tpIpsecVPN moeten openen. Klik er met de rechtermuisknop op en configureer de verbinding:
Om met tokens te werken, geven we allereerst het pad aan naar de opensc-engine van de OpenSSL-engine en de PKCS#11-bibliotheek. Om dit te doen, opent u het tabblad "Voorkeuren" om openssl-parameters te configureren:
.
Laten we het OpenSSL-instellingenvenster sluiten en verder gaan met het instellen van het netwerk. Laten we een nieuw netwerk toevoegen door op de knop Toevoegen... in het instellingenpaneel te klikken en de netwerknaam in te voeren:
Hierna wordt dit netwerk beschikbaar in het instellingenpaneel. Dubbelklik met de rechtermuisknop op het nieuwe netwerk om het te configureren. Op het eerste tabblad moet u IPsec-instellingen opgeven. Laten we het serveradres en de openbare sleutel instellen:
Ga hierna naar het tabblad PPP-instellingen en geef daar de gebruikersnaam op waaronder we toegang willen krijgen tot het netwerk:
Open hierna het tabblad Eigenschappen en specificeer het pad naar de sleutel, het clientcertificaat en de CA:
Laten we dit tabblad sluiten en de laatste instellingen uitvoeren; hiervoor opent u het tabblad "IP-instellingen" en vinkt u het vakje aan naast de optie "DNS-serveradres automatisch verkrijgen":
Met deze optie kan de client van de server een persoonlijk IP-adres binnen het netwerk ontvangen.
Sluit na alle instellingen alle tabbladen en start de client opnieuw op:
Verbinding maken met het netwerk
Na de instellingen kunt u verbinding maken met het netwerk. Open hiervoor het applet-tabblad en selecteer het netwerk waarmee we verbinding willen maken:
Tijdens het tot stand brengen van de verbinding zal de klant ons vragen om de Rutoken-pincode in te voeren:
Als er een melding in de statusbalk verschijnt dat de verbinding succesvol tot stand is gebracht, betekent dit dat de installatie succesvol was:
Anders is het de moeite waard om uit te zoeken waarom de verbinding niet tot stand is gebracht. Om dit te doen, moet u het programmalogboek bekijken door de opdracht "Verbindingsinformatie" in de applet te selecteren:
De Windows-client instellen
Het opzetten van een client op Windows is veel eenvoudiger dan op Linux, omdat... Alle benodigde software is al in het systeem ingebouwd.
Systeeminstellingen
We zullen alle benodigde stuurprogramma's installeren om met Rutokens te werken door ze te downloaden van van. plaats.
Een rootcertificaat importeren voor authenticatie
Download het serverrootcertificaat en installeer het op het systeem. Om dit te doen, opent u het en selecteert u in het geopende venster de optie “Certificaat installeren”:
In het geopende venster selecteert u een certificaat voor de lokale gebruiker installeren. Als u wilt dat het certificaat beschikbaar is voor alle gebruikers op de computer, kiest u ervoor om het certificaat op de lokale computer te installeren:
Laten we het certificaat installeren in het vertrouwde rootcertificaatarchief van de CA:
Na al deze acties zijn wij het met alle verdere punten eens. Het systeem is nu geconfigureerd.
Een VPN-verbinding opzetten
Om een VPN-verbinding in te stellen, gaat u naar het configuratiescherm en selecteert u de optie om een nieuwe verbinding te maken.
Selecteer in het pop-upvenster de optie om een verbinding te maken om verbinding te maken met uw werkplek:
Selecteer in het volgende venster een VPN-verbinding:
en voer de VPN-verbindingsgegevens in, en geef ook de optie op om een smartcard te gebruiken:
De installatie is nog niet voltooid. Het enige dat overblijft is het specificeren van de gedeelde sleutel voor het IPsec-protocol; hiervoor gaat u naar het tabblad “Netwerkverbindingsinstellingen” en vervolgens naar het tabblad “Eigenschappen voor deze verbinding”:
Ga in het geopende venster naar het tabblad “Beveiliging”, specificeer “L2TP/IPsec Network” als het netwerktype en selecteer “Geavanceerde instellingen”:
Geef in het geopende venster de gedeelde IPsec-sleutel op:
Подключение
Nadat u de installatie hebt voltooid, kunt u proberen verbinding te maken met het netwerk:
Tijdens het verbindingsproces moeten we de token-PIN-code invoeren:
We hebben een veilig VPN-netwerk opgezet en ervoor gezorgd dat dit niet moeilijk is.
Dankbetuigingen
Ik wil onze collega's Vasily Shokov en Alexander Smirnov nogmaals bedanken voor het werk dat zij samen hebben gedaan om het creëren van VPN-verbindingen voor Linux-clients te vereenvoudigen.