
Probleemistik
Veel hiljuti ei teadnud paljud, mis tunne on töötada kodus. Pandeemia muutis olukorda maailmas dramaatiliselt, kõik hakkasid olukorraga kohanema, nimelt selle saavutamisest, et kodust väljumine oli lihtsalt ohtlik. Paljud pidid oma töötajatele kiiresti kodus töötamise korraldama.
Kuid valede lahenduste valimise puudumine kaugtöös võib viia pöördumatute kahjudeni. Kasutajate paroolid võivad olla varastatud, mis võimaldab kurjategijal piiramatult ühenduda ettevõtte võrgu ja IT-resurssidega.
Just seetõttu on praegu tõusnud nõudlus usaldusväärsete ettevõtte VPN-võrkude loomise järele. Räägin teile usaldusväärsest, turvalisest ja lihtsast kasutamiseks mõeldud VPN-võrgust.
See töötab IPsec/L2TP skeemi alusel, mis kasutab klientide autentimiseks kätte saamata võtmeid ja sertifikaate, mis on salvestatud tokenitesse, ning edastab andmeid võrgu kaudu krüpteeritud kujul.
Demonstratsioonivahendite seadistamiseks kasutati CentOS 7 serverit (aadress: centos.vpn.server.ad) ning Ubuntu 20.04 ja Windows 10 kliendi seadmeid.
Süsteemi kirjeldus
VPN töötab IPSec + L2TP + PPP skeemi alusel. Protokoll Punktist-punkti protokoll (PPP) töötab OSI mudeli kanalikihtis ja tagab kasutaja autentimise ning edastatavate andmete krüpteerimise. Selle andmed kapseldatakse L2TP protokolli andmetesse, mis tegelikult loob ühenduse VPN-võrgus, kuid ei pakku autentimist ega krüpteerimist.
L2TP andmed kapseldatakse IPSec protokolli, mis samuti tagab autentimise ja krüpteerimise, kuid erinevalt PPP protokollist toimub autentimine ja krüpteerimine seadmete tasemel, mitte kasutajate tasemel.
See omadus võimaldab tagada kasutajate autentimise ainult teatud seadmetest. Me kasutame IPSec protokolli ja lubame autentida kasutajaid mistahes seadmest.

