ProHoster > Blog > administrasie > Stel verifikasie in die L2TP-netwerk op met Rutoken EDS 2.0 en Rutoken PKI
Stel verifikasie in die L2TP-netwerk op met Rutoken EDS 2.0 en Rutoken PKI
Probleem
Net onlangs het baie nie geweet hoe dit is om van die huis af te werk nie. Die pandemie het die situasie in die wêreld dramaties verander; almal het begin aanpas by die huidige omstandighede, naamlik by die feit dat dit eenvoudig onveilig geword het om die huis te verlaat. En baie moes vinnig werk van die huis af vir hul werknemers organiseer.
Die gebrek aan 'n bekwame benadering tot die keuse van oplossings vir afgeleë werk kan egter tot onomkeerbare verliese lei. Gebruikerswagwoorde kan gesteel word, en dit sal 'n aanvaller toelaat om onbeheerbaar aan die netwerk- en IT-hulpbronne van die onderneming te koppel.
Daarom het die behoefte aan die skep van betroubare korporatiewe VPN-netwerke nou toegeneem. Ek sal jou vertel van betroubaar, veilig и eenvoudige in die gebruik van 'n VPN-netwerk.
Dit werk volgens die IPsec/L2TP-skema, wat nie-herwinbare sleutels en sertifikate wat op tokens gestoor is, gebruik om kliënte te verifieer, en ook data oor die netwerk in geënkripteerde vorm versend.
'n Bediener met CentOS 7 (adres: centos.vpn.server.ad) en 'n kliënt met Ubuntu 20.04, sowel as 'n kliënt met Windows 10, is as demonstrasiestaanders vir konfigurasie gebruik.
Stelselbeskrywing
Die VPN sal volgens die IPSec + L2TP + PPP-skema werk. Protokol Punt-tot-punt-protokol (PPP) werk by die dataskakellaag van die OSI-model en verskaf gebruikersverifikasie en enkripsie van oorgedrade data. Die data daarvan is ingekapsuleer in die data van die L2TP-protokol, wat eintlik die skepping van 'n verbinding in die VPN-netwerk verseker, maar nie verifikasie en enkripsie verskaf nie.
L2TP-data is ingekapsuleer in IPSec, wat ook verifikasie en enkripsie verskaf, maar anders as PPP, vind verifikasie en enkripsie op toestelvlak plaas, nie op gebruikersvlak nie.
Hierdie kenmerk laat jou toe om gebruikers slegs vanaf sekere toestelle te staaf. Ons sal die IPSec-protokol gebruik soos dit is en gebruikersverifikasie vanaf enige toestel toelaat.
Gebruikersverifikasie met behulp van slimkaarte sal op die PPP-protokolvlak uitgevoer word deur die EAP-TLS-protokol te gebruik.
Meer gedetailleerde inligting oor die werking van hierdie stroombaan kan gevind word in Hierdie artikel.
Waarom voldoen hierdie skema aan al drie vereistes van 'n goeie VPN-netwerk?
Die betroubaarheid van hierdie skema is deur die tyd getoets. Dit word sedert 2000 gebruik om VPN-netwerke te ontplooi.
Veilige gebruikersverifikasie word deur die PPP-protokol verskaf. Standaardimplementering van die PPP-protokol wat deur Paul Mackerras ontwikkel is bied nie 'n voldoende vlak van sekuriteit nie, want Vir verifikasie, in die beste geval, word verifikasie met behulp van 'n login en wagwoord gebruik. Ons weet almal dat 'n aanmeldwagwoord gespioeneer, geraai of gesteel kan word. Maar vir 'n lang tyd nou die ontwikkelaar Jan Just Keijser в die implementering daarvan Hierdie protokol het hierdie probleem reggestel en die vermoë bygevoeg om protokolle gebaseer op asimmetriese enkripsie, soos EAP-TLS, vir stawing te gebruik. Daarbenewens het hy die vermoë bygevoeg om slimkaarte vir stawing te gebruik, wat die stelsel veiliger gemaak het.
Tans is aktiewe onderhandelinge aan die gang om hierdie twee projekte saam te smelt en jy kan seker wees dat dit vroeër of later in elk geval sal gebeur. Byvoorbeeld, 'n gelapte weergawe van PPP is al lank in die Fedora-bewaarplekke, met behulp van veilige protokolle vir verifikasie.
Tot onlangs kon hierdie netwerk slegs deur Windows-gebruikers gebruik word, maar ons kollegas van die Moscow State University Vasily Shokov en Alexander Smirnov het gevind ou L2TP-kliëntprojek vir Linux en dit gewysig het. Saam het ons baie foute en tekortkominge in die kliënt se werk reggestel, die installasie en konfigurasie van die stelsel vereenvoudig, selfs wanneer vanaf die bron gebou word. Die belangrikste van hulle is:
Vaste verenigbaarheidsprobleme van die ou kliënt met die koppelvlak van nuwe weergawes van openssl en qt.
Het pppd verwyder om die token-PIN deur 'n tydelike lêer te stuur.
Vaste verkeerde bekendstelling van die wagwoordversoekprogram deur die grafiese koppelvlak. Dit is gedoen deur die korrekte omgewing vir die xl2tpd-diens te installeer.
Die bou van die L2tpIpsecVpn-demoon word nou saam met die bou van die kliënt self uitgevoer, wat die bou- en konfigurasieproses vergemaklik.
Vir gemak van ontwikkeling, is die Azure Pipelines-stelsel gekoppel om die korrektheid van die bou te toets.
Bygevoeg die vermoë om afgradering af te dwing sekuriteitsvlak in die konteks van openssl. Dit is nuttig vir die korrekte ondersteuning van nuwe bedryfstelsels waar die standaard sekuriteitsvlak op 2 gestel is, met VPN-netwerke wat sertifikate gebruik wat nie aan die sekuriteitsvereistes van hierdie vlak voldoen nie. Hierdie opsie sal nuttig wees om met bestaande ou VPN-netwerke te werk.
Hierdie kliënt ondersteun die gebruik van slimkaarte vir stawing, en verberg ook soveel as moontlik al die swaarkry en ontberings van die opstel van hierdie skema onder Linux, wat die opstelling van die kliënt so eenvoudig en vinnig moontlik maak.
Natuurlik, vir 'n gerieflike verbinding tussen PPP en die kliënt-GUI, was dit nie moontlik sonder bykomende wysigings aan elk van die projekte nie, maar dit is nietemin geminimaliseer en tot 'n minimum verminder:
Reggemaak fout in die volgorde van die laai van die konfigurasie en die inisiasie van die openssl konteks. Hierdie fout het ons nie toegelaat om enigiets van die plaaslike /etc/ppp/openssl.cnf-konfigurasielêer af te laai nie, behalwe inligting oor openssl-enjins om met slimkaarte te werk, wat 'n ernstige ongerief was as, byvoorbeeld, bykomend tot inligting oor enjins, ons wou iets anders stel. Stel byvoorbeeld die sekuriteitsvlak vas wanneer 'n verbinding tot stand gebring word.
Nou kan jy begin opstel.
Bedienerinstelling
Kom ons installeer al die nodige pakkette.
Installeer strongswan (IPsec)
Kom ons stel eerstens die firewall op vir ipsec-werking
Ons sal ook 'n algemene aanmeldwagwoord instel. Die gedeelde wagwoord moet aan alle netwerkdeelnemers bekend wees vir stawing. Hierdie metode is natuurlik onbetroubaar, want hierdie wagwoord kan maklik bekend word aan individue aan wie ons nie toegang tot die netwerk wil verskaf nie.
Selfs hierdie feit sal egter nie die sekuriteit van die netwerk beïnvloed nie, want Basiese data-enkripsie en gebruikersverifikasie word deur die PPP-protokol uitgevoer. Maar in regverdigheid is dit opmerklik dat strongswan veiliger tegnologieë vir verifikasie ondersteun, byvoorbeeld deur private sleutels te gebruik. Strongswan het ook die vermoë om stawing met behulp van slimkaarte te verskaf, maar tot dusver word slegs 'n beperkte reeks toestelle ondersteun en daarom is verifikasie met behulp van Rutoken-tokens en -slimkaarte steeds moeilik. Kom ons stel 'n algemene wagwoord via lêer /etc/strongswan/ipsec.secrets:
Kom ons konfigureer dit via lêer /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
Ons reik die wortelsertifikaat en bedienersertifikaat uit:
#директория с сертификатами пользователей, УЦ и сервера
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
Ons is dus klaar met die basiese bedieneropstelling. Die res van die bedienerkonfigurasie behels die byvoeging van nuwe kliënte.
Voeg 'n nuwe kliënt by
Om 'n nuwe kliënt by die netwerk te voeg, moet jy sy sertifikaat by die lys van vertroudes vir hierdie kliënt voeg.
As 'n gebruiker 'n lid van 'n VPN-netwerk wil word, skep hy 'n sleutelpaar en 'n sertifikaattoepassing vir hierdie kliënt. As die gebruiker vertrou word, kan hierdie toepassing onderteken word, en die gevolglike sertifikaat kan na die sertifikategids geskryf word:
AANTEKENINGE
Om verwarring te voorkom, is dit beter dat: Algemene Naam, sertifikaatlêernaam en gebruikersnaam uniek moet wees.
Dit is ook die moeite werd om na te gaan dat die naam van die gebruiker wat ons byvoeg, nêrens in ander stawinglêers verskyn nie, anders sal daar probleme wees met die manier waarop die gebruiker geverifieer word.
Dieselfde sertifikaat moet aan die gebruiker teruggestuur word.
Genereer 'n sleutelpaar en sertifikaat
Vir suksesvolle verifikasie moet die kliënt:
genereer 'n sleutelpaar;
'n CA-wortelsertifikaat hê;
'n sertifikaat hê vir jou sleutelpaar wat deur die wortel-CA onderteken is.
vir kliënt op Linux
Kom ons genereer eers 'n sleutelpaar op die teken en skep 'n toepassing vir die sertifikaat:
Stuur die client.req-toepassing wat aan die CA verskyn. Sodra jy 'n sertifikaat vir jou sleutelpaar ontvang het, skryf dit op 'n teken met dieselfde ID as die sleutel:
vir Windows- en Linux-kliënte (meer universele metode)
Hierdie metode is meer universeel, want laat jou toe om 'n sleutel en sertifikaat te genereer wat suksesvol deur Windows- en Linux-gebruikers herken sal word, maar dit vereis 'n Windows-masjien om die sleutelgenereringsprosedure uit te voer.
Voordat u versoeke genereer en sertifikate invoer, moet u die wortelsertifikaat van die VPN-netwerk by die lys van betroubares voeg. Om dit te doen, maak dit oop en kies die opsie "Installeer sertifikaat" in die venster wat oopmaak:
In die venster wat oopmaak, kies installering van 'n sertifikaat vir die plaaslike gebruiker:
Kom ons installeer die sertifikaat in die CA se vertroude wortelsertifikaatwinkel:
Na al hierdie aksies stem ons saam met alle verdere punte. Die stelsel is nou gekonfigureer.
Kom ons skep 'n lêer cert.tmp met die volgende inhoud:
Hierna sal ons 'n sleutelpaar genereer en 'n toepassing vir die sertifikaat skep. Om dit te doen, maak powershell oop en voer die volgende opdrag in:
certreq.exe -new -pin $PIN .cert.tmp .client.req
Stuur die geskepde toepassing client.req na jou CA en wag vir die client.pem-sertifikaat om ontvang te word. Dit kan na 'n teken geskryf word en by die Windows-sertifikaatwinkel gevoeg word deur die volgende opdrag te gebruik:
certreq.exe -accept .client.pem
Dit is opmerklik dat soortgelyke aksies gereproduseer kan word met behulp van die grafiese koppelvlak van die mmc-program, maar hierdie metode is meer tydrowend en minder programmeerbaar.
Die opstel van die Ubuntu-kliënt
AANTEKENINGE
Die opstel van 'n kliënt op Linux is tans redelik tydrowend, want ... vereis die bou van aparte programme vanaf die bron. Ons sal probeer om te verseker dat alle veranderinge in die nabye toekoms by die amptelike bewaarplekke ingesluit word.
Om verbinding op die IPSec-vlak met die bediener te verseker, word die strongswan-pakket en die xl2tp-daemon gebruik. Om die verbinding met die netwerk met behulp van slimkaarte te vereenvoudig, sal ons die l2tp-ipsec-vpn-pakket gebruik, wat 'n grafiese dop bied vir vereenvoudigde verbindingsopstelling.
Kom ons begin die elemente stap vir stap saamstel, maar voor dit sal ons al die nodige pakkette installeer sodat die VPN direk kan werk:
sudo apt-get install xl2tpd strongswan libp11-3
Installeer sagteware om met tokens te werk
Installeer die nuutste librtpkcs11ecp.so-biblioteek vanaf werf, ook biblioteke om met slimkaarte te werk:
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
Die installering van die L2tpIpsecVpn-kliënt
Op die oomblik moet die kliënt ook uit bronkode saamgestel word. Dit word gedoen deur die volgende volgorde van opdragte te gebruik:
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
Stel die L2tpIpsecVpn-kliënt op
Begin die geïnstalleerde kliënt:
Na bekendstelling moet die L2tpIpsecVPN-applet oopmaak. Regskliek daarop en stel die verbinding op:
Om met tokens te werk, dui ons eerstens die pad na die opensc-enjin van die OpenSSL-enjin en die PKCS#11-biblioteek aan. Om dit te doen, maak die "Voorkeure"-oortjie oop om openssl-parameters op te stel:
.
Kom ons maak die OpenSSL-instellingsvenster toe en gaan aan om die netwerk op te stel. Kom ons voeg 'n nuwe netwerk by deur op die Voeg by...-knoppie in die instellingspaneel te klik en die netwerknaam in te voer:
Hierna sal hierdie netwerk in die instellingspaneel beskikbaar wees. Dubbel-regs-kliek op die nuwe netwerk om dit op te stel. Op die eerste oortjie moet u IPsec-instellings maak. Kom ons stel die bedieneradres en publieke sleutel:
Gaan hierna na die PPP-instellings-oortjie en dui daar die gebruikersnaam aan waaronder ons toegang tot die netwerk wil hê:
Hierna, maak die Eienskappe-oortjie oop en spesifiseer die pad na die sleutel, kliëntsertifikaat en CA:
Kom ons maak hierdie oortjie toe en voer die finale instellings uit; Om dit te doen, maak die "IP-instellings"-oortjie oop en merk die blokkie langs die "Verkry DNS-bedieneradres outomaties" opsie:
Hierdie opsie sal die kliënt toelaat om 'n persoonlike IP-adres binne die netwerk vanaf die bediener te ontvang.
Na al die instellings, maak alle oortjies toe en herbegin die kliënt:
Koppel aan die netwerk
Na die instellings kan jy aan die netwerk koppel. Om dit te doen, maak die applet-oortjie oop en kies die netwerk waaraan ons wil koppel:
Tydens die verbindingsproses sal die kliënt ons vra om die Rutoken-PIN-kode in te voer:
As 'n kennisgewing in die statusbalk verskyn dat die verbinding suksesvol tot stand gebring is, beteken dit dat die opstelling suksesvol was:
Andersins is dit die moeite werd om uit te vind hoekom die verbinding nie tot stand gebring is nie. Om dit te doen, moet jy na die programlogboek kyk deur die "Connection information"-opdrag in die applet te kies:
Stel die Windows-kliënt op
Om 'n kliënt op Windows op te stel is baie makliker as op Linux, want ... Al die nodige sagteware is reeds in die stelsel ingebou.
Stelselinstelling
Ons sal al die nodige drywers installeer om met Rutokens te werk deur dit af te laai vanaf van. werf.
Voer tans 'n wortelsertifikaat in vir stawing
Laai die bedienerwortelsertifikaat af en installeer dit op die stelsel. Om dit te doen, maak dit oop en kies die opsie "Installeer sertifikaat" in die venster wat oopmaak:
In die venster wat oopmaak, kies die installering van 'n sertifikaat vir die plaaslike gebruiker. As jy wil hê dat die sertifikaat vir alle gebruikers op die rekenaar beskikbaar moet wees, moet jy kies om die sertifikaat op die plaaslike rekenaar te installeer:
Kom ons installeer die sertifikaat in die CA se vertroude wortelsertifikaatwinkel:
Na al hierdie aksies stem ons saam met alle verdere punte. Die stelsel is nou gekonfigureer.
Stel 'n VPN-verbinding op
Om 'n VPN-verbinding op te stel, gaan na die beheerpaneel en kies die opsie om 'n nuwe verbinding te skep.
In die opspringvenster, kies die opsie om 'n verbinding te skep om aan jou werkplek te koppel:
Kies 'n VPN-verbinding in die volgende venster:
en voer die VPN-verbindingbesonderhede in, en spesifiseer ook die opsie om 'n slimkaart te gebruik:
Die opstelling is nog nie voltooi nie. Al wat oorbly, is om die gedeelde sleutel vir die IPsec-protokol te spesifiseer; om dit te doen, gaan na die "Netwerkverbindingsinstellings"-oortjie en gaan dan na die "Eienskappe vir hierdie verbinding"-oortjie:
In die venster wat oopmaak, gaan na die "Sekuriteit"-oortjie, spesifiseer "L2TP/IPsec Network" as die netwerktipe en kies "Gevorderde instellings":
In die venster wat oopmaak, spesifiseer die gedeelde IPsec-sleutel:
Подключение
Nadat u die opstelling voltooi het, kan u probeer om aan die netwerk te koppel:
Tydens die verbindingsproses sal daar van ons verwag word om die token-PIN-kode in te voer:
Ons het 'n veilige VPN-netwerk opgestel en seker gemaak dat dit nie moeilik is nie.
Erkennings
Ek wil weereens ons kollegas Vasily Shokov en Alexander Smirnov bedank vir die werk wat hulle saam gedoen het om die skepping van VPN-verbindings vir Linux-kliënte te vereenvoudig.