
I prublemi
Recentemente, assai ùn sapianu micca ciò chì era di travaglià da casa. A pandemia hà cambiatu dramaticamente a situazione in u mondu; ognunu hà cuminciatu à adattà à e circustanze attuali, vale à dì à u fattu chì hè diventatu simplicemente inseguru per lascià a casa. È parechji avianu da urganizà rapidamente u travagliu da casa per i so impiegati.
Tuttavia, a mancanza di un accostu cumpetente à sceglie suluzioni per u travagliu remoto pò purtà à perdite irreversibili. I password di l'utilizatori ponu esse arrubati, è questu permetterà à un attaccu di cunnetta incontrollably à a reta è e risorse IT di l'impresa.
Hè per quessa chì a necessità di creà rete VPN corporativa affidabile hè avà aumentata. Vi dicu affidabile, sicuru и простой in usu di una reta VPN.
Funziona secondu u schema IPsec / L2TP, chì usa chjavi non recuperabili è certificati almacenati in tokens per autentificà i clienti, è ancu trasmette dati nantu à a reta in forma criptata.
Un servitore cun CentOS 7 (indirizzu: centos.vpn.server.ad) è un cliente cù Ubuntu 20.04, è ancu u cliente cun Windows 10.
Descrizione di u Sistema
A VPN hà da travaglià secondu u schema IPSec + L2TP + PPP. Protocolu Protocolu puntu à puntu (PPP) opera à a strata di ligame di dati di u mudellu OSI è furnisce l'autentificazione di l'utilizatori è a criptografia di e dati trasmessi. I so dati sò incapsulati in i dati di u protocolu L2TP, chì in realtà assicura a creazione di una cunnessione in a reta VPN, ma ùn furnisce micca autentificazione è criptografia.
I dati L2TP sò incapsulati in IPSec, chì furnisce ancu l'autentificazione è a criptografia, ma à u cuntrariu di PPP, l'autentificazione è a criptografia si trovanu à u livellu di u dispositivu, micca à u livellu di l'utilizatori.
Sta funzione permette à voi à autentificà utilizatori solu da certi dispusitivi. Utilizemu u protocolu IPSec cum'è hè è permette l'autentificazione di l'utilizatori da qualsiasi dispositivu.

