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.

Ställa in autentisering i L2TP-nätverket med Rutoken EDS 2.0 och Rutoken PKI

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?

  1. Tillförlitligheten av detta schema har testats med tiden. Det har använts för att distribuera VPN-nätverk sedan 2000.
  2. 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.
  3. 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 korrigerade versionen finns i detta förråd.

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:

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

sudo firewall-cmd --permanent --add-port=1701/{tcp,udp}
sudo firewall-cmd --permanent --add-service=ipsec
sudo firewall-cmd --reload

Låt oss sedan börja installationen

sudo yum install epel-release ipsec-tools dnf
sudo dnf install strongswan

Efter installationen måste du konfigurera strongswan (en av IPSec-implementeringarna). För att göra detta, redigera filen /etc/strongswan/ipsec.conf :

config setup
    nat_traversal=yes
    virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12
    oe=off
    protostack=netkey 

conn L2TP-PSK-NAT
    rightsubnet=vhost:%priv
    also=L2TP-PSK-noNAT

conn L2TP-PSK-noNAT
    authby=secret
    pfs=no
    auto=add
    keyingtries=3
    rekey=no
    ikelifetime=8h
    keylife=1h
    type=transport
    left=%any
    leftprotoport=udp/1701
    right=%any
    rightprotoport=udp/%any
    ike=aes128-sha1-modp1536,aes128-sha1-modp1024,aes128-md5-modp1536,aes128-md5-modp1024,3des-sha1-modp1536,3des-sha1-modp1024,3des-md5-modp1536,3des-md5-modp1024
    esp=aes128-sha1-modp1536,aes128-sha1-modp1024,aes128-md5-modp1536,aes128-md5-modp1024,3des-sha1-modp1536,3des-sha1-modp1024,3des-md5-modp1536,3des-md5-modp1024

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:

# ipsec.secrets - strongSwan IPsec secrets file
%any %any : PSK "SECRET_PASSPHRASE"

Låt oss starta om strongswan:

sudo systemctl enable strongswan
sudo systemctl restart strongswan

Installerar xl2tp

sudo dnf install xl2tpd

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

Låt oss starta om tjänsten:

sudo systemctl enable xl2tpd
sudo systemctl restart xl2tpd

PPP-inställning

Det är tillrådligt att installera den senaste versionen av pppd. För att göra detta, kör följande kommandosekvens:

sudo yum install git make gcc openssl-devel
git clone "https://github.com/jjkeijser/ppp"
cd ppp
./configure --prefix /usr
make -j4
sudo make install

Skriv till fil /etc/ppp/options.xl2tpd följande (om det finns några värden där kan du ta bort dem):

ipcp-accept-local
ipcp-accept-remote
ms-dns 8.8.8.8
ms-dns 1.1.1.1

noccp
auth
crtscts
idle 1800
mtu 1410
mru 1410
nodefaultroute
debug
lock
proxyarp
connect-delay 5000

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:

sudo openssl x509 -req -in client.req -CAkey /etc/ppp/keys/ca.pem -CA /etc/ppp/certs/ca.pem -out /etc/ppp/certs/client.pem -CAcreateserial

Låt oss lägga till en rad i filen /etc/ppp/eaptls-server för att matcha klientnamnet och dess certifikat:

"client" * /etc/ppp/certs/client.pem /etc/ppp/certs/server.pem /etc/ppp/certs/ca.pem /etc/ppp/keys/server.pem *

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:

  1. generera ett nyckelpar;
  2. har ett CA-rotcertifikat;
  3. 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:

#идентификатор ключа (параметр --id) можно заменить на любой другой.
pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --keypairgen --key-type rsa:2048 -l --id 45

openssl
OpenSSL> engine dynamic -pre SO_PATH:/usr/lib/x86_64-linux-gnu/engines-1.1/pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:librtpkcs11ecp.so
...
OpenSSL> req -engine pkcs11 -new -key 45 -keyform engine -out client.req -subj "/C=RU/CN=client"

Skicka programmet client.req som visas till CA. När du har fått ett certifikat för ditt nyckelpar, skriv det till en token med samma id som nyckeln:

pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -l -y cert -w ./client.pem --id  45

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:

Ställa in autentisering i L2TP-nätverket med Rutoken EDS 2.0 och Rutoken PKI

I fönstret som öppnas väljer du att installera ett certifikat för den lokala användaren:

Ställa in autentisering i L2TP-nätverket med Rutoken EDS 2.0 och Rutoken PKI

Låt oss installera certifikatet i CA:s betrodda rotcertifikatlager:

Ställa in autentisering i L2TP-nätverket med Rutoken EDS 2.0 och Rutoken PKI

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:

