ProHoster > Блог > Administrado > Agordu aŭtentikigon en la L2TP-reto uzante Rutoken EDS 2.0 kaj Rutoken PKI
Agordu aŭtentikigon en la L2TP-reto uzante Rutoken EDS 2.0 kaj Rutoken PKI
Temoj
Ĵus, multaj ne sciis, kiel estas labori hejme. La pandemio draste ŝanĝis la situacion en la mondo; ĉiuj komencis adaptiĝi al la nunaj cirkonstancoj, nome al la fakto, ke fariĝis simple nesekure forlasi la domon. Kaj multaj devis rapide organizi laboron de hejme por siaj dungitoj.
Tamen, la manko de kompetenta aliro por elekti solvojn por fora laboro povas konduki al neinversigeblaj perdoj. Uzantaj pasvortoj povas esti ŝtelitaj, kaj ĉi tio permesos al atakanto neregeble konekti al la reto kaj IT-resursoj de la entrepreno.
Tial la bezono krei fidindajn kompaniajn VPN-retojn nun pliiĝis. Mi rakontos al vi pri fidinda, sekura и simpla uzante VPN-reton.
Ĝi funkcias laŭ la skemo IPsec/L2TP, kiu uzas ne-repreneblajn ŝlosilojn kaj atestojn konservitajn sur ĵetonoj por aŭtentikigi klientojn, kaj ankaŭ transdonas datumojn tra la reto en ĉifrita formo.
Servilo kun CentOS 7 (adreso: centos.vpn.server.ad) kaj kliento kun Ubuntu 20.04, same kiel kliento kun Vindozo 10, estis uzataj kiel pruvaj standoj por agordo.
Sistema Priskribo
La VPN funkcios laŭ la skemo IPSec + L2TP + PPP. Protokolo Punkto-al-Punkta Protokolo (PPP) funkciigas ĉe la datenliga tavolo de la OSI-modelo kaj disponigas uzantaŭtentikigon kaj ĉifradon de elsenditaj datenoj. Ĝiaj datumoj estas enkapsuligitaj en la datumoj de la protokolo L2TP, kiu efektive certigas la kreadon de konekto en la VPN-reto, sed ne provizas aŭtentikigon kaj ĉifradon.
L2TP-datumoj estas enkapsuligitaj en IPSec, kiu ankaŭ disponigas aŭtentikigon kaj ĉifradon, sed male al PPP, aŭtentikigo kaj ĉifrado okazas sur la aparato-nivelo, ne sur la uzantnivelo.
Ĉi tiu funkcio permesas vin aŭtentigi uzantojn nur de certaj aparatoj. Ni uzos la IPSec-protokolon kiel ĝi estas kaj permesos uzantan aŭtentikigon de iu ajn aparato.
Uzanto-konfirmo per saĝkartoj estos farita ĉe la PPP-protokolo-nivelo uzante la EAP-TLS-protokolon.
Pli detalaj informoj pri la funkciado de ĉi tiu cirkvito troveblas en ĉi tiu artikolo.
Kial ĉi tiu skemo plenumas ĉiujn tri postulojn de bona VPN-reto?
La fidindeco de ĉi tiu skemo estis provita de tempo. Ĝi estis uzata por deploji VPN-retojn ekde 2000.
Sekura uzantaŭtentigo estas disponigita per la PPP-protokolo. Norma efektivigo de la PPP-protokolo evoluigita fare de Paul Mackerras ne provizas sufiĉan nivelon de sekureco, ĉar Por aŭtentigo, en la plej bona kazo, aŭtentikigo uzante ensaluton kaj pasvorton estas uzata. Ni ĉiuj scias, ke ensaluta pasvorto povas esti spionita, divenita aŭ ŝtelita. Tamen, jam delonge la programisto Jan Just Keijser в ĝia efektivigo Ĉi tiu protokolo korektis ĉi tiun problemon kaj aldonis la kapablon uzi protokolojn bazitajn sur nesimetria ĉifrado, kiel EAP-TLS, por aŭtentigo. Krome, li aldonis la kapablon uzi inteligentajn kartojn por aŭtentigo, kio igis la sistemon pli sekura.
Nuntempe aktivas intertraktadoj por kunfandi ĉi tiujn du projektojn kaj vi povas esti certa, ke baldaŭ aŭ malfrue ĉi tio okazos ĉiuokaze. Ekzemple, flikita versio de PPP estas en la deponejoj de Fedora dum longa tempo, uzante sekurajn protokolojn por aŭtentigo.
Ĝis antaŭ nelonge ĉi tiu reto povis esti uzata nur de Vindozo-uzantoj, sed niaj kolegoj de Moskva Ŝtata Universitato Vasilij Ŝokov kaj Aleksandr Smirnov trovis malnova L2TP-klienta projekto por Linukso kaj modifis ĝin. Kune, ni riparis multajn erarojn kaj mankojn en la laboro de la kliento, simpligis la instaladon kaj agordon de la sistemo, eĉ dum konstruado de fonto. La plej signifaj el ili estas:
Korektis problemojn pri kongruo de la malnova kliento kun la interfaco de novaj versioj de openssl kaj qt.
Forigita pppd de pasado de la ĵetono PIN tra provizora dosiero.
Korektis malĝustan lanĉon de la pasvortpeta programo per la grafika interfaco. Ĉi tio estis farita instalante la ĝustan medion por la servo xl2tpd.
La konstruo de la L2tpIpsecVpn-demono nun estas farita kune kun la konstruo de la kliento mem, kiu simpligas la konstruan kaj agordan procezon.
Por facileco de disvolviĝo, la sistemo Azure Pipelines estas konektita por testi la ĝustecon de la konstruo.
Aldonita la kapablo devigi malaltigon sekureca nivelo en la kunteksto de openssl. Ĉi tio estas utila por ĝuste subteni novajn operaciumojn, kie la norma sekurecnivelo estas metita al 2, kun VPN-retoj, kiuj uzas atestojn, kiuj ne plenumas la sekurecajn postulojn de ĉi tiu nivelo. Ĉi tiu opcio estos utila por labori kun ekzistantaj malnovaj VPN-retoj.
Ĉi tiu kliento subtenas la uzon de inteligentaj kartoj por aŭtentikigo, kaj ankaŭ kaŝas kiel eble plej multe ĉiujn malfacilaĵojn kaj malfacilaĵojn de agordo de ĉi tiu skemo sub Linukso, farante klientan agordon kiel eble plej simpla kaj rapida.
Kompreneble, por oportuna konekto inter PPP kaj la klienta GUI, ĝi ne eblis sen pliaj redaktoj al ĉiu el la projektoj, sed tamen ili estis minimumigitaj kaj reduktitaj al minimumo:
Fiksita eraro en la ordo de ŝarĝo de la agordo kaj pravalorigo de la kunteksto openssl. Ĉi tiu eraro ne permesis al ni ŝargi ion el la loka agorda dosiero /etc/ppp/openssl.cnf krom informoj pri openssl-motoroj por labori kun inteligentaj kartoj, kio estis grava ĝeno se, ekzemple, krom informoj pri motoroj, ni volis agordi ion alian. Ekzemple, riparu la sekurecnivelon dum establado de konekto.
Nun vi povas komenci agordi.
Agordo de Servilo
Ni instalu ĉiujn necesajn pakaĵojn.
Instalante strongswan (IPsec)
Antaŭ ĉio, ni agordu la fajroŝirmilon por ipsec-operacio
Ni ankaŭ starigos komunan ensalutan pasvorton. La komuna pasvorto devas esti konata al ĉiuj retaj partoprenantoj por aŭtentigo. Ĉi tiu metodo estas evidente nefidinda, ĉar ĉi tiu pasvorto povas facile fariĝi konata al individuoj al kiuj ni ne volas havigi aliron al la reto.
Tamen, eĉ ĉi tiu fakto ne influos la sekurecon de la reto, ĉar Baza datuma ĉifrado kaj uzantaŭtentigo estas efektivigitaj per la PPP-protokolo. Sed juste, indas noti, ke strongswan subtenas pli sekurajn teknologiojn por aŭtentigo, ekzemple, uzante privatajn ŝlosilojn. Strongswan ankaŭ havas la kapablon provizi aŭtentikigon per inteligentaj kartoj, sed ĝis nun nur limigita gamo da aparatoj estas subtenataj kaj tial aŭtentikigado per Rutoken-ĵetonoj kaj inteligentaj kartoj daŭre estas malfacila. Ni agordu ĝeneralan pasvorton per dosiero /etc/strongswan/ipsec.secrets:
Ni agordu ĝin per dosiero /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
Ni emisias la radikan atestilon kaj servilatestilon:
#директория с сертификатами пользователей, УЦ и сервера
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
Tiel, ni finis kun la baza servila agordo. La resto de la servila agordo implikas aldoni novajn klientojn.
Aldonante novan klienton
Por aldoni novan klienton al la reto, vi devas aldoni ĝian atestilon al la listo de fidindaj por ĉi tiu kliento.
Se uzanto volas fariĝi membro de VPN-reto, li kreas ŝlosilan paron kaj atestilon por ĉi tiu kliento. Se la uzanto estas fidinda, tiam ĉi tiu aplikaĵo povas esti subskribita, kaj la rezulta atestilo povas esti skribita al la dosierujo de atestiloj:
NOTO
Por eviti konfuzon, estas pli bone ke: Komuna Nomo, atestildosiernomo kaj uzantnomo estu unikaj.
Ankaŭ indas kontroli, ke la nomo de la uzanto, kiun ni aldonas, aperas ie ajn en aliaj aŭtentikigdosieroj, alie estos problemoj pri la maniero aŭtentikigi la uzanton.
La sama atestilo devas esti resendita al la uzanto.
Generante ŝlosilparon kaj atestilon
Por sukcesa aŭtentigo, la kliento devas:
generi ŝlosilparon;
havi CA radikan atestilon;
havi atestilon por via ŝlosilparo subskribita de la radika CA.
por kliento en Linukso
Unue, ni generu ŝlosilparon sur la ĵetono kaj kreu aplikaĵon por la atestilo:
Sendu la aplikaĵon client.req, kiu aperas al la CA. Post kiam vi ricevas atestilon por via ŝlosilparo, skribu ĝin al ĵetono kun la sama identigilo kiel la ŝlosilo:
por Vindozo kaj Linukso klientoj (pli universala metodo)
Ĉi tiu metodo estas pli universala, ĉar ebligas al vi generi ŝlosilon kaj atestilon, kiuj estos sukcese rekonitaj de uzantoj de Vindozo kaj Linukso, sed ĝi postulas Vindozan maŝinon por efektivigi la proceduron de generado de ŝlosilo.
Antaŭ ol generi petojn kaj importi atestojn, vi devas aldoni la radikan atestilon de la VPN-reto al la listo de fidindaj. Por fari tion, malfermu ĝin kaj en la fenestro kiu malfermiĝas, elektu la opcion "Instali atestilon":
En la fenestro kiu malfermiĝas, elektu instali atestilon por la loka uzanto:
Ni instalu la atestilon en la fidinda radika atestilo de la CA:
Post ĉiuj ĉi tiuj agoj, ni konsentas kun ĉiuj pliaj punktoj. La sistemo nun estas agordita.
Post ĉi tio, ni generos ŝlosilparon kaj kreos aplikon por la atestilo. Por fari tion, malfermu Powershell kaj enigu la sekvan komandon:
certreq.exe -new -pin $PIN .cert.tmp .client.req
Sendu la kreitan aplikaĵon client.req al via CA kaj atendu ke la atestilo client.pem estos ricevita. Ĝi povas esti skribita al ĵetono kaj aldonita al la Vindoza atestilbutiko per la sekva komando:
certreq.exe -accept .client.pem
Indas noti, ke similaj agoj povas esti reproduktitaj uzante la grafikan interfacon de la programo mmc, sed ĉi tiu metodo estas pli temporaba kaj malpli programebla.
Agordante la Ubuntu-klienton
NOTO
Agordi klienton en Linukso estas nuntempe sufiĉe tempopostula, ĉar... postulas konstrui apartajn programojn de la fonto. Ni provos certigi, ke ĉiuj ŝanĝoj estos inkluzivitaj en la oficialaj deponejoj baldaŭ.
Por certigi konekton ĉe la IPSec-nivelo al la servilo, la strongswan-pakaĵo kaj la xl2tp-demono estas uzataj. Por simpligi konekton al la reto per inteligentaj kartoj, ni uzos la pakaĵon l2tp-ipsec-vpn, kiu provizas grafikan ŝelon por simpligita konekto-agordo.
Ni komencu kunmeti la elementojn paŝon post paŝo, sed antaŭ tio ni instalos ĉiujn necesajn pakaĵojn por ke la VPN funkciu rekte:
sudo apt-get install xl2tpd strongswan libp11-3
Instalado de programaro por labori kun ĵetonoj
Instalu la plej novan bibliotekon librtpkcs11ecp.so de ejo, ankaŭ bibliotekoj por labori kun inteligentaj kartoj:
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
Instalante la L2tpIpsecVpn-klienton
Nuntempe, la kliento ankaŭ devas esti kompilita el fontkodo. Ĉi tio estas farita uzante la sekvan sinsekvon de komandoj:
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
Agordi la L2tpIpsecVpn-klienton
Lanĉu la instalitan klienton:
Post lanĉo, la apleto L2tpIpsecVPN devus malfermiĝi. Dekstre alklaku ĝin kaj agordu la konekton:
Por labori kun ĵetonoj, unue ni indikas la vojon al la opensc-motoro de la OpenSSL-motoro kaj la biblioteko PKCS#11. Por fari tion, malfermu la langeton "Preferoj" por agordi openssl-parametrojn:
.
Ni fermu la fenestron de agordoj de OpenSSL kaj pluiru al agordi la reton. Ni aldonu novan reton alklakante la butonon Aldoni... en la agorda panelo kaj enigu la retnomon:
Post ĉi tio, ĉi tiu reto estos disponebla en la agorda panelo. Duoble dekstre alklaku la novan reton por agordi ĝin. Sur la unua langeto vi devas fari IPsec-agordojn. Ni agordu la servilan adreson kaj publikan ŝlosilon:
Post ĉi tio, iru al la langeto de agordoj de PPP kaj indiku tie la uzantnomon, sub kiu ni volas aliri la reton:
Post ĉi tio, malfermu la langeton Propraĵoj kaj specifu la vojon al la ŝlosilo, klienta atestilo kaj CA:
Ni fermu ĉi tiun langeton kaj faru la finajn agordojn; por fari tion, malfermu la langeton "IP-agordojn" kaj marku la skatolon apud la opcio "Akiri DNS-servilon aŭtomate":
Ĉi tiu opcio permesos al la kliento ricevi personan IP-adreson ene de la reto de la servilo.
Post ĉiuj agordoj, fermu ĉiujn langetojn kaj rekomencu la klienton:
Konektante sin al la reto
Post la agordoj, vi povas konekti al la reto. Por fari tion, malfermu la apleton kaj elektu la reton al kiu ni volas konektiĝi:
Dum la procezo de establado de konekto, la kliento petos nin enigi la PIN-kodon de Rutoken:
Se en la statusbreto aperas sciigo, ke la konekto estis sukcese establita, tio signifas, ke la agordo sukcesis:
Alie, indas ekscii, kial la rilato ne estis establita. Por fari tion, vi devus rigardi la programprotokolo elektante la komandon "Konekto-informoj" en la apleto:
Agordi la Vindozan klienton
Agordi klienton en Vindozo estas multe pli facila ol en Linukso, ĉar... Ĉiuj necesaj programoj jam estas konstruitaj en la sistemon.
Sistema Agordo
Ni instalos ĉiujn necesajn ŝoforojn por labori kun Rutokens elŝutante ilin de de. retejo.
Importado de radika atestilo por aŭtentigo
Elŝutu la servilan radikan atestilon kaj instalu ĝin en la sistemo. Por fari tion, malfermu ĝin kaj en la fenestro kiu malfermiĝas, elektu la opcion "Instali atestilon":
En la fenestro kiu malfermiĝas, elektu instali atestilon por la loka uzanto. Se vi volas, ke la atestilo estu disponebla por ĉiuj uzantoj en la komputilo, tiam vi elektu instali la atestilon sur la loka komputilo:
Ni instalu la atestilon en la fidinda radika atestilo de la CA:
Post ĉiuj ĉi tiuj agoj, ni konsentas kun ĉiuj pliaj punktoj. La sistemo nun estas agordita.
Agordi VPN-konekton
Por agordi VPN-konekton, iru al la kontrolpanelo kaj elektu la opcion por krei novan konekton.
En la ŝprucfenestro, elektu la opcion por krei konekton por konekti al via laborejo:
En la sekva fenestro, elektu VPN-konekton:
kaj enigu la detalojn pri VPN-konekto, kaj ankaŭ specifu la opcion uzi inteligentan karton:
La aranĝo ankoraŭ ne estas kompleta. Restas nur specifi la komunan ŝlosilon por la IPsec-protokolo; por fari tion, iru al la langeto "Retaj konekto-agordoj" kaj poste iru al la langeto "Propertoj por ĉi tiu konekto":
En la fenestro kiu malfermiĝas, iru al la langeto "Sekureco", specifu "L2TP/IPsec Reto" kiel la reto-tipo kaj elektu "Altnivelaj Agordoj":
En la fenestro kiu malfermiĝas, specifu la komunan IPsec-ŝlosilon:
Konektebleco
Post la agordo, vi povas provi konekti al la reto:
Dum la konektprocezo, ni devos enigi la simbolan PIN-kodon:
Ni starigis sekuran VPN-reton kaj certigis, ke ĝi ne estas malfacila.
Dankoj
Mi ŝatus denove danki niajn kolegojn Vasily Shokov kaj Alexander Smirnov pro la laboro, kiun ili kune faris por simpligi la kreadon de VPN-konektoj por Linuksaj klientoj.