
Problemaatika
Veel hiljuti ei teadnud paljud, kuidas on töötada kodust. Pandeemia muutis olukorda maailmas dramaatiliselt, kõik hakkasid kohanema tekkinud asjaoludega, sealhulgas sellega, et kodust välja minek ei olnud enam lihtsalt ohutu. Paljud pidid kiiresti korraldama oma töötajate kodust töötamise.
Siiski, vale lähenemine kodutöö lahenduste valikule võib viia pöördumatute kaotusteni. Kasutajate paroolid võivad olla varastatud, mis annab kurjategijatele võimaluse kontrollimatult ühendada ettevõtte võrku ja IT-ressurssidesse.
Just seetõttu on praegu suurenenud vajadus usaldusväärsete ettevõtte VPN-võrkude loomise järele. Räägin teile usaldusväärsest, ohutust ja lihtsast kasutamiseks VPN-võrgust.
See töötab IPsec/L2TP skeemi alusel, kasutades kasutajate autentimiseks kätte mitte saadud võti ja sertifikaate, mis on salvestatud tokenites, ning edastab andmeid võrgus krüpteeritud kujul.
Demostendide seadistamiseks kasutati CentOS 7 serverit (aadress: centos.vpn.server.ad) ja Ubuntu 20.04 kliendi, samuti Windows 10 klienti.
Süsteemi kirjeldus
VPN töötab IPSec + L2TP + PPP skeemi alusel. Protokoll Point-to-Point Protocol (PPP) töötab OSI mudeli kanalitasandil ja tagab kasutajate autentimise ning edastatavate andmete krüpteerimise. Selle andmed kapseldatakse L2TP protokolli andmetesse, mis tagab VPN-võrgus ühenduse loomise, kuid mitte autentimise ja krüpteerimise.
L2TP andmed kapseldatakse IPSec protokolli, mis samuti tagab autentimise ja krüpteerimise, kuid erinevalt PPP protokollist toimub autentimine ja krüpteerimine seadmete tasandil, mitte kasutajate tasandil.
See omadus tagab, et autentimine on võimalik teatud seadmetelt. Me aga kasutame IPSec protokolli antud juhul ja lubame autentida kasutajaid mis tahes seadmest.

