ProHoster > blogg > administration > Ställa in autentisering i L2TP-nätverket med Rutoken EDS 2.0 och Rutoken PKI
Ställa in autentisering i L2TP-nätverket med Rutoken EDS 2.0 och Rutoken PKI
frågor
Nyligen var det många som inte visste hur det var att jobba hemifrån. Pandemin har dramatiskt förändrat situationen i världen, alla har börjat anpassa sig till de rådande omständigheterna, nämligen till det faktum att det helt enkelt har blivit osäkert att lämna huset. Och många var tvungna att snabbt organisera hemarbete för sina anställda.
Men avsaknaden av ett kompetent tillvägagångssätt för att välja lösningar för distansarbete kan leda till oåterkalleliga förluster. Användarlösenord kan stjälas, och detta kommer att tillåta en angripare att okontrollerat ansluta till företagets nätverk och IT-resurser.
Det är därför behovet av att skapa pålitliga företags VPN-nätverk nu har ökat. Jag ska berätta om pålitlig, säker и enkel att använda ett VPN-nätverk.
Det fungerar enligt IPsec/L2TP-schemat, som använder icke-återtagbara nycklar och certifikat lagrade på tokens för att autentisera klienter, och även överför data över nätverket i krypterad form.
En server med CentOS 7 (adress: centos.vpn.server.ad) och en klient med Ubuntu 20.04, samt en klient med Windows 10, användes som demonstrationsstativ för konfiguration.
Systembeskrivning
VPN kommer att fungera enligt IPSec + L2TP + PPP-schemat. Protokoll Punkt-till-punkt-protokoll (PPP) fungerar vid datalänkskiktet i OSI-modellen och tillhandahåller användarautentisering och kryptering av överförda data. Dess data är inkapslade i data från L2TP-protokollet, som faktiskt säkerställer att en anslutning skapas i VPN-nätverket, men inte ger autentisering och kryptering.
L2TP-data är inkapslad i IPSec, som också tillhandahåller autentisering och kryptering, men till skillnad från PPP sker autentisering och kryptering på enhetsnivå, inte på användarnivå.
Den här funktionen låter dig autentisera användare endast från vissa enheter. Vi kommer att använda IPSec-protokollet som det är och tillåter användarautentisering från vilken enhet som helst.
Användarautentisering med smartkort kommer att utföras på PPP-protokollnivå med EAP-TLS-protokollet.
Mer detaljerad information om driften av denna krets finns i den här artikeln.
Varför uppfyller detta schema alla tre kraven för ett bra VPN-nätverk?
Tillförlitligheten av detta schema har testats med tiden. Det har använts för att distribuera VPN-nätverk sedan 2000.
Säker användarautentisering tillhandahålls av PPP-protokollet. Standardimplementering av PPP-protokollet utvecklat av Paul Mackerras inte ger en tillräcklig säkerhetsnivå, eftersom För autentisering används i bästa fall autentisering med inloggning och lösenord. Vi vet alla att ett inloggningslösenord kan spioneras på, gissas eller stjäls. Men sedan länge nu utvecklaren Jan Just Keijser в dess genomförande Det här protokollet åtgärdade problemet och lade till möjligheten att använda protokoll baserade på asymmetrisk kryptering, såsom EAP-TLS, för autentisering. Dessutom lade han till möjligheten att använda smarta kort för autentisering, vilket gjorde systemet säkrare.
För närvarande pågår aktiva förhandlingar om att slå samman dessa två projekt och du kan vara säker på att det förr eller senare kommer att ske ändå. Till exempel har en korrigerad version av PPP funnits i Fedoras förvar under lång tid, med säkra protokoll för autentisering.
Tills nyligen kunde detta nätverk endast användas av Windows-användare, men våra kollegor från Moscow State University Vasily Shokov och Alexander Smirnov fann gammalt L2TP-klientprojekt för Linux och modifierade den. Tillsammans fixade vi många buggar och brister i klientens arbete, förenklade installationen och konfigurationen av systemet, även när man byggde från källan. De viktigaste av dem är:
Fixade kompatibilitetsproblem för den gamla klienten med gränssnittet för nya versioner av openssl och qt.
Tog bort pppd från att skicka token-PIN genom en temporär fil.
Fixat felaktig start av lösenordsbegäran via det grafiska gränssnittet. Detta gjordes genom att installera rätt miljö för xl2tpd-tjänsten.
Bygget av L2tpIpsecVpn-demonen utförs nu tillsammans med byggandet av själva klienten, vilket förenklar bygg- och konfigurationsprocessen.
För att underlätta utvecklingen är Azure Pipelines-systemet anslutet för att testa konstruktionens korrekthet.
Lade till möjligheten att tvinga nedgradering säkerhetsnivå i samband med openssl. Detta är användbart för att korrekt stödja nya operativsystem där standardsäkerhetsnivån är inställd på 2, med VPN-nätverk som använder certifikat som inte uppfyller säkerhetskraven för denna nivå. Det här alternativet kommer att vara användbart för att arbeta med befintliga gamla VPN-nätverk.
Den här klienten stöder användningen av smarta kort för autentisering, och döljer också så mycket som möjligt alla svårigheter och svårigheter med att ställa in detta schema under Linux, vilket gör klientinstallationen så enkel och snabb som möjligt.
Naturligtvis, för en bekväm anslutning mellan PPP och klientens GUI, var det inte möjligt utan ytterligare redigeringar av vart och ett av projekten, men ändå minimerades de och reducerades till ett minimum:
Fast fel i ordningen för att ladda konfigurationen och initiera openssl-kontexten. Det här felet tillät oss inte att ladda något från den lokala konfigurationsfilen /etc/ppp/openssl.cnf förutom information om openssl-motorer för att arbeta med smarta kort, vilket var en allvarlig olägenhet om t.ex. information om motorer, vi ville ställa in något annat. Till exempel, fixa säkerhetsnivån när du upprättar en anslutning.
Nu kan du börja ställa in.
Serverjustering
Låt oss installera alla nödvändiga paket.
Installera strongswan (IPsec)
Först av allt, låt oss konfigurera brandväggen för ipsec-drift
Vi kommer också att ange ett gemensamt inloggningslösenord. Det delade lösenordet måste vara känt för alla nätverksdeltagare för autentisering. Denna metod är uppenbarligen opålitlig, eftersom detta lösenord kan lätt bli känt för personer som vi inte vill ge tillgång till nätverket.
Men även detta faktum kommer inte att påverka nätverkets säkerhet, eftersom Grundläggande datakryptering och användarautentisering utförs av PPP-protokollet. Men i rättvisans namn är det värt att notera att strongswan stöder säkrare teknologier för autentisering, till exempel med privata nycklar. Strongswan har också möjlighet att tillhandahålla autentisering med smarta kort, men än så länge stöds bara ett begränsat antal enheter och därför är autentisering med Rutoken-tokens och smartkort fortfarande svårt. Låt oss ställa in ett allmänt lösenord via fil /etc/strongswan/ipsec.secrets:
Låt oss konfigurera 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 utfärdar rotcertifikatet och 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
Därmed är vi klara med den grundläggande serverkonfigurationen. Resten av serverkonfigurationen innebär att nya klienter läggs till.
Lägger till en ny klient
För att lägga till en ny klient till nätverket måste du lägga till dess certifikat i listan över betrodda för den här klienten.
Om en användare vill bli medlem i ett VPN-nätverk skapar han ett nyckelpar och en certifikatapplikation för denna klient. Om användaren är betrodd, kan denna applikation signeras och det resulterande certifikatet kan skrivas till certifikatkatalogen:
ANMÄRKNINGAR
För att undvika förvirring är det bättre att: Gemensamt namn, certifikatfilnamn och användarnamn är unika.
Det är också värt att kontrollera att namnet på användaren vi lägger till inte förekommer någonstans i andra autentiseringsfiler, annars blir det problem med hur användaren autentiseras.
Samma certifikat måste skickas tillbaka till användaren.
Genererar ett nyckelpar och certifikat
För framgångsrik autentisering måste klienten:
generera ett nyckelpar;
har ett CA-rotcertifikat;
ha ett certifikat för ditt nyckelpar signerat av rot-CA.
för klient på Linux
Låt oss först skapa ett nyckelpar på token och skapa en applikation för certifikatet:
för Windows- och Linux-klienter (mer universell metod)
Denna metod är mer universell, eftersom låter dig generera en nyckel och ett certifikat som framgångsrikt kommer att kännas igen av Windows- och Linux-användare, men det kräver en Windows-maskin för att utföra nyckelgenereringsproceduren.
Innan du genererar förfrågningar och importerar certifikat måste du lägga till VPN-nätverkets rotcertifikat i listan över betrodda. För att göra detta, öppna det och välj alternativet "Installera certifikat" i fönstret som öppnas:
I fönstret som öppnas väljer du att installera ett certifikat för den lokala användaren:
Låt oss installera certifikatet i CA:s betrodda rotcertifikatlager:
Efter alla dessa åtgärder håller vi med om alla ytterligare punkter. Systemet är nu konfigurerat.
Låt oss skapa en fil cert.tmp med följande innehåll:
Efter detta kommer vi att generera ett nyckelpar och skapa en applikation för certifikatet. För att göra detta, öppna powershell och skriv in följande kommando:
certreq.exe -new -pin $PIN .cert.tmp .client.req
Skicka den skapade applikationen client.req till din CA och vänta på att client.pem-certifikatet tas emot. Det kan skrivas till en token och läggas till i Windows certifikatarkiv med följande kommando:
certreq.exe -accept .client.pem
Det är värt att notera att liknande åtgärder kan reproduceras med hjälp av det grafiska gränssnittet för mmc-programmet, men denna metod är mer tidskrävande och mindre programmerbar.
Konfigurera Ubuntu-klienten
ANMÄRKNINGAR
Att konfigurera en klient på Linux är för närvarande ganska tidskrävande, eftersom... kräver att man bygger separata program från källan. Vi kommer att försöka se till att alla ändringar ingår i de officiella arkiven inom en snar framtid.
För att säkerställa anslutning på IPSec-nivå till servern, används strongswan-paketet och xl2tp-demonen. För att förenkla anslutningen till nätverket med smartkort kommer vi att använda paketet l2tp-ipsec-vpn, som tillhandahåller ett grafiskt skal för förenklad anslutningskonfiguration.
Låt oss börja montera elementen steg för steg, men innan dess kommer vi att installera alla nödvändiga paket för att VPN ska fungera direkt:
sudo apt-get install xl2tpd strongswan libp11-3
Installera programvara för att arbeta med tokens
Installera det senaste biblioteket librtpkcs11ecp.so från сайта, även bibliotek för att arbeta med smartkort:
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 av L2tpIpsecVpn-klienten
För tillfället behöver klienten också kompileras från källkod. Detta görs med hjälp av följande kommandosekvens:
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
Konfigurera L2tpIpsecVpn-klienten
Starta den installerade klienten:
Efter lansering bör L2tpIpsecVPN-appleten öppnas. Högerklicka på den och konfigurera anslutningen:
För att arbeta med tokens anger vi först och främst sökvägen till opensc-motorn för OpenSSL-motorn och PKCS#11-biblioteket. För att göra detta, öppna fliken "Inställningar" för att konfigurera openssl-parametrar:
.
Låt oss stänga fönstret för OpenSSL-inställningar och gå vidare till att ställa in nätverket. Låt oss lägga till ett nytt nätverk genom att klicka på knappen Lägg till... i inställningspanelen och ange nätverksnamnet:
Efter detta kommer detta nätverk att bli tillgängligt i inställningspanelen. Dubbelhögerklicka på det nya nätverket för att konfigurera det. På den första fliken måste du göra IPsec-inställningar. Låt oss ställa in serveradressen och den offentliga nyckeln:
Efter detta, gå till fliken PPP-inställningar och ange där användarnamnet som vi vill komma åt nätverket under:
Efter detta, öppna fliken Egenskaper och ange sökvägen till nyckeln, klientcertifikatet och CA:
Låt oss stänga den här fliken och utföra de slutliga inställningarna; för att göra detta, öppna fliken "IP-inställningar" och markera rutan bredvid alternativet "Erhåll DNS-serveradress automatiskt":
Detta alternativ gör det möjligt för klienten att ta emot en personlig IP-adress inom nätverket från servern.
Efter alla inställningar, stäng alla flikar och starta om klienten:
Nätverksanslutning
Efter inställningarna kan du ansluta till nätverket. För att göra detta, öppna appletfliken och välj nätverket som vi vill ansluta till:
Under etableringsprocessen kommer klienten att be oss ange Rutoken PIN-kod:
Om ett meddelande visas i statusfältet om att anslutningen har upprättats, betyder det att installationen lyckades:
Annars är det värt att ta reda på varför anslutningen inte upprättades. För att göra detta bör du titta på programloggen genom att välja kommandot "Anslutningsinformation" i appleten:
Konfigurera Windows-klienten
Att konfigurera en klient på Windows är mycket enklare än på Linux, eftersom... All nödvändig programvara är redan inbyggd i systemet.
Systeminställningar
Vi kommer att installera alla nödvändiga drivrutiner för att arbeta med Rutokens genom att ladda ner dem från av. webbplats.
Importera ett rotcertifikat för autentisering
Ladda ner serverrotcertifikatet och installera det på systemet. För att göra detta, öppna det och välj alternativet "Installera certifikat" i fönstret som öppnas:
I fönstret som öppnas väljer du att installera ett certifikat för den lokala användaren. Om du vill att certifikatet ska vara tillgängligt för alla användare på datorn, bör du välja att installera certifikatet på den lokala datorn:
Låt oss installera certifikatet i CA:s betrodda rotcertifikatlager:
Efter alla dessa åtgärder håller vi med om alla ytterligare punkter. Systemet är nu konfigurerat.
Konfigurera en VPN-anslutning
För att konfigurera en VPN-anslutning, gå till kontrollpanelen och välj alternativet för att skapa en ny anslutning.
I popup-fönstret väljer du alternativet för att skapa en anslutning för att ansluta till din arbetsplats:
I nästa fönster väljer du en VPN-anslutning:
och ange VPN-anslutningsinformationen och ange även alternativet att använda ett smartkort:
Installationen är inte klar än. Allt som återstår är att ange den delade nyckeln för IPsec-protokollet; för att göra detta, gå till fliken "Inställningar för nätverksanslutning" och gå sedan till fliken "Egenskaper för denna anslutning":
I fönstret som öppnas, gå till fliken "Säkerhet", ange "L2TP/IPsec Network" som nätverkstyp och välj "Avancerade inställningar":
I fönstret som öppnas anger du den delade IPsec-nyckeln:
Подключение
När du har slutfört installationen kan du försöka ansluta till nätverket:
Under anslutningsprocessen kommer vi att behöva ange token-PIN-koden:
Vi har satt upp ett säkert VPN-nätverk och sett till att det inte är svårt.
Kvitteringar
Jag vill än en gång tacka våra kollegor Vasily Shokov och Alexander Smirnov för det arbete de har gjort tillsammans för att förenkla skapandet av VPN-anslutningar för Linux-klienter.