Kasutaja autentimine tarkkaardiga toimub PPP protokolli tasemel EAP-TLS protokolli abil.
Rohkem teavet selle skeemi toimimise kohta leiate siit .
Miks see skeem vastab kõikidele kolmele hea VPN-võrgu nõudele
- Käesoleva skeemi usaldusväärsus on aja jooksul tõestatud. Seda on kasutatud VPN-võrkude juurutamiseks alates 2000. aastast.
- Kasutaja turvalist autentimise tagab PPP protokoll. ei taga piisavat turvataset, kuna autentimiseks kasutatakse parimal juhul kasutajanime ja parooli. Kõik teame, et kasutajat ja parooli saab piiluda, häkkida või varastada. Siiski on juba ammu selle teema lahendanud arendaja ühes antud protokollis parandas see teema ja lisas autentimiseks asümmeetrilise krüpto põhised protokollid, nagu EAP-TLS. Lisaks lisas ta autentimiseks nutikaartide kasutamise võimaluse, mis tegi süsteemi turvalisemaks.
Praegu käivad aktiivsed läbirääkimised nende kahe projekti ühinemiseks ja võib olla kindel, et varem või hiljem see kindlasti toimub. Näiteks Fedora hoidlatest on juba pikka aega 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 Šokov ja Aleksandr Smirnov, leidsid ja täiustasid seda. Koostöös lahendasime palju vigu ja puuduolekuid kliendi töös, lihtsustasime süsteemi paigaldamist ja seadistamist isegi lähtekoodist kogumisel. Olulisemad neist on:
- Vanema kliendi ühilduvuse probleemid uusimate openssl ja qt versioonide liidesega on parandatud.
- pppd PIN-koodi edastamine tokenist ajutise faili kaudu on eemaldatud.
- Programmi parooli küsimise käivitus graafilise liidese kaudu on parandus, mis saavutati xl2tpd teenuse õigete seadistuste määramisega.
- L2tpIpsecVpn deemon kogumine toimub nüüd koos kliendi enda kogumisega, mis lihtsustab kogumise ja seadistamise protsessi.
- Arenduse mugavuse huvides on integreeritud Azure Pipelines süsteem kogumise õigsuse testimiseks.
- Lisatud on võimalus sundida langetama openssl kontekstis. See on kasulik uute operatsioonisüsteemide nõuetekohase toetuse tagamiseks, kus standardne turvalisuse tase on seatud 2, VPN-võrkudes, kus kasutatakse sertifikaate, mis ei vasta selle taseme turvanõuetele. See valik on kasulik juba olemasolevate vanade VPN-võrkudega töötamiseks.
Parandatud versiooni leiate .
See klient toetab nutikaartide kasutamist autentimise jaoks ning varjab maksimaalselt kõik tüsistused ja ebamugavused, millega seondub selle skeemi seadistamine Linuxis, tehes kliendi seadistamise võimalikult lihtsaks ja kiireks.
Muidugi, et tagada mugav PPP ja GUI kliendi vaheline seos, ei olnud aga võimalik vältida igas projekti lisakorrektsioone, kuid siiski õnnestus neid minimeerida:
- Parandatud
- Parandatud . See viga ei lubanud laadida kohalikust /etc/ppp/openssl.cnf failist konfigureerimist, mis sisaldas ainult teavet openssl'i mootorite kohta, mis töötavad nutikaartidega. See tekitas tõsiseid ebamugavusi, kui soovisime seada midagi muud, näiteks fikseerida turvatase ühenduse loomisel.
Nüüd saab alustada seadistamist.
Serveri seadistamine
Paigaldame kõik vajalikud paketid.
Paigaldame strongswan (IPsec)
Kõigepealt 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 installimist.
sudo yum install epel-release ipsec-tools dnf
sudo dnf install strongswanPärast installimist tuleb seadistada strongswan'i (üks IPsec'i teostus) konfiguratsioon. Selleks redigeerime faili. /etc/strongswan/ipsec.conf :
konfiguratsioon
nat_traversal=jah
virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12
oe=väljas
protostack=netkey
conn L2TP-PSK-NAT
rightsubnet=vhost:%priv
also=L2TP-PSK-noNAT
conn L2TP-PSK-noNAT
authby=saladus
pfs=ei
auto=lisa
keyingtries=3
rekey=ei
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-modp1024Seame ka ühise parooli sisselogimise jaoks. Ühine parool peab olema kõigile võrgu osalejatele teada autentimiseks. See meetod on ebausaldusväärne, kuna see parool võib kergesti saada teatavaks isikutele, kellele me ei soovi võrku juurdepääsu anda.
Sellegipoolest ei mõjuta see fakt võrgu organisatsiooni turvalisust, kuna andmete peamine krüpteerimine ja kasutajate autentimine toimub PPP protokolli kaudu. Kuid õigusemõistmiseks tasub märkida, et strongswan toetab turvalisemaid autentimistehnoloogiaid, näiteks privaatsete võtmete abil. Samuti võimaldab strongswan autentimist nutikardiga, kuid praegu toetatakse piiratud seadmeid ja seetõttu on autentimine Ruutokeni tokenite ja nutikardiga hetkel keeruline. Seame ühise parooli faili kaudu /etc/strongswan/ipsec.secrets:
# ipsec.secrets - strongSwan IPsec secrets file
%any %any : PSK "SECRET_PASSPHRASE"Käivitame strongswan uuesti:
sudo systemctl enable strongswan
sudo systemctl restart strongswanxl2tp paigaldamine
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 serveri staatilise aadressi virtuaalsetes võrkudes
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
; selle valiku võib pärast võrgustiku seadistamise edukat lõpetamist välja lülitada
ppp debug = yes
length bit = yes
pppoptfile = /etc/ppp/options.xl2tpd
; määrab serveri aadressi võrgus
name = centos.vpn.server.adKäivitame teenuse uuesti:
sudo systemctl enable xl2tpd
sudo systemctl restart xl2tpdPPP seadistamine
Soovitav on paigaldada uusim versioon pppd. Selleks täidame järgmised käsud:
sudo yum install git make gcc openssl-devel
git clone "https://github.com/jjkeijser/ppp"
cd ppp
./configure --prefix /usr
make -j4
sudo make installKirjutage faili /etc/ppp/options.xl2tpd järgmine (kui seal on mingid väärtused, siis need võib 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 üle juures sertifikaat 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õhiseadistuse. Ülejäänud serveri konfiguratsiooniga seondub uute klientide lisamine.
Uue kliendi lisamine
Uue kliendi lisamiseks võrku tuleb tema sertifikaat salvestada usaldusväärsete nimekirja.
Kui kasutaja soovib liituda VPN-võrguga, loob ta võtmepaari ja sertifikaadi taotluse antud kliendi jaoks. Kui kasutaja on usaldusväärne, saab taotluse allkirjastada ja saadud sertifikaadi salvestada sertifikaatide katalooge:
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 faili /etc/ppp/eaptls-server rida kliendi nime ja tema sertifikaadi seostamiseks:
"client" * /etc/ppp/certs/client.pem /etc/ppp/certs/server.pem /etc/ppp/certs/ca.pem /etc/ppp/keys/server.pem *MÄRKUS
Segaduse vältimiseks on parem, kui: Ühine nimi, sertifikaadi faili nimi ja kasutajanimi on unikaalsed.
Samuti on oluline kontrollida, et teiste autentimisfailide seas ei esineks kasutajanime, mille me lisame, vastasel juhul võivad tekkida autentimisprobleemid.
Sama sertifikaat tuleb samuti kasutajale tagasi saata.
Küsimise võtmepaari ja sertifikaadi genereerimine
Kliendi edukaks autentimiseks on vajalik:
- generaida võtmepaar;
- olema juursertifikaat CA-lt;
- olema sertifikaat oma võtmepaari jaoks, mille on allkirjastanud juur-CA.
Linuxi kliendi jaoks
Alustame võtmepaari genereerimisest tokenil ja sertifikaadi taotlemisest:
#идентификатор ключа (параметр --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"Saabunud taotlus client.req saatke CA-le. Pärast sertifikaadi saamist oma võtmepaari jaoks 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 universaalsem, kuna see võimaldab luua võtme ja sertifikaadi, mida tunnustavad Windows ja Linux, kuid see nõuab Windowsi masinat võtmete genereerimise protseduuriks.
Enne päringute genereerimist ja sertifikaatide importimist tuleb VPN võrgu juure sertifikaat lisada usaldusväärsete sertifikaatide loetellu. Selleks avame selle ja valime avanenud aknas valiku "Installi sertifikaat":

Avanenud aknas valime sertifikaadi installimise kohaliku kasutaja jaoks:

Installime sertifikaadi usaldusväärsete juure sertifikaatide hoidlasse:

Pärast kõiki neid toiminguid nõustume kõikide 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õtmepaari ja loome sertifikaadi taotluse. Selleks avame PowerShelli ja sisestame järgmise käsu:
certreq.exe -new -pin $PIN .cert.tmp .client.reqSaada loodud taotlus client.req oma sertifitseerimisüksusele ja oota sertifikaadi client.pem saamist. Selle võib salvestada tokenile ja lisada Windowsi sertifikaatide hoidlasse järgmise käsuga:
certreq.exe -accept client.pemTuleb märkida, et sarnaseid toiminguid saab läbi viia ka programmi mmc graafilise liidese abil, kuid see meetod on aeganõudvam ja vähem seadistatav.
Ubuntu kliendi seadistamine
MÄRKUS
Linuxi kliendi seadistamine on praegu ajakulukas, kuna see vajab eraldi programmide lähtekoodidest kogumist. Püüame peagi saavutada, et kõik muudatused jõuaksid ametlikesse hoidlatestse.
IPSeci tasemel serveriga ühenduse tagamiseks kasutatakse paketti strongswan ja teenust xl2tp. Ühenduse lihtsustamiseks nutikaarte kasutades – kasutame paketti l2tp-ipsec-vpn, mis pakub graafilist liidest lihtsustatud seadistamiseks.
Alustame elementide etappide kaupa kogumist, kuid enne seda installime kõik vajalikud paketid VPNi otseseks tööks:
sudo apt-get install xl2tpd strongswan libp11-3Tarkvara installimine tokenitega töötamiseks
Installeer viimane versioon librtpkcs11ecp.so raamatukogust , samuti raamatukogud, mis töötavad nutikardidega:
sudo apt-get install pcscd pcsc-tools opensc libengine-pkcs11-opensslÜhendage Rutig ja kontrollige, et süsteem tuvastab selle:
pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -O -lPatchitud 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 ka allikaid koguda. Seda tehakse järgmiste käskude järjekorras:
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 komponent. Klikkame sellele paremklõpsuga ja seadistame ühenduse:

Tokenitega töötamise jaoks määrame esiteks OpenSSL'i opensc mootorite ja PKCS#11 raamatukogu tee. Selleks avage "Preferences" sakk, et seadistada openssl'i parameetreid:
.
Sulgeme OpenSSL seadete akna ja liigume võrgu seadistamise juurde. Lisame uue võrgu, klõpsates seadete paneelil nuppu Add… ja sisestage võrgu nimi:

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

Pärast seda liikume PPP seadistuste vahelehele ja määrame seal kasutajanime, millega soovime võrku siseneda:

Pärast seda avame vahelehe Properties ja määrame tee võtmele, kliendi sertifikaadile ja CA-le:

Sulgeme selle vahelehe ja teeme lõpp seadistuse, avades vahelehe "IP settings" ja märkides ruudu valiku "Obtain DNS server address automatically" kõrval:

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

Ühendamine võrguga
Pärast seadistusi saame võrku ühenduda. Selleks avame applet'i vahelehe ja valime võrgu, millega soovime ühendada:

Ühenduse loomise protsessi käigus palub klient sisestada RUTokeni PIN-koodi:

Kui staatuseribal ilmub teade, et ühendus on edukalt loodud, siis tähendab see, et seadistus on tehtud edukalt:

Vastasel juhul tasub uurida, miks ühendus ei olnud loodud. Selleks vaata programmi logi, valides rakenduses käsu "Connection information":

Windowsi kliendi seadistamine
Windowsis on kliendi seadistamine oluliselt lihtsam kui Linuxis, kuna kõik vajalik tarkvara on süsteemi juba sisse ehitatud.
Süsteemi seadistamine
Installime kõik vajalikud draiverid Rutuoken'itega töötamiseks, laadides need alla .
Juuresertifikaadi import autentimiseks
Laadige alla serveri juuresertifikaat ja installige see süsteemi. Selleks avame selle ja avanenud aknas valime valiku "Install certificate":

Avanenud aknas valige seritifikaadi installimine kohalikele kasutajatele. Kui soovite, et sertifikaat oleks kergesti saadaval kõikidele arvuti kasutajatele, siis peab valima sertifikaadi installimise kohaliku arvuti jaoks:

Installime sertifikaadi usaldusväärsete juure sertifikaatide hoidlasse:

Pärast kõiki neid toiminguid nõustume kõikide edasiste punktidega. Nüüd on süsteem seadistatud.
VPN-ühenduse seadistamine
VPN-ühenduse seadistamiseks minge juhtpaneelile ja valige uus ühendus loomise punkt.

Käivitatavas aknas valige töökoha ühenduse loomise valik:

Järgmises aknas valige VPN-ühenduse seade:

ja ja VPN-ühenduse andmed, samuti valige nutika kaardi kasutamise võimalus:

Selle seadistusega pole veel kõik valmis. Jäänud on määrata IPsec-protokolli jagatud võti, selleks liikume jaotisse "Võrguühenduse seaded" ja seejärel jaotisse "Selle ühenduse omadused":

Avatud aknas liikume vahekaardile "Turvalisus", määrame võrgu tüübiks "L2TP/IPsec" ja valime "Lisavalikud":

Avatud aknas sisestame IPsec jagatud võtme:

Ühendamine
Pärast seadistuse lõpetamist võite proovida võrku ühenduda:

Ühendamise protsessis palutakse meil sisestada sümboolse PIN-kood:

Oleme seadnud üles turvalise VPN-võrgu ja veendunud, et see pole keeruline.
Tänud
Soovime veelkord tänada meie kolleege Vasili Šokovat ja Aleksandr Smirnovi koostöö eest VPN-ühenduste loomise lihtsustamise nimel Linuxi klientidele.
Allikas: habr.com
