Autentifikavimo nustatymas L2TP tinkle naudojant Rutoken EDS 2.0 ir Rutoken PKI
Problemos
Visai neseniai daugelis nežinojo, ką reiškia dirbti namuose. Pandemija smarkiai pakeitė situaciją pasaulyje, visi pradėjo prisitaikyti prie esamų aplinkybių, būtent prie to, kad išeiti iš namų tapo tiesiog nesaugu. Ir daugelis turėjo greitai organizuoti savo darbuotojams darbą namuose.
Tačiau kompetentingo požiūrio į nuotolinio darbo sprendimų pasirinkimą trūkumas gali sukelti negrįžtamų nuostolių. Vartotojų slaptažodžiai gali būti pavogti, o tai leis užpuolikui nekontroliuojamai prisijungti prie įmonės tinklo ir IT išteklių.
Štai kodėl dabar išaugo poreikis sukurti patikimus įmonių VPN tinklus. papasakosiu apie patikimas, saugu и paprastas naudojant VPN tinklą.
Jis veikia pagal IPsec/L2TP schemą, kuri naudoja neatkuriamus raktus ir sertifikatus, saugomus žetonuose, kad patvirtintų klientų tapatybę, taip pat perduoda duomenis per tinklą šifruota forma.
Serveris su CentOS 7 (adresas: centos.vpn.server.ad) ir klientas su Ubuntu 20.04, taip pat klientas su Windows 10 buvo naudojami kaip demonstraciniai konfigūravimo stendai.
Sistemos aprašymas
VPN veiks pagal IPSec + L2TP + PPP schemą. protokolas Taškas į tašką protokolas (VPP) veikia OSI modelio duomenų ryšio lygmenyje ir užtikrina vartotojo autentifikavimą bei perduodamų duomenų šifravimą. Jo duomenys yra įterpti į L2TP protokolo duomenis, kurie faktiškai užtikrina ryšio VPN tinkle sukūrimą, tačiau neužtikrina autentifikavimo ir šifravimo.
L2TP duomenys yra įterpti į IPSec, kuris taip pat užtikrina autentifikavimą ir šifravimą, tačiau skirtingai nei PPP, autentifikavimas ir šifravimas vyksta įrenginio, o ne vartotojo lygiu.
Ši funkcija leidžia autentifikuoti naudotojus tik iš tam tikrų įrenginių. Naudosime tokį IPSec protokolą, koks jis yra, ir leisime autentifikuoti vartotoją iš bet kurio įrenginio.
Vartotojo autentifikavimas naudojant intelektualiąsias korteles bus atliekamas PPP protokolo lygiu naudojant EAP-TLS protokolą.
Išsamesnę informaciją apie šios grandinės veikimą rasite Šis straipsnis.
Kodėl ši schema atitinka visus tris gero VPN tinklo reikalavimus?
Šios schemos patikimumas buvo patikrintas laiko. Jis naudojamas VPN tinklams diegti nuo 2000 m.
Saugų vartotojo autentifikavimą užtikrina PPP protokolas. Standartinis PPP protokolo įgyvendinimas, kurį sukūrė Paulas Mackerrasas neužtikrina pakankamo saugumo lygio, nes Autentifikavimui geriausiu atveju naudojamas autentifikavimas naudojant prisijungimo vardą ir slaptažodį. Visi žinome, kad prisijungimo slaptažodį galima šnipinėti, atspėti ar pavogti. Tačiau jau ilgą laiką kūrėjas Janas Justas Keijseris в jo įgyvendinimas Šis protokolas ištaisė šią problemą ir pridėjo galimybę autentifikavimui naudoti protokolus, pagrįstus asimetriniu šifravimu, pvz., EAP-TLS. Be to, jis pridėjo galimybę autentifikavimui naudoti intelektualiąsias korteles, todėl sistema tapo saugesnė.
Šiuo metu vyksta aktyvios derybos dėl šių dviejų projektų sujungimo ir galite būti tikri, kad anksčiau ar vėliau tai vis tiek įvyks. Pavyzdžiui, pataisyta PPP versija ilgą laiką buvo Fedora saugyklose, naudojant saugius autentifikavimo protokolus.
Dar visai neseniai šiuo tinklu galėjo naudotis tik „Windows“ vartotojai, tačiau mūsų kolegos iš Maskvos valstybinio universiteto Vasilijus Šokovas ir Aleksandras Smirnovas rado senas L2TP kliento projektas, skirtas Linux ir jį modifikavo. Kartu ištaisėme daug klaidų ir trūkumų kliento darbe, supaprastinome sistemos diegimą ir konfigūravimą, net ir kuriant iš šaltinio. Svarbiausi iš jų yra:
Ištaisytos senojo kliento suderinamumo problemos su naujų openssl ir qt versijų sąsaja.
Pašalintas pppd nuo prieigos rakto PIN perdavimo per laikinąjį failą.
Ištaisytas neteisingas slaptažodžio užklausos programos paleidimas per grafinę sąsają. Tai buvo padaryta įdiegus tinkamą aplinką xl2tpd paslaugai.
L2tpIpsecVpn demono kūrimas dabar atliekamas kartu su paties kliento kūrimu, o tai supaprastina kūrimo ir konfigūravimo procesą.
Kad būtų lengviau kurti, „Azure Pipelines“ sistema yra prijungta, kad būtų patikrintas kūrimo teisingumas.
Pridėta galimybė priverstinai sumažinti versiją saugumo lygis openssl kontekste. Tai naudinga norint tinkamai palaikyti naujas operacines sistemas, kuriose standartinis saugos lygis nustatytas į 2, naudojant VPN tinklus, kurie naudoja sertifikatus, kurie neatitinka šio lygio saugumo reikalavimų. Ši parinktis bus naudinga dirbant su esamais senais VPN tinklais.
Šis klientas palaiko intelektualiųjų kortelių naudojimą autentifikavimui, taip pat kiek įmanoma paslepia visus sunkumus ir sunkumus, susijusius su šios schemos nustatymu Linux sistemoje, todėl kliento sąranka yra kuo paprastesnė ir greitesnė.
Žinoma, norint patogiai sujungti PPP ir kliento GUI, nebuvo įmanoma be papildomų kiekvieno projekto redagavimo, tačiau vis dėlto jie buvo sumažinti ir sumažinti iki minimumo:
Fiksuotas klaida įkeliant konfigūraciją ir inicijuojant openssl kontekstą. Ši klaida neleido įkelti nieko iš vietinio /etc/ppp/openssl.cnf konfigūracijos failo, išskyrus informaciją apie openssl variklius, skirtus darbui su intelektualiosiomis kortelėmis, o tai buvo rimtas nepatogumas, jei, pavyzdžiui, be informacijos apie variklius, norėjome nustatyti kažką kito. Pavyzdžiui, nustatykite saugos lygį kurdami ryšį.
Dabar galite pradėti sąranką.
Serverio derinimas
Įdiegsime visus reikiamus paketus.
„strongswan“ (IPsec) diegimas
Pirmiausia sukonfigūruokite ugniasienę ipsec veikimui
Taip pat nustatysime bendrą prisijungimo slaptažodį. Bendrinamas slaptažodis turi būti žinomas visiems tinklo dalyviams, kad galėtų autentifikuoti. Šis metodas akivaizdžiai nepatikimas, nes šis slaptažodis gali lengvai tapti žinomas asmenims, kuriems nenorime suteikti prieigos prie tinklo.
Tačiau net ir šis faktas neturės įtakos tinklo saugumui, nes Pagrindinis duomenų šifravimas ir vartotojo autentifikavimas atliekamas naudojant PPP protokolą. Tačiau tiesą sakant, verta paminėti, kad „strongswan“ palaiko saugesnes autentifikavimo technologijas, pavyzdžiui, naudojant privačius raktus. Strongswan taip pat turi galimybę užtikrinti autentifikavimą naudojant intelektualiąsias korteles, tačiau kol kas palaikomas tik ribotas įrenginių asortimentas, todėl autentifikavimas naudojant Rutoken žetonus ir intelektualiąsias korteles vis dar yra sudėtingas. Nustatykime bendrą slaptažodį per failą /etc/strongswan/ipsec.secrets:
[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
Išduodame šakninį sertifikatą ir serverio sertifikatą:
#директория с сертификатами пользователей, УЦ и сервера
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
Taigi, mes baigėme pagrindinę serverio sąranką. Likusi serverio konfigūracija apima naujų klientų įtraukimą.
Naujo kliento pridėjimas
Norėdami pridėti naują klientą prie tinklo, turite įtraukti jo sertifikatą į patikimų šio kliento sąrašą.
Jei vartotojas nori tapti VPN tinklo nariu, jis sukuria šio kliento raktų porą ir sertifikato programą. Jei vartotojas pasitiki, šią programą galima pasirašyti, o gautą sertifikatą įrašyti į sertifikatų katalogą:
PASTABA
Siekiant išvengti painiavos, geriau, kad: Bendrasis pavadinimas, sertifikato failo pavadinimas ir vartotojo vardas būtų unikalūs.
Taip pat verta patikrinti, ar mūsų pridedamo vartotojo vardas niekur nepasirodo kituose autentifikavimo failuose, kitaip kils problemų dėl vartotojo tapatybės nustatymo.
Tas pats sertifikatas turi būti išsiųstas atgal vartotojui.
Raktų poros ir sertifikato generavimas
Kad autentifikavimas būtų sėkmingas, klientas turi:
generuoti raktų porą;
turėti CA šakninį sertifikatą;
turėti raktų poros sertifikatą, pasirašytą šakninės CA.
„Linux“ klientui
Pirmiausia sugeneruokime raktų porą žetonu ir sukurkime sertifikato programą:
„Windows“ ir „Linux“ klientams (universalesnis metodas)
Šis metodas yra universalesnis, nes leidžia sugeneruoti raktą ir sertifikatą, kuriuos sėkmingai atpažins „Windows“ ir „Linux“ vartotojai, tačiau norint atlikti rakto generavimo procedūrą, reikalingas „Windows“ įrenginys.
Prieš generuodami užklausas ir importuodami sertifikatus, VPN tinklo šakninį sertifikatą turite įtraukti į patikimų sąrašą. Norėdami tai padaryti, atidarykite jį ir atsidariusiame lange pasirinkite parinktį „Įdiegti sertifikatą“:
Atsidariusiame lange pasirinkite įdiegti sertifikatą vietiniam vartotojui:
Įdiegkime sertifikatą CA patikimoje šakninėje sertifikatų saugykloje:
Po visų šių veiksmų sutinkame su visais tolesniais punktais. Dabar sistema sukonfigūruota.
Po to sugeneruosime raktų porą ir sukursime sertifikato programą. Norėdami tai padaryti, atidarykite „Powershell“ ir įveskite šią komandą:
certreq.exe -new -pin $PIN .cert.tmp .client.req
Išsiųskite sukurtą programą client.req į savo CA ir palaukite, kol bus gautas client.pem sertifikatas. Jį galima įrašyti į prieigos raktą ir įtraukti į „Windows“ sertifikatų saugyklą naudojant šią komandą:
certreq.exe -accept .client.pem
Verta paminėti, kad panašius veiksmus galima atkurti naudojant grafinę mmc programos sąsają, tačiau šis metodas užima daugiau laiko ir yra mažiau programuojamas.
Ubuntu kliento nustatymas
PASTABA
Kliento nustatymas Linux sistemoje šiuo metu užima gana daug laiko, nes... reikia kurti atskiras programas iš šaltinio. Stengsimės užtikrinti, kad artimiausiu metu visi pakeitimai būtų įtraukti į oficialias saugyklas.
Norint užtikrinti ryšį IPSec lygiu su serveriu, naudojamas strongswan paketas ir xl2tp demonas. Norėdami supaprastinti prisijungimą prie tinklo naudojant intelektualiąsias korteles, naudosime l2tp-ipsec-vpn paketą, kuriame pateikiamas grafinis apvalkalas, skirtas supaprastinti ryšio sąranką.
Pradėkime elementų surinkimą žingsnis po žingsnio, bet prieš tai įdiegsime visus reikiamus paketus, kad VPN veiktų tiesiogiai:
sudo apt-get install xl2tpd strongswan libp11-3
Programinės įrangos darbui su žetonais diegimas
Įdiekite naujausią librtpkcs11ecp.so biblioteką iš svetainė, taip pat bibliotekos, skirtos darbui su intelektualiosiomis kortelėmis:
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
L2tpIpsecVpn kliento diegimas
Šiuo metu klientą taip pat reikia sukompiliuoti iš šaltinio kodo. Tai atliekama naudojant šią komandų seką:
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
L2tpIpsecVpn kliento nustatymas
Paleiskite įdiegtą klientą:
Po paleidimo turėtų atsidaryti programėlė L2tpIpsecVPN. Dešiniuoju pelės mygtuku spustelėkite jį ir sukonfigūruokite ryšį:
Norėdami dirbti su žetonais, pirmiausia nurodome kelią į OpenSSL variklio ir PKCS#11 bibliotekos opensc variklį. Norėdami tai padaryti, atidarykite skirtuką „Nuostatos“, kad sukonfigūruotumėte openssl parametrus:
.
Uždarykite OpenSSL nustatymų langą ir pereikime prie tinklo nustatymo. Pridėkite naują tinklą nustatymų skydelyje spustelėdami mygtuką Pridėti... ir įveskite tinklo pavadinimą:
Po to šis tinklas taps pasiekiamas nustatymų skydelyje. Dukart dešiniuoju pelės mygtuku spustelėkite naują tinklą, kad jį sukonfigūruotumėte. Pirmame skirtuke turite nustatyti IPsec nustatymus. Nustatykime serverio adresą ir viešąjį raktą:
Po to eikite į PPP nustatymų skirtuką ir nurodykite vartotojo vardą, kuriuo norime prisijungti prie tinklo:
Po to atidarykite skirtuką Ypatybės ir nurodykite kelią į raktą, kliento sertifikatą ir CA:
Uždarykite šį skirtuką ir atlikite galutinius nustatymus; norėdami tai padaryti, atidarykite skirtuką „IP nustatymai“ ir pažymėkite langelį šalia parinkties „Gauti DNS serverio adresą automatiškai“:
Ši parinktis leis klientui gauti asmeninį IP adresą tinkle iš serverio.
Atlikę visus nustatymus, uždarykite visus skirtukus ir iš naujo paleiskite klientą:
Tinklo ryšys
Atlikę nustatymus, galite prisijungti prie tinklo. Norėdami tai padaryti, atidarykite programėlės skirtuką ir pasirinkite tinklą, prie kurio norime prisijungti:
Ryšio užmezgimo metu klientas paprašys įvesti Rutoken PIN kodą:
Jei būsenos juostoje pasirodo pranešimas, kad ryšys sėkmingai užmegztas, tai reiškia, kad sąranka buvo sėkminga:
Priešingu atveju verta išsiaiškinti, kodėl ryšys nebuvo užmegztas. Norėdami tai padaryti, turėtumėte pažvelgti į programos žurnalą, programėlėje pasirinkę komandą "Connection information":
„Windows“ kliento nustatymas
Nustatyti klientą „Windows“ sistemoje yra daug lengviau nei „Linux“, nes... Visa reikalinga programinė įranga jau įdiegta sistemoje.
Sistemos sąranka
Įdiegsime visas darbui su Rutokens reikalingas tvarkykles atsisiųsdami iš apie. svetainę.
Atsisiųskite serverio šakninį sertifikatą ir įdiekite jį sistemoje. Norėdami tai padaryti, atidarykite jį ir atsidariusiame lange pasirinkite parinktį „Įdiegti sertifikatą“:
Atsidariusiame lange pasirinkite įdiegti sertifikatą vietiniam vartotojui. Jei norite, kad sertifikatas būtų prieinamas visiems kompiuterio vartotojams, turėtumėte pasirinkti įdiegti sertifikatą vietiniame kompiuteryje:
Įdiegkime sertifikatą CA patikimoje šakninėje sertifikatų saugykloje:
Po visų šių veiksmų sutinkame su visais tolesniais punktais. Dabar sistema sukonfigūruota.
VPN ryšio nustatymas
Norėdami nustatyti VPN ryšį, eikite į valdymo skydelį ir pasirinkite parinktį sukurti naują ryšį.
Iššokančiajame lange pasirinkite parinktį sukurti ryšį, kad galėtumėte prisijungti prie savo darbo vietos:
Kitame lange pasirinkite VPN ryšį:
ir įveskite VPN ryšio duomenis, taip pat nurodykite parinktį naudoti intelektualiąją kortelę:
Sąranka dar nebaigta. Belieka nurodyti bendrinamą IPsec protokolo raktą; norėdami tai padaryti, eikite į skirtuką „Tinklo ryšio nustatymai“, tada eikite į skirtuką „Šio ryšio ypatybės“:
Atsidariusiame lange eikite į skirtuką „Sauga“, kaip tinklo tipą nurodykite „L2TP/IPsec Network“ ir pasirinkite „Advanced Settings“:
Atsidariusiame lange nurodykite bendrinamą IPsec raktą:
ryšys
Baigę sąranką galite pabandyti prisijungti prie tinklo:
Prisijungimo proceso metu turėsime įvesti žetono PIN kodą:
Sukūrėme saugų VPN tinklą ir įsitikinome, kad tai nėra sunku.
Padėkos
Norėčiau dar kartą padėkoti mūsų kolegoms Vasilijui Šokovui ir Aleksandrui Smirnovui už darbą, kurį jie kartu atliko supaprastinant VPN jungčių kūrimą Linux klientams.