L'autentificazione di l'utilizatori cù e carte intelligenti serà realizatu à u livellu di u protocolu PPP utilizendu u protocolu EAP-TLS.
L'infurmazione più dettagliata nantu à u funziunamentu di stu circuitu pò esse truvata in .
Perchè stu schema risponde à tutti i trè esigenze di una bona rete VPN?
- L'affidabilità di stu schema hè stata pruvata da u tempu. Hè stata utilizata per implementà e rete VPN dapoi u 2000.
- L'autentificazione sicura di l'utilizatori hè furnita da u protocolu PPP. ùn furnisce micca un livellu di sicurità abbastanza, perchè Per l'autentificazione, in u megliu casu, l'autentificazione cù un login è una password hè utilizata. Tutti sapemu chì una password di login pò esse spiata, guessed o arrubbata. Tuttavia, per un bellu pezzu avà u sviluppatore в Stu protokollu hà currettu stu prublema è aghjunghjenu a capacità di utilizà protokolli basati nantu à a criptografia asimmetrica, cum'è EAP-TLS, per l'autentificazione. Inoltre, hà aghjustatu a capacità di utilizà smart cards per l'autentificazione, chì hà fattu u sistema più sicuru.
Attualmente, negoziazioni attive sò in corso per unisce sti dui prughjetti è pudete esse sicuru chì prima o dopu questu succederà in ogni modu. Per esempiu, una versione patched di PPP hè stata in i repositori Fedora per un bellu pezzu, utilizendu protokolli sicuri per l'autentificazione. - Finu à pocu tempu fà, sta rete pudia esse aduprata solu da l'utilizatori Windows, ma i nostri culleghi di l'Università Statale di Mosca Vasily Shokov è Alexander Smirnov anu trovu è hà mudificatu. Inseme, avemu riparatu assai bugs è difetti in u travagliu di u cliente, simplificatu a stallazione è a cunfigurazione di u sistema, ancu quandu custruiscenu da a fonte. I più significati di elli sò:
- Fixed i prublemi di cumpatibilità di u vechju cliente cù l'interfaccia di novi versioni di openssl è qt.
- Eliminatu pppd da passà u token PIN per un schedariu tempurale.
- Fixed u lanciu incorrectu di u prugramma di dumanda di password attraversu l'interfaccia grafica. Questu hè statu fattu installendu l'ambiente currettu per u serviziu xl2tpd.
- A custruzzione di u daemon L2tpIpsecVpn hè avà realizatu inseme cù a custruzzione di u cliente stessu, chì simplifica u prucessu di creazione è cunfigurazione.
- Per facilità di sviluppu, u sistema Azure Pipelines hè cunnessu per pruvà a correttezza di a custruzione.
- Aggiunta a capacità di furzà u downgrade in u cuntestu di openssl. Questu hè utile per supportà currettamente i novi sistemi operativi induve u nivellu di sicurità standard hè stabilitu à 2, cù e rete VPN chì utilizanu certificati chì ùn cumplenu micca i requisiti di sicurezza di stu livellu. Questa opzione serà utile per travaglià cù e vecchie rete VPN esistenti.
A versione curretta pò esse truvata in .
Stu cliente sustene l'usu di carte intelligenti per l'autentificazione, è ancu piatta u più pussibule tutte e difficultà è e difficultà di mette in opera stu schema sottu Linux, rendendu a cunfigurazione di u cliente u più simplice è rapida pussibule.
Di sicuru, per una cunnessione còmuda trà PPP è a GUI di u cliente, ùn era micca pussibule senza editi supplementari à ognunu di i prughjetti, ma in ogni modu sò stati minimizati è ridotti à u minimu:
- Arregulatu
- Arregulatu . Stu errore ùn ci hà micca permessu di carricà nunda da u schedariu di cunfigurazione /etc/ppp/openssl.cnf lucale eccettu l'infurmazioni nantu à i motori openssl per travaglià cù carte intelligenti, chì era un inconveniente seriu si, per esempiu, in più di l'infurmazioni nantu à i motori, avemu vulsutu stabilisce qualcosa d'altru. Per esempiu, riparà u livellu di sicurità quandu stabilisce una cunnessione.
Avà pudete inizià a stallazione.
Sintonizazione di u servitore
Stallà tutti i pacchetti necessarii.
Installazione di strongswan (IPsec)
Prima di tuttu, cunfiguremu u firewall per l'operazione ipsec
sudo firewall-cmd --permanent --add-port=1701/{tcp,udp}
sudo firewall-cmd --permanent --add-service=ipsec
sudo firewall-cmd --reload
Allora cuminciamu a stallazione
sudo yum install epel-release ipsec-tools dnf
sudo dnf install strongswan
Dopu a stallazione, avete bisognu di cunfigurà strongswan (una di l'implementazioni IPSec). Per fà questu, edità u schedariu /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-modp1024
Avemu ancu stabilisce una password di login cumuni. A password sparta deve esse cunnisciuta da tutti i participanti di a rete per l'autentificazione. Stu metudu hè ovviamente inaffidabile, perchè sta password pò esse facilmente cunnisciuta da e persone à quale ùn vulemu micca furnisce l'accessu à a reta.
Tuttavia, ancu stu fattu ùn affettarà a sicurità di a reta, perchè A criptografia di basa di dati è l'autentificazione di l'utilizatori sò realizati da u protocolu PPP. Ma in ghjustizia, vale a pena nutà chì strongswan sustene tecnulugii più sicuri per l'autentificazione, per esempiu, utilizendu chjavi privati. Strongswan hà ancu a capacità di furnisce l'autentificazione cù e carte intelligenti, ma finu à avà sò supportati solu una gamma limitata di dispositivi è per quessa l'autentificazione cù i tokens Rutoken è e carte intelligenti hè sempre difficiule. Fighjemu una password generale via u schedariu /etc/strongswan/ipsec.secrets:
# ipsec.secrets - strongSwan IPsec secrets file
%any %any : PSK "SECRET_PASSPHRASE"
Ripartemu strongswan:
sudo systemctl enable strongswan
sudo systemctl restart strongswan
Installazione di xl2tp
sudo dnf install xl2tpd
Cunfiguremu via u schedariu /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
Ripitemu u serviziu:
sudo systemctl enable xl2tpd
sudo systemctl restart xl2tpd
Configurazione PPP
Hè cunsigliatu di stallà l'ultima versione di pppd. Per fà questu, eseguite a seguente sequenza di cumandamenti:
sudo yum install git make gcc openssl-devel
git clone "https://github.com/jjkeijser/ppp"
cd ppp
./configure --prefix /usr
make -j4
sudo make install
Scrivite à u schedariu /etc/ppp/options.xl2tpd i seguenti (se ci sò qualchi valori, pudete sguassà):
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 5000
Emettemu u certificatu root è u certificatu di u servitore:
#директория с сертификатами пользователей, УЦ и сервера
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
Cusì, avemu finitu cù a configurazione di basa di u servitore. U restu di a cunfigurazione di u servitore implica l'aghjunghje novi clienti.
Aghjunghjendu un novu cliente
Per aghjunghje un novu cliente à a reta, duvete aghjunghje u so certificatu à a lista di quelli di fiducia per stu cliente.
Se un utilizatore vole diventà un membru di una rete VPN, crea una coppia di chjave è una applicazione di certificatu per questu cliente. Se l'utilizatore hè fiduciale, allora sta applicazione pò esse firmata, è u certificatu risultatu pò esse scrittu à u cartulare di i certificati:
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 -CAcreateserial
Aghjunghjite una linea à u file /etc/ppp/eaptls-server per currisponde à u nome di u cliente è u so certificatu:
"client" * /etc/ppp/certs/client.pem /etc/ppp/certs/server.pem /etc/ppp/certs/ca.pem /etc/ppp/keys/server.pem *
DA
Per evità a cunfusione, hè megliu chì: u nome cumuni, u nome di u schedariu di certificatu è u nome d'utilizatore sia unicu.
Hè ancu vale a pena di verificà chì u nome di l'utilizatore chì aghjustemu ùn appare micca in ogni locu in altri schedarii di autentificazione, altrimenti ci saranu prublemi cù a manera chì l'utilizatore hè autentificatu.
U listessu certificatu deve esse mandatu à l'utilizatore.
Generazione di una coppia di chjave è certificatu
Per autentificazione successu, u cliente deve:
- generà una coppia di chjave;
- avè un certificatu di root CA;
- avè un certificatu per a vostra coppia di chjave firmata da a CA root.
per u cliente nantu à Linux
Prima, generemu una coppia di chjave nantu à u token è crea una applicazione per u certificatu:
#идентификатор ключа (параметр --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"
Mandate l'applicazione client.req chì appare à u CA. Quandu avete ricevutu un certificatu per a vostra coppia di chjave, scrivite in un token cù u listessu id cum'è a chjave:
pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -l -y cert -w ./client.pem --id 45
per i clienti Windows и Linux (un metudu più universale)
Stu metudu hè più universale, postu chì vi permette di generà una chjave è un certificatu chì saranu ricunnisciuti cù successu da l'utilizatori. Windows и Linux, ma ci vole à avè una vittura Windows per realizà a prucedura di generazione di chjave.
Prima di generà richieste è impurtà certificati, duvete aghjunghje u certificatu radicale di a rete VPN à a lista di quelli di fiducia. Per fà questu, apre è in a finestra chì apre, selezziunate l'opzione "Installa certificatu":

In a finestra chì si apre, selezziunate installà un certificatu per l'utilizatore locale:

Stallà u certificatu in u magazzinu di certificati root di fiducia di a CA:

Dopu tutte queste azzioni, simu d'accordu cù tutti i punti più. U sistema hè avà cunfiguratu.
Creemu un schedariu cert.tmp cù u cuntenutu seguente:
[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 = FALSE
Dopu questu, genereremu una coppia di chjave è creeremu una applicazione per u certificatu. Per fà questu, apre u Powershell è entre in u cumandimu seguente:
certreq.exe -new -pin $PIN .cert.tmp .client.req
Mandate a dumanda client.req generata à a vostra CA è aspettate chì u certificatu client.pem ghjunghji. Pudete scrive lu in un token è aghjunghje lu à u vostru magazinu di certificati. Windows cù u cumandimu seguente:
certreq.exe -accept .client.pem
Hè da nutà chì l'azzioni simili ponu esse riprodutte cù l'interfaccia gràfica di u prugramma mmc, ma stu metudu hè più tempu è menu programmable.
Configurazione di u cliente Ubuntu
DA
Cunfigurà u cliente per Linux Questu richiede attualmente assai tempu, postu chì richiede a custruzzione di prugrammi individuali da u codice surghjente. Travaglieremu per assicurà chì tutti i cambiamenti sianu inclusi in i repositori ufficiali u più prestu pussibule.
Per assicurà a cunnessione à u livellu IPSec à u servitore, u pacchettu strongswan è u daemon xl2tp sò usati. Per simplificà a cunnessione à a rete cù e carte intelligenti, useremu u pacchettu l2tp-ipsec-vpn, chì furnisce una cunchiglia gràfica per a cunfigurazione di cunnessione simplificata.
Cuminciamu à assemblà l'elementi passu à passu, ma prima di stallà tutti i pacchetti necessarii per a VPN per travaglià direttamente:
sudo apt-get install xl2tpd strongswan libp11-3
Installazione di software per travaglià cù tokens
Installa l'ultima libreria librtpkcs11ecp.so da , ancu biblioteche per travaglià cù carte intelligenti:
sudo apt-get install pcscd pcsc-tools opensc libengine-pkcs11-openssl
Cunnette Rutoken è verificate chì hè ricunnisciutu da u sistema:
pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -O -l
Installazione di ppp patched
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
Installazione di u cliente L2tpIpsecVpn
À u mumentu, u cliente deve ancu esse compilatu da u codice fonte. Questu hè fattu cù a seguente sequenza di cumandamenti:
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
Configurazione di u cliente L2tpIpsecVpn
Lanciate u cliente installatu:

Dopu à u lanciu, l'applet L2tpIpsecVPN deve esse apertu. Cliccate cù u dirittu è cunfigurà a cunnessione:

Per travaglià cù tokens, prima di tuttu, indichemu a strada di u mutore opensc di OpenSSL è a biblioteca PKCS#11. Per fà questu, apre a tabulazione "Preferenze" per cunfigurà i paràmetri openssl:
.
Chiudemu a finestra di paràmetri OpenSSL è andemu à a stallazione di a reta. Aghjunghjite una nova rete clicchendu nantu à u buttone Add... in u pannellu di paràmetri è inserite u nome di a rete:

Dopu questu, sta rete diventerà dispunibule in u pannellu di paràmetri. Cliccate doppiu cliccà nantu à a nova reta per cunfigurà. In a prima tabulazione avete bisognu di fà i paràmetri IPsec. Fighjemu l'indirizzu di u servitore è a chjave publica:

Dopu questu, andate à a tabulazione di paràmetri PPP è indicate quì u nome d'utilizatore sottu quale vulemu accede à a reta:

Dopu questu, apre a tabulazione Proprietà è specifica u percorsu à a chjave, u certificatu di cliente è CA:

Chiudemu sta tabulazione è eseguite i paràmetri finali; per fà questu, apre a tabulazione "Configurazione IP" è verificate a casella accantu à l'opzione "Ottieni l'indirizzu di u servitore DNS automaticamente":

Questa opzione permetterà à u cliente di riceve un indirizzu IP persunale in a reta da u servitore.
Dopu tutti i paràmetri, chjude tutte e tabulazioni è riavvia u cliente:

Cunnessione à a rete
Dopu à i paràmetri, pudete cunnette à a reta. Per fà questu, apre a tabulazione applet è selezziunate a reta à quale vulemu cunnette:

Durante u prucessu di stabilimentu di cunnessione, u cliente ci dumandarà di inserisce u codice PIN Rutoken:

Se una notificazione appare in a barra di statutu chì a cunnessione hè stata stabilita bè, significa chì a stallazione hè stata successu:

Altrimenti, vale a pena capisce perchè a cunnessione ùn hè micca stata stabilita. Per fà questu, duvete guardà u logu di u prugramma selezziunate u cumandimu "Informazioni di cunnessione" in l'applet:

Configurazione di u cliente Windows
Configurazione di u cliente in Windows hè realizatu assai più facilmente chè in Linux, perchè tuttu u software necessariu hè digià integratu in u sistema.
Configurazione di u Sistema
Stallaremu tutti i drivers necessarii per travaglià cù Rutokens scarichenduli da .
Importazione di un certificatu root per l'autentificazione
Scaricate u certificatu root di u servitore è installate in u sistema. Per fà questu, apre è in a finestra chì apre, selezziunate l'opzione "Installa certificatu":

In a finestra chì apre, selezziunate installà un certificatu per l'utilizatore locale. Se vulete chì u certificatu sia dispunibule per tutti l'utilizatori nantu à l'urdinatore, allora duvete sceglie di installà u certificatu in l'urdinatore lucale:

Stallà u certificatu in u magazzinu di certificati root di fiducia di a CA:

Dopu tutte queste azzioni, simu d'accordu cù tutti i punti più. U sistema hè avà cunfiguratu.
Configurazione di una cunnessione VPN
Per stabilisce una cunnessione VPN, andate à u pannellu di cuntrollu è selezziunate l'opzione per creà una nova cunnessione.

In a finestra pop-up, selezziunate l'opzione per creà una cunnessione per cunnette à u vostru locu di travagliu:

In a finestra dopu, selezziunate una cunnessione VPN:

è inserite i dettagli di a cunnessione VPN, è ancu specificate l'opzione per utilizà una smart card:

A cunfigurazione ùn hè ancu cumpleta. Il ne reste plus qu'à préciser la clé partagée pour le protocole IPsec; pour cela, aller à l'onglet "Configuration de la connexion à la réseau" et ensuite à l'onglet "Propriétés pour cette connexion" :

In a finestra chì apre, andate à a tabulazione "Sicurezza", specificate "L2TP / IPsec Network" cum'è u tipu di rete è selezziunate "Configurazione Avanzata":

In a finestra chì si apre, specificate a chjave IPsec sparta:

Подключение
Dopu avè finitu a cunfigurazione, pudete pruvà à cunnette à a reta:

Durante u prucessu di cunnessione, ci sarà dumandatu à entre u codice PIN token:

Avemu stabilitu una rete VPN sicura è assicurati chì ùn hè micca difficiule.
Ringraziamenti
Vogliu ringrazià torna i nostri culleghi Vasily Shokov è Alexander Smirnov per u so travagliu cumunu per simplificà a creazione di cunnessione VPN per i clienti. Linux.
Source: www.habr.com