Kasutaja autentimine nutikaartide abil toimub PPP protokolli tasandil EAP-TLS protokolli kaudu.
Üksikasjalikku teavet selle skeemi töö kohta leiate .
Miks see skeem vastab kõigile kolmele hea VPN-võrgu nõudmisele
- Selle skeemi usaldusväärsust on ajaga tõestatud. Seda on kasutatud VPN-võrkude seadistamiseks alates 2000. aastast.
- Kasutaja turvalise autentimise tagab protokoll PPP. ei paku piisavat turvalisuse taset, kuna autentimiseks kasutatakse parimal juhul sisselogimisnime ja parooli. Me kõik teame, et sisselogimisnime ja parooli võib pealt kuulata, välja nuhkida või varastada. Sellegipoolest on arendaja ja korrigeerinud seda probleemi ja lisanud võimaluse kasutada autentimiseks asümmeetrilise krüpteerimise protokolle, nagu EAP-TLS. Lisaks on ta lisanud võimaluse kasutada autentimiseks nutikaarte, mis on teinud selle süsteemi turvalisemaks.
Praegusel hetkel käivad aktiivsed läbirääkimised nende kahe projekti ühendamiseks ja võib olla kindel, et varem või hiljem toimub see kindlasti. Näiteks on Fedora hoidistes juba ammu saadaval patšitud versioon PPP, mis kasutab autentimiseks turvalisi protokolle. - Veel hiljuti said seda võrku kasutada ainult Windowsi kasutajad, kuid meie kolleegid MGU-st Vasili Shokov ja Aleksandr Smirnov leidsid ja töötasid selle kallal edasi. Koostöös parandasime palju tõrkeid ja puuduseid kliendi töös, lihtsustasime süsteemi installimist ja seadistamist, isegi allika koodist kogumise korral. Kõige olulisemad neist on:
- Parandatud on vana kliendi ühilduvuse probleemid uusimate versioonide openssl ja qt liideseid.
- Eemaldatud on pppd PIN-koodi edastamine tokeni kaudu ajutises failis.
- Parandatud on programmi parooli pärimise vale käivitus graafilise liidese kaudu. See saavutati xl2tpd teenuse jaoks õige keskkonna seadistamise abil.
- L2tpIpsecVpn deemon kompileerimine toimub nüüd koos kliendi enda kompileerimisega, mis lihtsustab kompileerimise ja seadistamise protsessi.
- Arenduse mugavuse huvides on lisatud Azure Pipelines süsteem, et testida kompileerimise õigsust.
- Lisatud on võimalus sunniviisiliselt alandada openssl kontekstis. See on kasulik uute operatsioonisüsteemide korrektseks toetamiseks, kus standardne turvataseme tase on seatud 2, VPN võrkudes, kus kasutatakse sertifikaate, mis ei vasta selle taseme turvanõuetele. See valik on kasulik olemasolevate vanade VPN võrkudega töötamiseks.
Parandatud versiooni leiab .
See klient toetab nutikaartide kasutamist autentimiseks ja peidab maksimaalselt kõik vaevad ja raskused selle skeemi seadistamisel Linuxis, muutes kliendi seadistamise võimalikult lihtsaks ja kiireks.
Muidugi ei saanud PPP ja kliendi GUI vahelise mugava suhtluse jaoks ilma iga projekti täiendavate parandusteta hakkama, kuid nende arv õnnestus siiski minimeerida:
- Parandatud
- Parandatud . See tõrge takistas kohalikust /etc/ppp/openssl.cnf konfiguratsioonifailist laadimist midagi peale openssl mootoreid nutikaartide jaoks, mis tekitas tõsiseid ebamugavusi, kui soovisime näiteks panna midagi muud peale teabe mootoritest. Näiteks määrata turvataseme ühenduse loomisel.
Nüüd saab alustada seadistamist.
Serveri seadistamine
Installime kõik vajalikud paketid.
strongswan (IPsec) paigaldamine
Esiteks seadistame tulemüüri ipsec-i tööks
sudo firewall-cmd --permanent --add-port=1701/{tcp,udp}
sudo firewall-cmd --permanent --add-service=ipsec
sudo firewall-cmd --reloadSeejärel alustame paigaldamist
sudo yum install epel-release ipsec-tools dnf
sudo dnf install strongswanPärast installimist tuleb määrata strongswan konfiguratsioon (üks IPSec'i teostusi). Selleks toimetame faili /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-modp1024Samuti seadistame üldise salajase sõna sisselogimiseks. Ühine salasõna peab olema kõigile võrgu osalejatele teada autentimiseks. See meetod on eelnevalt ebausaldusväärne, kuna see salasõna võib kergesti sattuda isikute kätte, kellele me ei soovi võrku juurdepääsu anda.
Kuid isegi see fakt ei mõjuta võrgu organisatsiooni turvalisust, kuna andmete peamine krüpteerimine ja kasutajate autentimine toimub PPP protokolli kaudu. Küll aga tasub märkimisväärselt märkida, et strongswan toetab turvalisemaid autentimistehnoloogiaid, näiteks privaatsete võtmetega. Samuti on strongswanil võimalus toetada autentimist nutikaarte kasutades, kuid praegu toetatakse piiratud hulka seadmeid ning seetõttu on autentimine Rútokeni tokenite ja nutikaarte kasutades keeruline. Seadistame üldise salasõna faili kaudu. /etc/strongswan/ipsec.secrets:
# ipsec.secrets - strongSwan IPsec secrets file
%any %any : PSK "SECRET_PASSPHRASE"Taaskäivitame strongswan:
sudo systemctl enable strongswan
sudo systemctl restart strongswanxl2tp installimine
sudo dnf install xl2tpdKonfigureerime selle faili kaudu /etc/xl2tpd/xl2tpd.conf:
[global]
force userspace = yes
listen-addr = 0.0.0.0
ipsec saref = yes
[lns default]
exclusive = no
; määrab virtuaalvõrgus serveri staatilise aadressi
local ip = 100.10.10.1
; määrab virtuaalsete aadresside vahemiku
ip range = 100.10.10.1-100.10.10.254
assign ip = yes
refuse pap = yes
require authentication = yes
; seda valikut saab pärast võrgu edukat seadistamist välja lülitada
ppp debug = yes
length bit = yes
pppoptfile = /etc/ppp/options.xl2tpd
; määrab võrgu serveri aadressi
name = centos.vpn.server.adTaaskäivitame teenuse:
sudo systemctl enable xl2tpd
sudo systemctl restart xl2tpdPPP seadistamine
Soovitatav on paigaldada pppd uusim versioon. Selleks täidame järgmised käskude järjekorrad:
sudo yum install git make gcc openssl-devel
git clone "https://github.com/jjkeijser/ppp"
cd ppp
./configure --prefix /usr
make -j4
sudo make installSisestage faili /etc/ppp/options.xl2tpd järgmine (kui seal on mingid väärtused, siis need saab eemaldada):
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 5000Kandke välja juursertifikaat ja serveri sertifikaat:
#директория с сертификатами пользователей, УЦ и сервера
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 -CAcreateserialNii oleme lõpetanud serveri põhiseadistusega. Ülejäänud osa serveri konfiguratsioonist on seotud uute klientide lisamisega.
Uue kliendi lisamine
Uue kliendi võrku lisamiseks tuleb registreerida tema sertifikaat selle kliendi usaldusväärsete sertifikaatide nimekirja.
Kui kasutaja soovib saada VPN-võrgu liikmeks, loob ta võtmete paari ja sertifikaadi taotluse antud kliendi jaoks. Kui kasutaja on usaldusväärne, saab taotluse allkirjastada ja saadud sertifikaadi salvestada sertifikaatide kausta:
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 -CAcreateserialLisame rea faili /etc/ppp/eaptls-server, et seostada kliendi nimi ja tema sertifikaat:
"client" * /etc/ppp/certs/client.pem /etc/ppp/certs/server.pem /etc/ppp/certs/ca.pem /etc/ppp/keys/server.pem *MÄRKUS
Selleks, et mitte segadusse minna, on parem, kui: Ühine nimi, sertifikaadi faili nimi ja kasutajanimi on unikaalsed.
Samuti tasub kontrollida, et teistes autentimistfailides ei figureeriks ega oleks kasutajanime, mida me lisame, vastasel juhul võivad ilmneda probleemid kasutaja autentimise meetodiga.
Sama sertifikaat tuleb kasutajale tagasi saata.
Võtme paari ja sertifikaadi genereerimine
Selleks, et autentimine oleks edukas, peab kliendil olema:
- võtme paar genereeritud;
- olema juursertifikaat CA-lt;
- olema sertifikaat oma võtme paari jaoks, mis on allkirjastatud juur-CA poolt.
Linuxi klientidele
Alustuseks genereerime võtme paari tokenil ja loome sertifikaadi taotluse:
#идентификатор ключа (параметр --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"Saadetage ilmunud taotlus client.req CA-le. Pärast seda, kui olete saanud oma võtme paarile sertifikaadi, salvestage see tokenile sama ID-ga, mis võtmel:
pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -l -y cert -w ./client.pem --id 45Windowsi ja Linuxi klientide jaoks (üldisem meetod)
See meetod on üldisem, kuna võimaldab genereerida võtme ja sertifikaadi, mida saab edukalt tuvastada Windowsi ja Linuxi kasutajate jaoks, kuid see nõuab Windowsi masinat võtmete genereerimise protseduuri läbiviimiseks.
Enne taotluste genereerimist ja sertifikaatide importimist tuleb lisada VPN-võrgu juursertifikaat usaldatute nimekirja. Selleks avame selle ja avanevas aknas valime valiku "Installige sertifikaat":

Avanevas aknas valime sertifikaadi installimise kohaliku kasutaja jaoks:

Installeerime sertifikaadi usaldatute juur-sertifikaatide hoidla CA-s:

Pärast kõiki neid toiminguid nõustume kõigi edasiste punktidega. Nüüd on süsteem seadistatud.
Loome faili cert.tmp järgmise sisuga:
[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 = FALSEPärast seda genereerime võtme paari ja loobime sertifikaadi taotle. Selleks avame PowerShelli ja sisestame järgmise käsu:
certreq.exe -new -pin $PIN .cert.tmp .client.reqSaatke loodud taotlus client.req oma RC-le ja oodake sertifikaadi client.pem saamist. Selle saab salvestada tokenile ja lisada Windowsi sertifikaatide salve järgmise käsu abil:
certreq.exe -accept .client.pemOluline on märkida, et sarnaseid toiminguid saab teha ka mmc graafilise liidese abil, kuid see meetod on ajakulukam ja vähem programmeeritav.
Ubuntu kliendi seadistamine
MÄRKUS
Linuxi kliendi seadistamine on hetkel piisavalt ajakulukas, kuna see nõuab eraldi programmide allalaadimist allika koodist. Püüame varsti saavutada, et kõik muudatused jõuaksid ametlikesse hoidlastesse.
IPSec tasemel serveriga ühenduse tagamiseks kasutatakse paketti strongswan ja deemonit xl2tp. Ühenduse lihtsustamiseks nutikaardiga – kasutame paketti l2tp-ipsec-vpn, mis pakub graafilist liidest lihtsustatud seadistamiseks.
Alustame elementide kogumist samm-sammult, kuid enne seda installime kõik vajalikud paketid VPNi tööks:
sudo apt-get install xl2tpd strongswan libp11-3Tarkvara installimine tokenite töötamiseks
Installige uusim versioon teegist librtpkcs11ecp.so , samuti teegid nutikaardiga töötamiseks:
sudo apt-get install pcscd pcsc-tools opensc libengine-pkcs11-opensslÜhendage RuToken ja kontrollige, et see süsteemi poolt tunnustatakse:
pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -O -lPatchingutatud ppp installimine
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 installL2tpIpsecVpn kliendi installimine
Praegu tuleb klient samuti allika koodist üles ehitada. Seda teostatakse järgmise käskude järjekorra abil:
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 installL2tpIpsecVpn kliendi seadistamine
Käivitame installitud kliendi:

Pärast käivitamist peaks avanema L2tpIpsecVPN applet. Klõpsame sellega hiire parema nuppu ja teeme ühenduse seadistuse:

Tokenite haldamiseks määrame esmalt OpenSSL ja PKCS#11 teegi opensc tee. Selleks avame vahekaart "Preferences" OpenSSL seadete kohandamiseks:
.
Sulgeme OpenSSL seadete akna ja liigume võrgu seadistamise juurde. Lisame uue võrgu, klõpsates seadete paneelil nuppu Add… ja sisestame võrgu nime:

Pärast seda on see võrk seadete paneelis saadaval. Topeltklõpsame parema hiireklõpsuga uuel võrgul, et seda seadistada. Esimesel vahekaardil peame tegema IPsec seadistused. Määrame serveri aadressi ja jagamise võtme:

Seejärel liigutame PPP seadistuste vahekaardile ja määrame seal kasutajanime, millega soovime võrku siseneda:

Pärast seda avame vahekaardi Properties ja määrame teed võtme, kliendi sertifikaadi ja CA juurde:

Sulgeme selle vahekaardi ja teeme lõplikud seadistused, avades vahekaardi "IP settings" ja märkides ruudu valiku "Obtain DNS server address automatically":

See valik võimaldab kliendil saada serverilt privaatse IP-aadressi võrgu sees.
Pärast kõiki seadistusi sulgeme kõik vahekaardid ja taaskäivitame kliendi:

Ühendamine võrku
Seadistuste järel saab võrku ühenduse luua. Selleks avame appleti vahekaardi ja valime võrgu, millega soovime ühendada:

Ühenduse loomise protsessis palub klient sisestada RutoTokeni PIN-koodi:

Kui staatuste ribal ilmub teade, et ühendus on edukalt loodud, siis tähendab, et seadistus õnnestus:

Vastasel juhul tasub välja selgitada, miks ühendust ei suudeta luua. Selleks tasub vaadata programmi logi, valides appletis käsu "Connection information":

Windowsi kliendi seadistamine
Windowsis kliendi seadistamine on palju lihtsam kui Linuxis, kuna kogu vajalik tarkvara on juba süsteemi sisse ehitatud.
Süsteemi seadistamine
Paigaldame kõik vajalikud draiverid RutoTokenide töötamiseks, laadides need alla .
Juurtõendi import autentimise jaoks
Laadime alla serveri juurtõendi ja paigaldame selle süsteemi. Selleks avame selle ja valime avanenud aknas valiku "Install Certificate":

Avanenud aknas valime sertifikaadi installimise kohaliku kasutaja jaoks. Kui soovite, et sertifikaat oleks kättesaadav kõigile arvuti kasutajatele, siis tuleks valida sertifikaadi installimine kohaliku arvuti jaoks:

Installeerime sertifikaadi usaldatute juur-sertifikaatide hoidla CA-s:

Pärast kõiki neid toiminguid nõustume kõigi edasiste punktidega. Nüüd on süsteem seadistatud.
VPN-ühenduse seadistamine
VPN-ühenduse seadistamiseks minge juhtpaneeli ja valige valik uue ühenduse loomiseks.

Kontekstimenüüs valige valik ühenduse loomiseks, et ühendada töökohaga:

Järgmises aknas valige ühendus VPN-i kaudu:

ja sisestage VPN-ühenduse andmed ning valige ka valik nutikaardi kasutamiseks:

Selle seadistusega ei ole veel kõik korras. Tuleb sisestada ühine võti IPsec protokolli jaoks, selle jaoks liikuge vahekaardile "Võrguteenuste seadistamine" ja seejärel vahekaardile "Antud ühenduse omadused":

Avanenud aknas liikuge vahekaardile "Turvalisus", seadistage võrgu tüübiks "L2TP/IPsec" ja valige "Lisaseaded":

Avanenud aknas sisestage IPsec-i ühine võti:

Ühendamine
Seadistamise lõpetamisel proovige ühendada võrku:

Ühendamise käigus palutakse meil sisestada tokeni PIN-kood:

Oleme seadistanud turvalise VPN-võrgu ja veendunud, et see ei ole keeruline.
Tänud
Sooviksin veel kord tänada meie kolleege Vasili Šokovit ja Aleksandr Smirnovit ühiselt tehtud töö eest, et lihtsustada VPN-ühenduste loomist Linuxi klientidele.
Allikas: habr.com
