ProHoster > Blog > administration > Opsætning af godkendelse i L2TP-netværket ved hjælp af Rutoken EDS 2.0 og Rutoken PKI
Opsætning af godkendelse i L2TP-netværket ved hjælp af Rutoken EDS 2.0 og Rutoken PKI
Problemer
For nylig vidste mange ikke, hvordan det var at arbejde hjemmefra. Pandemien har dramatisk ændret situationen i verden, alle er begyndt at tilpasse sig de nuværende omstændigheder, nemlig til det faktum, at det simpelthen er blevet usikkert at forlade huset. Og mange måtte hurtigt organisere arbejde hjemmefra for deres medarbejdere.
Men manglen på en kompetent tilgang til valg af løsninger til fjernarbejde kan føre til uoprettelige tab. Brugeradgangskoder kan blive stjålet, og dette vil give en hacker mulighed for ukontrolleret at oprette forbindelse til virksomhedens netværk og it-ressourcer.
Derfor er behovet for at skabe pålidelige virksomheds-VPN-netværk nu steget. Jeg vil fortælle dig om pålidelig, sikker и simple ved at bruge et VPN-netværk.
Det fungerer i henhold til IPsec/L2TP-skemaet, som bruger ikke-hentbare nøgler og certifikater gemt på tokens til at godkende klienter, og transmitterer også data over netværket i krypteret form.
En server med CentOS 7 (adresse: centos.vpn.server.ad) og en klient med Ubuntu 20.04, samt en klient med Windows 10, blev brugt som demonstrationsstandere til konfiguration.
Systembeskrivelse
VPN'en fungerer i henhold til IPSec + L2TP + PPP-skemaet. Protokol Punkt-til-punkt-protokol (PPP) opererer ved datalinklaget i OSI-modellen og giver brugergodkendelse og kryptering af transmitterede data. Dens data er indkapslet i dataene i L2TP-protokollen, som faktisk sikrer oprettelsen af en forbindelse i VPN-netværket, men ikke giver godkendelse og kryptering.
L2TP-data er indkapslet i IPSec, som også giver autentificering og kryptering, men i modsætning til PPP, sker autentificering og kryptering på enhedsniveau, ikke på brugerniveau.
Denne funktion giver dig mulighed for kun at godkende brugere fra bestemte enheder. Vi vil bruge IPSec-protokollen, som den er, og tillade brugergodkendelse fra enhver enhed.
Brugergodkendelse ved hjælp af smart cards vil blive udført på PPP-protokolniveau ved hjælp af EAP-TLS-protokollen.
Mere detaljerede oplysninger om driften af dette kredsløb kan findes i denne artikel.
Hvorfor opfylder denne ordning alle tre krav til et godt VPN-netværk?
Pålideligheden af denne ordning er blevet testet af tiden. Det har været brugt til at implementere VPN-netværk siden 2000.
Sikker brugergodkendelse leveres af PPP-protokollen. Standardimplementering af PPP-protokollen udviklet af Paul Mackerras ikke giver et tilstrækkeligt sikkerhedsniveau, fordi Til autentificering bruges i bedste tilfælde autentificering ved hjælp af et login og adgangskode. Vi ved alle, at en login-adgangskode kan spioneres, gættes eller stjæles. Men i lang tid nu udvikleren Jan Just Keijser в dens gennemførelse Denne protokol korrigerede dette problem og tilføjede muligheden for at bruge protokoller baseret på asymmetrisk kryptering, såsom EAP-TLS, til godkendelse. Derudover tilføjede han muligheden for at bruge smartkort til godkendelse, hvilket gjorde systemet mere sikkert.
I øjeblikket er der aktive forhandlinger i gang om at slå disse to projekter sammen, og du kan være sikker på, at det før eller siden vil ske alligevel. For eksempel har en patchet version af PPP været i Fedora-lagrene i lang tid ved at bruge sikre protokoller til autentificering.
Indtil for nylig kunne dette netværk kun bruges af Windows-brugere, men vores kolleger fra Moscow State University Vasily Shokov og Alexander Smirnov fandt gammelt L2TP-klientprojekt til Linux og ændrede det. Sammen fik vi rettet mange fejl og mangler i klientens arbejde, forenklet installationen og konfigurationen af systemet, selv når man bygger fra kilden. De mest betydningsfulde af dem er:
Rettede kompatibilitetsproblemer for den gamle klient med grænsefladen til nye versioner af openssl og qt.
Fjernede pppd fra at sende token-PIN-koden gennem en midlertidig fil.
Rettet forkert lancering af adgangskodeanmodningsprogrammet via den grafiske grænseflade. Dette blev gjort ved at installere det korrekte miljø til xl2tpd-tjenesten.
Opbygningen af L2tpIpsecVpn-dæmonen udføres nu sammen med opbygningen af selve klienten, hvilket forenkler bygge- og konfigurationsprocessen.
For at lette udviklingen er Azure Pipelines-systemet forbundet for at teste rigtigheden af buildet.
Tilføjet muligheden for at tvinge nedgradering sikkerhedsniveau i forbindelse med openssl. Dette er nyttigt til korrekt understøttelse af nye operativsystemer, hvor standardsikkerhedsniveauet er sat til 2, med VPN-netværk, der bruger certifikater, der ikke opfylder sikkerhedskravene på dette niveau. Denne mulighed vil være nyttig til at arbejde med eksisterende gamle VPN-netværk.
Denne klient understøtter brugen af smart cards til godkendelse, og skjuler også så meget som muligt alle besværlighederne og besværlighederne ved at opsætte denne ordning under Linux, hvilket gør klientopsætningen så enkel og hurtig som muligt.
For en bekvem forbindelse mellem PPP og klientens GUI var det naturligvis ikke muligt uden yderligere redigeringer af hvert af projekterne, men ikke desto mindre blev de minimeret og reduceret til et minimum:
Rettet fejl i rækkefølgen af indlæsning af konfigurationen og initialisering af openssl-konteksten. Denne fejl tillod os ikke at indlæse noget fra den lokale /etc/ppp/openssl.cnf-konfigurationsfil undtagen information om openssl-motorer til at arbejde med smart cards, hvilket var en alvorlig ulempe, hvis f.eks. vi ønskede at sætte noget andet. Ret f.eks. sikkerhedsniveauet, når du etablerer en forbindelse.
Nu kan du begynde at opsætte.
Server Tuning
Lad os installere alle de nødvendige pakker.
Installation af strongswan (IPsec)
Først og fremmest, lad os konfigurere firewallen til ipsec-drift
Efter installationen skal du konfigurere strongswan (en af IPSec-implementeringerne). For at gøre dette skal du redigere filen /etc/strongswan/ipsec.conf :
Vi vil også indstille en fælles login-adgangskode. Den delte adgangskode skal være kendt af alle netværksdeltagere for at kunne godkendes. Denne metode er åbenbart upålidelig, fordi denne adgangskode kan nemt blive kendt for personer, som vi ikke ønsker at give adgang til netværket.
Men selv dette faktum vil ikke påvirke netværkets sikkerhed, fordi Grundlæggende datakryptering og brugergodkendelse udføres af PPP-protokollen. Men retfærdigvis er det værd at bemærke, at strongswan understøtter mere sikre teknologier til godkendelse, for eksempel ved hjælp af private nøgler. Strongswan har også muligheden for at give godkendelse ved hjælp af smart-kort, men indtil videre er kun et begrænset udvalg af enheder understøttet, og derfor er godkendelse ved hjælp af Rutoken-tokens og smart-kort stadig vanskelig. Lad os indstille en generel adgangskode via fil /etc/strongswan/ipsec.secrets:
Lad os konfigurere det via fil /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
Vi udsteder rodcertifikatet og servercertifikatet:
#директория с сертификатами пользователей, УЦ и сервера
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
Dermed er vi færdige med den grundlæggende serveropsætning. Resten af serverkonfigurationen involverer tilføjelse af nye klienter.
Tilføjelse af en ny klient
For at tilføje en ny klient til netværket skal du tilføje dens certifikat til listen over pålidelige klienter for denne klient.
Hvis en bruger ønsker at blive medlem af et VPN-netværk, opretter han et nøglepar og en certifikatapplikation til denne klient. Hvis brugeren er tillid til, kan denne applikation signeres, og det resulterende certifikat kan skrives til certifikatbiblioteket:
BEMÆRK
For at undgå forvirring er det bedre, at: Fællesnavn, certifikatfilnavn og brugernavn er unikt.
Det er også værd at tjekke, at navnet på den bruger, vi tilføjer, ikke vises nogen steder i andre godkendelsesfiler, ellers vil der være problemer med måden, brugeren godkendes på.
Det samme certifikat skal sendes tilbage til brugeren.
Generering af et nøglepar og certifikat
For vellykket godkendelse skal klienten:
generere et nøglepar;
har et CA-rodcertifikat;
have et certifikat for dit nøglepar, der er underskrevet af rod-CA.
til klient på Linux
Lad os først generere et nøglepar på tokenet og oprette en applikation til certifikatet:
Send applikationen client.req, der vises til CA. Når du modtager et certifikat for dit nøglepar, skal du skrive det til et token med samme id som nøglen:
til Windows- og Linux-klienter (mere universel metode)
Denne metode er mere universel, fordi giver dig mulighed for at generere en nøgle og et certifikat, der med succes vil blive genkendt af Windows- og Linux-brugere, men det kræver en Windows-maskine for at udføre nøglegenereringsproceduren.
Før du genererer anmodninger og importerer certifikater, skal du tilføje VPN-netværkets rodcertifikat til listen over pålidelige. For at gøre dette skal du åbne den og i vinduet, der åbner, vælge "Installer certifikat" mulighed:
I vinduet, der åbnes, skal du vælge at installere et certifikat for den lokale bruger:
Lad os installere certifikatet i CA's betroede rodcertifikatlager:
Efter alle disse handlinger er vi enige i alle yderligere punkter. Systemet er nu konfigureret.
Lad os oprette en fil cert.tmp med følgende indhold:
Herefter vil vi generere et nøglepar og oprette en applikation til certifikatet. For at gøre dette skal du åbne powershell og indtaste følgende kommando:
certreq.exe -new -pin $PIN .cert.tmp .client.req
Send den oprettede applikation client.req til din CA og vent på, at client.pem-certifikatet modtages. Det kan skrives til et token og tilføjes til Windows-certifikatlageret ved hjælp af følgende kommando:
certreq.exe -accept .client.pem
Det er værd at bemærke, at lignende handlinger kan gengives ved hjælp af mmc-programmets grafiske grænseflade, men denne metode er mere tidskrævende og mindre programmerbar.
Opsætning af Ubuntu-klienten
BEMÆRK
Opsætning af en klient på Linux er i øjeblikket ret tidskrævende, fordi... kræver opbygning af separate programmer fra kilden. Vi vil forsøge at sikre, at alle ændringer er inkluderet i de officielle arkiver i den nærmeste fremtid.
For at sikre forbindelse på IPSec-niveau til serveren, bruges strongswan-pakken og xl2tp-dæmonen. For at forenkle tilslutning til netværket ved hjælp af smart cards, vil vi bruge l2tp-ipsec-vpn-pakken, som giver en grafisk skal til forenklet forbindelsesopsætning.
Lad os begynde at samle elementerne trin for trin, men før det installerer vi alle de nødvendige pakker for, at VPN'en kan fungere direkte:
sudo apt-get install xl2tpd strongswan libp11-3
Installation af software til arbejde med tokens
Installer det seneste librtpkcs11ecp.so-bibliotek fra сайта, også biblioteker til at arbejde med smart cards:
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
Installation af L2tpIpsecVpn-klienten
I øjeblikket skal klienten også kompileres fra kildekoden. Dette gøres ved hjælp af følgende rækkefølge af kommandoer:
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
Opsætning af L2tpIpsecVpn-klienten
Start den installerede klient:
Efter lancering skal L2tpIpsecVPN-appletten åbne. Højreklik på den og konfigurer forbindelsen:
For at arbejde med tokens angiver vi først og fremmest stien til opensc-motoren for OpenSSL-motoren og PKCS#11-biblioteket. For at gøre dette skal du åbne fanen "Præferencer" for at konfigurere openssl-parametre:
.
Lad os lukke OpenSSL-indstillingsvinduet og gå videre til opsætning af netværket. Lad os tilføje et nyt netværk ved at klikke på knappen Tilføj... i indstillingspanelet og indtaste netværksnavnet:
Herefter bliver dette netværk tilgængeligt i indstillingspanelet. Dobbelt-højreklik på det nye netværk for at konfigurere det. På den første fane skal du lave IPsec-indstillinger. Lad os indstille serveradressen og den offentlige nøgle:
Efter dette skal du gå til fanen PPP-indstillinger og angive det brugernavn, som vi vil have adgang til netværket under:
Åbn derefter fanen Egenskaber og angiv stien til nøglen, klientcertifikatet og CA:
Lad os lukke denne fane og udføre de endelige indstillinger; For at gøre dette skal du åbne fanen "IP-indstillinger" og markere afkrydsningsfeltet ud for "Hent automatisk DNS-serveradresse":
Denne mulighed giver klienten mulighed for at modtage en personlig IP-adresse på netværket fra serveren.
Efter alle indstillingerne skal du lukke alle faner og genstarte klienten:
Tilslutning til netværket
Efter indstillingerne kan du oprette forbindelse til netværket. For at gøre dette skal du åbne fanen applet og vælge det netværk, som vi vil oprette forbindelse til:
Under etableringsprocessen for forbindelsen vil klienten bede os om at indtaste Rutoken PIN-koden:
Hvis der vises en meddelelse i statuslinjen om, at forbindelsen er blevet etableret, betyder det, at opsætningen lykkedes:
Ellers er det værd at finde ud af, hvorfor forbindelsen ikke blev etableret. For at gøre dette skal du se på programloggen ved at vælge kommandoen "Forbindelsesoplysninger" i appletten:
Opsætning af Windows-klienten
Opsætning af en klient på Windows er meget nemmere end på Linux, fordi... Al den nødvendige software er allerede indbygget i systemet.
System opsætning
Vi installerer alle de nødvendige drivere til at arbejde med Rutokens ved at downloade dem fra af. websted.
Import af et rodcertifikat til godkendelse
Download serverens rodcertifikat og installer det på systemet. For at gøre dette skal du åbne den og i vinduet, der åbner, vælge "Installer certifikat" mulighed:
I det vindue, der åbnes, skal du vælge at installere et certifikat for den lokale bruger. Hvis du ønsker, at certifikatet skal være tilgængeligt for alle brugere på computeren, skal du vælge at installere certifikatet på den lokale computer:
Lad os installere certifikatet i CA's betroede rodcertifikatlager:
Efter alle disse handlinger er vi enige i alle yderligere punkter. Systemet er nu konfigureret.
Opsætning af en VPN-forbindelse
For at oprette en VPN-forbindelse skal du gå til kontrolpanelet og vælge muligheden for at oprette en ny forbindelse.
I pop op-vinduet skal du vælge muligheden for at oprette en forbindelse for at oprette forbindelse til din arbejdsplads:
I det næste vindue skal du vælge en VPN-forbindelse:
og indtast VPN-forbindelsesdetaljerne, og angiv også muligheden for at bruge et smartkort:
Opsætningen er ikke færdig endnu. Det eneste, der er tilbage, er at angive den delte nøgle til IPsec-protokollen; for at gøre dette skal du gå til fanen "Netværksforbindelsesindstillinger" og derefter gå til fanen "Egenskaber for denne forbindelse":
I vinduet, der åbnes, skal du gå til fanen "Sikkerhed", angive "L2TP/IPsec Network" som netværkstype og vælge "Avancerede indstillinger":
Angiv den delte IPsec-nøgle i vinduet, der åbnes:
Подключение
Når du har fuldført opsætningen, kan du prøve at oprette forbindelse til netværket:
Under forbindelsesprocessen bliver vi bedt om at indtaste token-PIN-koden:
Vi har oprettet et sikkert VPN-netværk og sørget for, at det ikke er svært.
Tak
Jeg vil gerne endnu en gang takke vores kolleger Vasily Shokov og Alexander Smirnov for det arbejde, de har gjort sammen for at forenkle oprettelsen af VPN-forbindelser til Linux-klienter.