ProHoster > BLOG > administrare > Configurarea autentificării în rețeaua L2TP utilizând Rutoken EDS 2.0 și Rutoken PKI
Configurarea autentificării în rețeaua L2TP utilizând Rutoken EDS 2.0 și Rutoken PKI
Probleme
Recent, mulți nu știau cum este să lucrezi de acasă. Pandemia a schimbat dramatic situația din lume; toată lumea a început să se adapteze la circumstanțele actuale, și anume la faptul că a devenit pur și simplu nesigur să părăsești casa. Și mulți au fost nevoiți să organizeze rapid munca de acasă pentru angajații lor.
Cu toate acestea, lipsa unei abordări competente în alegerea soluțiilor pentru munca la distanță poate duce la pierderi ireversibile. Parolele utilizatorilor pot fi furate, iar acest lucru va permite unui atacator să se conecteze necontrolat la rețeaua și resursele IT ale întreprinderii.
De aceea, nevoia de a crea rețele VPN corporative de încredere a crescut acum. O să vă povestesc despre de încredere, seif и simplu în utilizarea unei rețele VPN.
Funcționează conform schemei IPsec/L2TP, care utilizează chei și certificate care nu pot fi recuperate stocate pe token-uri pentru a autentifica clienții și, de asemenea, transmite date prin rețea în formă criptată.
Un server cu CentOS 7 (adresă: centos.vpn.server.ad) și un client cu Ubuntu 20.04, precum și un client cu Windows 10, au fost folosite ca standuri demonstrative pentru configurare.
Descrierea sistemului
VPN-ul va funcționa conform schemei IPSec + L2TP + PPP. Protocol Protocolul punct-la-punct (PPP) operează la nivelul de legătură de date al modelului OSI și oferă autentificarea utilizatorului și criptarea datelor transmise. Datele sale sunt încapsulate în datele protocolului L2TP, care asigură de fapt crearea unei conexiuni în rețeaua VPN, dar nu asigură autentificare și criptare.
Datele L2TP sunt încapsulate în IPSec, care oferă, de asemenea, autentificare și criptare, dar spre deosebire de PPP, autentificarea și criptarea au loc la nivel de dispozitiv, nu la nivel de utilizator.
Această caracteristică vă permite să autentificați utilizatorii numai de pe anumite dispozitive. Vom folosi protocolul IPSec așa cum este și vom permite autentificarea utilizatorului de pe orice dispozitiv.
Autentificarea utilizatorului folosind carduri inteligente va fi efectuată la nivel de protocol PPP folosind protocolul EAP-TLS.
Informații mai detaliate despre funcționarea acestui circuit pot fi găsite în acest articol.
De ce această schemă îndeplinește toate cele trei cerințe ale unei rețele VPN bune?
Fiabilitatea acestei scheme a fost testată de timp. A fost folosit pentru implementarea rețelelor VPN din 2000.
Autentificarea sigură a utilizatorului este asigurată de protocolul PPP. Implementarea standard a protocolului PPP dezvoltat de Paul Mackerras nu oferă un nivel suficient de securitate, deoarece Pentru autentificare, în cel mai bun caz, se utilizează autentificarea folosind un login și o parolă. Știm cu toții că o parolă de conectare poate fi spionată, ghicită sau furată. Cu toate acestea, de mult timp, dezvoltatorul Jan Just Keijser в implementarea acestuia Acest protocol a corectat această problemă și a adăugat posibilitatea de a utiliza protocoale bazate pe criptare asimetrică, cum ar fi EAP-TLS, pentru autentificare. În plus, a adăugat posibilitatea de a utiliza carduri inteligente pentru autentificare, ceea ce a făcut sistemul mai sigur.
În prezent, sunt în desfășurare negocieri active pentru fuzionarea acestor două proiecte și poți fi sigur că mai devreme sau mai târziu acest lucru se va întâmpla oricum. De exemplu, o versiune corectată a PPP a fost în depozitele Fedora de mult timp, folosind protocoale securizate pentru autentificare.
Până de curând, această rețea putea fi folosită doar de utilizatorii de Windows, dar colegii noștri de la Universitatea de Stat din Moscova Vasily Shokov și Alexander Smirnov au descoperit proiect client L2TP vechi pentru Linux si l-a modificat. Împreună, am remediat multe erori și neajunsuri în activitatea clientului, am simplificat instalarea și configurarea sistemului, chiar și atunci când construim de la sursă. Cele mai semnificative dintre ele sunt:
S-au rezolvat problemele de compatibilitate ale clientului vechi cu interfața versiunilor noi de openssl și qt.
S-a eliminat pppd de la trecerea codului PIN al simbolului printr-un fișier temporar.
S-a remediat lansarea incorectă a programului de solicitare a parolei prin interfața grafică. Acest lucru a fost realizat prin instalarea mediului corect pentru serviciul xl2tpd.
Construirea demonului L2tpIpsecVpn este acum realizată împreună cu construirea clientului însuși, ceea ce simplifică procesul de construire și configurare.
Pentru ușurința dezvoltării, sistemul Azure Pipelines este conectat pentru a testa corectitudinea construcției.
S-a adăugat capacitatea de a forța downgrade nivel de securitate în contextul openssl. Acest lucru este util pentru a susține corect sistemele de operare noi în care nivelul de securitate standard este setat la 2, cu rețele VPN care utilizează certificate care nu îndeplinesc cerințele de securitate ale acestui nivel. Această opțiune va fi utilă pentru lucrul cu rețele VPN vechi existente.
Versiunea corectată poate fi găsită în acest depozit.
Acest client acceptă utilizarea cardurilor inteligente pentru autentificare și, de asemenea, ascunde cât mai mult posibil toate dificultățile și greutățile de a configura această schemă sub Linux, făcând configurarea clientului cât mai simplă și rapidă posibil.
Desigur, pentru o conexiune convenabilă între PPP și interfața grafică a clientului, nu a fost posibil fără modificări suplimentare pentru fiecare dintre proiecte, dar cu toate acestea au fost minimizate și reduse la minimum:
Fix eroare în ordinea încărcării configurației și inițializării contextului openssl. Această eroare nu ne-a permis să încărcăm nimic din fișierul de configurare local /etc/ppp/openssl.cnf, cu excepția informațiilor despre motoarele openssl pentru lucrul cu carduri inteligente, ceea ce a reprezentat un inconvenient serios dacă, de exemplu, pe lângă informațiile despre motoare, am vrut să setăm altceva. De exemplu, remediați nivelul de securitate atunci când stabiliți o conexiune.
Acum puteți începe configurarea.
Ajustarea serverului
Să instalăm toate pachetele necesare.
Instalarea strongswan (IPsec)
În primul rând, să configuram firewall-ul pentru funcționarea ipsec
După instalare, trebuie să configurați strongswan (una dintre implementările IPSec). Pentru a face acest lucru, editați fișierul /etc/strongswan/ipsec.conf :
De asemenea, vom seta o parolă de conectare comună. Parola partajată trebuie să fie cunoscută de toți participanții la rețea pentru autentificare. Această metodă este evident nesigură, deoarece această parolă poate deveni ușor cunoscută persoanelor cărora nu dorim să le oferim acces la rețea.
Cu toate acestea, nici acest fapt nu va afecta securitatea rețelei, deoarece Criptarea de bază a datelor și autentificarea utilizatorului se realizează prin protocolul PPP. Dar, în mod corect, merită remarcat faptul că strongswan acceptă tehnologii mai sigure pentru autentificare, de exemplu, folosind chei private. Strongswan are, de asemenea, capacitatea de a oferi autentificare folosind carduri inteligente, dar până acum sunt acceptate doar o gamă limitată de dispozitive și, prin urmare, autentificarea folosind jetoane și carduri inteligente Rutoken este încă dificilă. Să setăm o parolă generală prin fișier /etc/strongswan/ipsec.secrets:
Să o configuram prin fișier /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
Emitem certificatul rădăcină și certificatul serverului:
#директория с сертификатами пользователей, УЦ и сервера
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
Astfel, am terminat cu configurarea de bază a serverului. Restul configurației serverului implică adăugarea de noi clienți.
Adăugarea unui nou client
Pentru a adăuga un nou client în rețea, trebuie să adăugați certificatul acestuia la lista celor de încredere pentru acest client.
Dacă un utilizator dorește să devină membru al unei rețele VPN, el creează o pereche de chei și o aplicație de certificat pentru acest client. Dacă utilizatorul este de încredere, atunci această aplicație poate fi semnată, iar certificatul rezultat poate fi scris în directorul de certificate:
NOTĂ
Pentru a evita confuzia, este mai bine ca: Numele comun, numele fișierului certificat și numele utilizatorului să fie unice.
De asemenea, merită să verificați că numele utilizatorului pe care îl adăugăm nu apare nicăieri în alte fișiere de autentificare, altfel vor apărea probleme cu modul în care utilizatorul este autentificat.
Același certificat trebuie trimis înapoi utilizatorului.
Generarea unei perechi de chei și a unui certificat
Pentru o autentificare cu succes, clientul trebuie:
generați o pereche de chei;
să aibă un certificat rădăcină CA;
aveți un certificat pentru perechea de chei semnat de CA rădăcină.
pentru client pe Linux
Mai întâi, să generăm o pereche de chei pe token și să creăm o aplicație pentru certificat:
Trimiteți aplicația client.req care apare CA. După ce primiți un certificat pentru perechea de chei, scrieți-l într-un simbol cu același id ca și cheia:
pentru clienții Windows și Linux (metoda mai universală)
Această metodă este mai universală, deoarece vă permite să generați o cheie și un certificat care vor fi recunoscute cu succes de utilizatorii Windows și Linux, dar necesită o mașină Windows pentru a efectua procedura de generare a cheii.
Înainte de a genera cereri și de a importa certificate, trebuie să adăugați certificatul rădăcină al rețelei VPN la lista celor de încredere. Pentru a face acest lucru, deschideți-l și în fereastra care se deschide, selectați opțiunea „Instalare certificat”:
În fereastra care se deschide, selectați instalarea unui certificat pentru utilizatorul local:
Să instalăm certificatul în depozitul de certificate rădăcină de încredere al CA:
După toate aceste acțiuni, suntem de acord cu toate punctele suplimentare. Sistemul este acum configurat.
Să creăm un fișier cert.tmp cu următorul conținut:
După aceasta, vom genera o pereche de chei și vom crea o aplicație pentru certificat. Pentru a face acest lucru, deschideți powershell și introduceți următoarea comandă:
certreq.exe -new -pin $PIN .cert.tmp .client.req
Trimiteți aplicația creată client.req către CA dumneavoastră și așteptați ca certificatul client.pem să fie primit. Poate fi scris pe un token și adăugat la depozitul de certificate Windows folosind următoarea comandă:
certreq.exe -accept .client.pem
Este de remarcat faptul că acțiuni similare pot fi reproduse folosind interfața grafică a programului mmc, dar această metodă este mai consumatoare de timp și mai puțin programabilă.
Configurarea clientului Ubuntu
NOTĂ
Configurarea unui client pe Linux necesită în prezent destul de mult timp, deoarece... necesită construirea de programe separate de la sursă. Vom încerca să ne asigurăm că toate modificările sunt incluse în depozitele oficiale în viitorul apropiat.
Pentru a asigura conexiunea la nivel IPSec la server, se utilizează pachetul strongswan și demonul xl2tp. Pentru a simplifica conectarea la rețea folosind carduri inteligente, vom folosi pachetul l2tp-ipsec-vpn, care oferă un shell grafic pentru configurarea simplificată a conexiunii.
Să începem asamblarea elementelor pas cu pas, dar înainte de asta vom instala toate pachetele necesare pentru ca VPN să funcționeze direct:
sudo apt-get install xl2tpd strongswan libp11-3
Instalarea software-ului pentru lucrul cu jetoane
Instalați cea mai recentă bibliotecă librtpkcs11ecp.so din сайта, de asemenea biblioteci pentru lucrul cu carduri inteligente:
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
Instalarea clientului L2tpIpsecVpn
În acest moment, clientul trebuie să fie compilat și din codul sursă. Acest lucru se face folosind următoarea secvență de comenzi:
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
Configurarea clientului L2tpIpsecVpn
Lansați clientul instalat:
După lansare, ar trebui să se deschidă aplicația L2tpIpsecVPN. Faceți clic dreapta pe el și configurați conexiunea:
Pentru a lucra cu jetoane, în primul rând, indicăm calea către motorul opensc al motorului OpenSSL și biblioteca PKCS#11. Pentru a face acest lucru, deschideți fila „Preferințe” pentru a configura parametrii openssl:
.
Să închidem fereastra de setări OpenSSL și să trecem la configurarea rețelei. Să adăugăm o nouă rețea făcând clic pe butonul Adăugați... din panoul de setări și introduceți numele rețelei:
După aceasta, această rețea va deveni disponibilă în panoul de setări. Faceți dublu clic dreapta pe noua rețea pentru a o configura. În prima filă trebuie să faceți setări IPsec. Să setăm adresa serverului și cheia publică:
După aceasta, mergeți la fila Setări PPP și indicați acolo numele de utilizator sub care dorim să accesăm rețeaua:
După aceasta, deschideți fila Proprietăți și specificați calea către cheie, certificatul client și CA:
Să închidem această filă și să efectuăm setările finale; pentru a face acest lucru, deschideți fila „Setări IP” și bifați caseta de lângă opțiunea „Obține automat adresa serverului DNS”:
Această opțiune va permite clientului să primească o adresă IP personală în rețea de la server.
După toate setările, închideți toate filele și reporniți clientul:
Conectare la rețea
După setări, vă puteți conecta la rețea. Pentru a face acest lucru, deschideți fila applet și selectați rețeaua la care vrem să ne conectăm:
În timpul procesului de stabilire a conexiunii, clientul ne va cere să introducem codul PIN Rutoken:
Dacă în bara de stare apare o notificare că conexiunea a fost stabilită cu succes, înseamnă că configurarea a avut succes:
În caz contrar, merită să ne dăm seama de ce nu a fost stabilită conexiunea. Pentru a face acest lucru, ar trebui să vă uitați la jurnalul programului selectând comanda „Informații de conectare” din applet:
Configurarea clientului Windows
Configurarea unui client pe Windows este mult mai ușoară decât pe Linux, deoarece... Tot software-ul necesar este deja încorporat în sistem.
Configurarea sistemului
Vom instala toate driverele necesare pentru a lucra cu Rutokens descărcându-le de pe de. site-ul.
Importul unui certificat rădăcină pentru autentificare
Descărcați certificatul rădăcină a serverului și instalați-l pe sistem. Pentru a face acest lucru, deschideți-l și în fereastra care se deschide, selectați opțiunea „Instalare certificat”:
În fereastra care se deschide, selectați instalarea unui certificat pentru utilizatorul local. Dacă doriți ca certificatul să fie disponibil pentru toți utilizatorii de pe computer, atunci ar trebui să alegeți să instalați certificatul pe computerul local:
Să instalăm certificatul în depozitul de certificate rădăcină de încredere al CA:
După toate aceste acțiuni, suntem de acord cu toate punctele suplimentare. Sistemul este acum configurat.
Configurarea unei conexiuni VPN
Pentru a configura o conexiune VPN, accesați panoul de control și selectați opțiunea pentru a crea o nouă conexiune.
În fereastra pop-up, selectați opțiunea de a crea o conexiune pentru a vă conecta la locul de muncă:
În fereastra următoare, selectați o conexiune VPN:
și introduceți detaliile conexiunii VPN și, de asemenea, specificați opțiunea de a utiliza un smart card:
Configurarea nu este completă încă. Tot ce rămâne este să specificați cheia partajată pentru protocolul IPsec; pentru a face acest lucru, mergeți la fila „Setări de conexiune la rețea” și apoi accesați fila „Proprietăți pentru această conexiune”:
În fereastra care se deschide, accesați fila „Securitate”, specificați „Rețea L2TP/IPsec” ca tip de rețea și selectați „Setări avansate”:
În fereastra care se deschide, specificați cheia IPsec partajată:
conexiune
După finalizarea configurării, puteți încerca să vă conectați la rețea:
În timpul procesului de conectare, ni se va solicita să introducem codul PIN indicativ:
Am creat o rețea VPN securizată și ne-am asigurat că nu este dificil.
Mulțumiri
Aș dori să le mulțumesc încă o dată colegilor noștri Vasily Shokov și Alexander Smirnov pentru munca depusă împreună pentru a simplifica crearea de conexiuni VPN pentru clienții Linux.