[NewRequest]
Subject = "CN=client"
KeyLength = 2048
KeySpec = "AT_KEYEXCHANGE" 
ProviderName = "Microsoft Base Smart Card Crypto Provider"
KeyUsage = "CERT_KEY_ENCIPHERMENT_KEY_USAGE"
KeyUsageProperty = "NCRYPT_ALLOW_DECRYPT_FLAG"
RequestType = PKCS10
SMIME = FALSE

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 install pcscd pcsc-tools opensc libengine-pkcs11-openssl

Anslut Rutoken och kontrollera att det känns igen av systemet:

pkcs11-tool --module /usr/lib/librtpkcs11ecp.so  -O -l

Installerar patchad ppp

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:

Ställa in autentisering i L2TP-nätverket med Rutoken EDS 2.0 och Rutoken PKI

Efter lansering bör L2tpIpsecVPN-appleten öppnas. Högerklicka på den och konfigurera anslutningen:

Ställa in autentisering i L2TP-nätverket med Rutoken EDS 2.0 och Rutoken PKI

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:

Ställa in autentisering i L2TP-nätverket med Rutoken EDS 2.0 och Rutoken PKI.

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:

Ställa in autentisering i L2TP-nätverket med Rutoken EDS 2.0 och Rutoken PKI

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:

Ställa in autentisering i L2TP-nätverket med Rutoken EDS 2.0 och Rutoken PKI

Efter detta, gå till fliken PPP-inställningar och ange där användarnamnet som vi vill komma åt nätverket under:

Ställa in autentisering i L2TP-nätverket med Rutoken EDS 2.0 och Rutoken PKI

Efter detta, öppna fliken Egenskaper och ange sökvägen till nyckeln, klientcertifikatet och CA:
Ställa in autentisering i L2TP-nätverket med Rutoken EDS 2.0 och Rutoken PKI

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":

Ställa in autentisering i L2TP-nätverket med Rutoken EDS 2.0 och Rutoken PKI
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:

Ställa in autentisering i L2TP-nätverket med Rutoken EDS 2.0 och Rutoken PKI

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:

Ställa in autentisering i L2TP-nätverket med Rutoken EDS 2.0 och Rutoken PKI

Under etableringsprocessen kommer klienten att be oss ange Rutoken PIN-kod:

Ställa in autentisering i L2TP-nätverket med Rutoken EDS 2.0 och Rutoken PKI

Om ett meddelande visas i statusfältet om att anslutningen har upprättats, betyder det att installationen lyckades:

Ställa in autentisering i L2TP-nätverket med Rutoken EDS 2.0 och Rutoken PKI

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:

Ställa in autentisering i L2TP-nätverket med Rutoken EDS 2.0 och Rutoken PKI

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:

Ställa in autentisering i L2TP-nätverket med Rutoken EDS 2.0 och Rutoken PKI

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:

Ställa in autentisering i L2TP-nätverket med Rutoken EDS 2.0 och Rutoken PKI

Låt oss installera certifikatet i CA:s betrodda rotcertifikatlager:

Ställa in autentisering i L2TP-nätverket med Rutoken EDS 2.0 och Rutoken PKI

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.

Ställa in autentisering i L2TP-nätverket med Rutoken EDS 2.0 och Rutoken PKI

I popup-fönstret väljer du alternativet för att skapa en anslutning för att ansluta till din arbetsplats:

Ställa in autentisering i L2TP-nätverket med Rutoken EDS 2.0 och Rutoken PKI

I nästa fönster väljer du en VPN-anslutning:

Ställa in autentisering i L2TP-nätverket med Rutoken EDS 2.0 och Rutoken PKI

och ange VPN-anslutningsinformationen och ange även alternativet att använda ett smartkort:

Ställa in autentisering i L2TP-nätverket med Rutoken EDS 2.0 och Rutoken PKI

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":

Ställa in autentisering i L2TP-nätverket med Rutoken EDS 2.0 och Rutoken PKI

I fönstret som öppnas, gå till fliken "Säkerhet", ange "L2TP/IPsec Network" som nätverkstyp och välj "Avancerade inställningar":

Ställa in autentisering i L2TP-nätverket med Rutoken EDS 2.0 och Rutoken PKI

I fönstret som öppnas anger du den delade IPsec-nyckeln:
Ställa in autentisering i L2TP-nätverket med Rutoken EDS 2.0 och Rutoken PKI

Подключение

När du har slutfört installationen kan du försöka ansluta till nätverket:

Ställa in autentisering i L2TP-nätverket med Rutoken EDS 2.0 och Rutoken PKI

Under anslutningsprocessen kommer vi att behöva ange token-PIN-koden:

Ställa in autentisering i L2TP-nätverket med Rutoken EDS 2.0 och Rutoken PKI

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.

Källa: will.com

Lägg en kommentar