ProHoster > blog > amministrazione > Configurazione dell'autenticazione nella rete L2TP utilizzando Rutoken EDS 2.0 e Rutoken PKI
Configurazione dell'autenticazione nella rete L2TP utilizzando Rutoken EDS 2.0 e Rutoken PKI
Problemi
Proprio di recente, molti non sapevano cosa volesse dire lavorare da casa. La pandemia ha cambiato radicalmente la situazione nel mondo; tutti hanno iniziato ad adattarsi alle circostanze attuali, vale a dire al fatto che è diventato semplicemente pericoloso uscire di casa. E molti hanno dovuto organizzare rapidamente il lavoro da casa per i propri dipendenti.
Tuttavia, la mancanza di un approccio competente nella scelta delle soluzioni per il lavoro a distanza può portare a perdite irreversibili. Le password degli utenti possono essere rubate e ciò consentirà a un utente malintenzionato di connettersi in modo incontrollabile alla rete e alle risorse IT dell'azienda.
Ecco perché oggi è aumentata la necessità di creare reti VPN aziendali affidabili. Te ne parlerò affidabile, sicuro и semplice nell'utilizzo di una rete VPN.
Funziona secondo lo schema IPsec/L2TP, che utilizza chiavi e certificati non recuperabili memorizzati su token per autenticare i client e trasmette anche i dati sulla rete in forma crittografata.
Come stand dimostrativi per la configurazione sono stati utilizzati un server con CentOS 7 (indirizzo: centos.vpn.server.ad) e un client con Ubuntu 20.04, nonché un client con Windows 10.
Descrizione del sistema
La VPN funzionerà secondo lo schema IPSec + L2TP + PPP. Protocollo Protocollo Point-to-Point (PPP) opera al livello di collegamento dati del modello OSI e fornisce l'autenticazione dell'utente e la crittografia dei dati trasmessi. I suoi dati sono incapsulati nei dati del protocollo L2TP, che di fatto garantisce la creazione di una connessione nella rete VPN, ma non fornisce autenticazione e crittografia.
I dati L2TP sono incapsulati in IPSec, che fornisce anche autenticazione e crittografia, ma a differenza di PPP, l'autenticazione e la crittografia avvengono a livello di dispositivo, non a livello di utente.
Questa funzionalità ti consente di autenticare gli utenti solo da determinati dispositivi. Utilizzeremo il protocollo IPSec così com'è e consentiremo l'autenticazione dell'utente da qualsiasi dispositivo.
L'autenticazione dell'utente tramite smart card verrà eseguita a livello di protocollo PPP utilizzando il protocollo EAP-TLS.
Informazioni più dettagliate sul funzionamento di questo circuito possono essere trovate in questo articolo.
Perché questo schema soddisfa tutti e tre i requisiti di una buona rete VPN?
L'affidabilità di questo schema è stata testata nel tempo. È stato utilizzato per implementare reti VPN dal 2000.
L'autenticazione sicura dell'utente è fornita dal protocollo PPP. Implementazione standard del protocollo PPP sviluppato da Paul Mackerras non fornisce un livello di sicurezza sufficiente, perché Per l'autenticazione, nel migliore dei casi, viene utilizzata l'autenticazione tramite login e password. Sappiamo tutti che la password di accesso può essere spiata, indovinata o rubata. Tuttavia, ormai da molto tempo lo sviluppatore Jan Just Keijser в la sua implementazione Questo protocollo ha corretto questo problema e ha aggiunto la possibilità di utilizzare protocolli basati sulla crittografia asimmetrica, come EAP-TLS, per l'autenticazione. Inoltre, ha aggiunto la possibilità di utilizzare le smart card per l'autenticazione, rendendo il sistema più sicuro.
Attualmente sono in corso trattative attive per unire questi due progetti e potete star certi che prima o poi ciò avverrà comunque. Ad esempio, una versione patchata di PPP è presente nei repository Fedora da molto tempo, utilizzando protocolli sicuri per l'autenticazione.
Fino a poco tempo fa, questa rete poteva essere utilizzata solo dagli utenti Windows, ma i nostri colleghi dell’Università statale di Mosca Vasily Shokov e Alexander Smirnov hanno scoperto vecchio progetto client L2TP per Linux e lo ha modificato. Insieme, abbiamo corretto molti bug e carenze nel lavoro del cliente, semplificato l'installazione e la configurazione del sistema, anche durante la creazione dal sorgente. I più significativi sono:
Risolti problemi di compatibilità del vecchio client con l'interfaccia delle nuove versioni di openssl e qt.
Rimosso a pppd dal passaggio del PIN del token attraverso un file temporaneo.
Risolto il problema con l'errato avvio del programma di richiesta password tramite l'interfaccia grafica. Ciò è stato fatto installando l'ambiente corretto per il servizio xl2tpd.
La compilazione del demone L2tpIpsecVpn viene ora eseguita insieme alla compilazione del client stesso, il che semplifica il processo di compilazione e configurazione.
Per facilitare lo sviluppo, il sistema Azure Pipelines è connesso per testare la correttezza della build.
Aggiunta la possibilità di forzare il downgrade livello di sicurezza nel contesto di openssl. Ciò è utile per supportare correttamente i nuovi sistemi operativi in cui il livello di sicurezza standard è impostato su 2, con reti VPN che utilizzano certificati che non soddisfano i requisiti di sicurezza di questo livello. Questa opzione sarà utile per lavorare con le vecchie reti VPN esistenti.
Questo client supporta l'uso di smart card per l'autenticazione e nasconde il più possibile tutte le difficoltà e le difficoltà legate alla configurazione di questo schema sotto Linux, rendendo la configurazione del client il più semplice e veloce possibile.
Naturalmente, per una comoda connessione tra PPP e la GUI del client, non è stato possibile senza ulteriori modifiche a ciascuno dei progetti, ma sono stati comunque ridotti al minimo e ridotti al minimo:
Fisso errore nell'ordine di caricamento della configurazione e di inizializzazione del contesto openssl. Questo errore non ci permetteva di caricare nulla dal file di configurazione locale /etc/ppp/openssl.cnf tranne le informazioni sui motori openssl per lavorare con le smart card, il che costituiva un grave inconveniente se, ad esempio, oltre alle informazioni sui motori, volevamo impostare qualcosa, qualcos'altro. Ad esempio, correggi il livello di sicurezza quando stabilisci una connessione.
Ora puoi iniziare a configurare.
Ottimizzazione del server
Installiamo tutti i pacchetti necessari.
Installazione di StrongSwan (IPsec)
Prima di tutto, configuriamo il firewall per il funzionamento ipsec
Dopo l'installazione è necessario configurare strongswan (una delle implementazioni IPSec). Per fare ciò, modifica il file /etc/strongswan/ipsec.conf :
Imposteremo anche una password di accesso comune. La password condivisa deve essere nota a tutti i partecipanti alla rete per l'autenticazione. Questo metodo è ovviamente inaffidabile, perché questa password potrà facilmente diventare nota alle persone a cui non vogliamo fornire l'accesso alla rete.
Tuttavia, anche questo fatto non influirà sulla sicurezza della rete, perché La crittografia di base dei dati e l'autenticazione dell'utente vengono eseguite dal protocollo PPP. Ma in tutta onestà, vale la pena notare che Strongswan supporta tecnologie di autenticazione più sicure, ad esempio utilizzando chiavi private. Strongswan ha anche la capacità di fornire l'autenticazione tramite smart card, ma finora è supportata solo una gamma limitata di dispositivi e quindi l'autenticazione tramite token Rutoken e smart card è ancora difficile. Impostiamo una password generale tramite file /etc/strongswan/ipsec.secrets:
Configuriamolo tramite file /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
Emettiamo il certificato root e il certificato server:
#директория с сертификатами пользователей, УЦ и сервера
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
Pertanto, abbiamo terminato la configurazione di base del server. Il resto della configurazione del server prevede l'aggiunta di nuovi client.
Aggiunta di un nuovo cliente
Per aggiungere un nuovo client alla rete, è necessario aggiungere il suo certificato all'elenco di quelli attendibili per questo client.
Se un utente vuole diventare membro di una rete VPN, crea una coppia di chiavi e una richiesta di certificato per questo client. Se l'utente è attendibile, questa applicazione può essere firmata e il certificato risultante può essere scritto nella directory dei certificati:
NOTA
Per evitare confusione, è meglio che: Nome comune, nome del file di certificato e nome utente siano univoci.
Vale anche la pena verificare che il nome dell'utente che stiamo aggiungendo non compaia da nessuna parte in altri file di autenticazione, altrimenti si verificheranno problemi con il modo in cui l'utente viene autenticato.
Lo stesso certificato dovrà essere rispedito all'utente.
Generazione di una coppia di chiavi e di un certificato
Per una corretta autenticazione, il client deve:
generare una coppia di chiavi;
avere un certificato radice CA;
disporre di un certificato per la coppia di chiavi firmato dalla CA radice.
per client su Linux
Innanzitutto, generiamo una coppia di chiavi sul token e creiamo un'applicazione per il certificato:
Invia l'applicazione client.req visualizzata alla CA. Una volta ricevuto un certificato per la tua coppia di chiavi, scrivilo su un token con lo stesso ID della chiave:
per client Windows e Linux (metodo più universale)
Questo metodo è più universale, perché consente di generare una chiave e un certificato che verranno riconosciuti con successo dagli utenti Windows e Linux, ma richiede una macchina Windows per eseguire la procedura di generazione della chiave.
Prima di generare richieste e importare certificati, è necessario aggiungere il certificato radice della rete VPN all'elenco di quelli attendibili. Per fare ciò, aprilo e nella finestra che si apre seleziona l'opzione “Installa certificato”:
Nella finestra che si apre, seleziona l'installazione di un certificato per l'utente locale:
Installiamo il certificato nell'archivio certificati radice attendibili della CA:
Dopo tutte queste azioni, siamo d'accordo con tutti gli altri punti. Il sistema è ora configurato.
Creiamo un file cert.tmp con il seguente contenuto:
Successivamente, genereremo una coppia di chiavi e creeremo un'applicazione per il certificato. Per fare ciò, apri PowerShell e inserisci il seguente comando:
certreq.exe -new -pin $PIN .cert.tmp .client.req
Invia l'applicazione client.req creata alla tua CA e attendi la ricezione del certificato client.pem. Può essere scritto su un token e aggiunto all'archivio certificati di Windows utilizzando il comando seguente:
certreq.exe -accept .client.pem
Vale la pena notare che azioni simili possono essere riprodotte utilizzando l'interfaccia grafica del programma mmc, ma questo metodo richiede più tempo e meno programmabilità.
Configurazione del client Ubuntu
NOTA
La configurazione di un client su Linux attualmente richiede molto tempo, perché... richiede la creazione di programmi separati dal sorgente. Cercheremo di garantire che tutte le modifiche siano incluse nei repository ufficiali nel prossimo futuro.
Per garantire la connessione a livello IPSec al server, vengono utilizzati il pacchetto strongswan e il demone xl2tp. Per semplificare la connessione alla rete utilizzando le smart card, utilizzeremo il pacchetto l2tp-ipsec-vpn, che fornisce una shell grafica per la configurazione semplificata della connessione.
Iniziamo ad assemblare gli elementi passo dopo passo, ma prima installeremo tutti i pacchetti necessari affinché la VPN funzioni direttamente:
sudo apt-get install xl2tpd strongswan libp11-3
Installazione del software per lavorare con i token
Installa l'ultima libreria librtpkcs11ecp.so da Luogo, anche librerie per lavorare con le smart card:
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 del client L2tpIpsecVpn
Al momento, anche il client deve essere compilato dal codice sorgente. Questo viene fatto utilizzando la seguente sequenza di comandi:
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 del client L2tpIpsecVpn
Avvia il client installato:
Dopo l'avvio, l'applet L2tpIpsecVPN dovrebbe aprirsi. Fare clic destro su di esso e configurare la connessione:
Per lavorare con i token indichiamo innanzitutto il percorso del motore opensc di OpenSSL e della libreria PKCS#11. Per fare ciò, apri la scheda "Preferenze" per configurare i parametri openssl:
.
Chiudiamo la finestra delle impostazioni di OpenSSL e passiamo alla configurazione della rete. Aggiungiamo una nuova rete facendo clic sul pulsante Aggiungi... nel pannello delle impostazioni e inseriamo il nome della rete:
Successivamente, questa rete diventerà disponibile nel pannello delle impostazioni. Fare doppio clic con il pulsante destro del mouse sulla nuova rete per configurarla. Nella prima scheda è necessario effettuare le impostazioni IPsec. Impostiamo l'indirizzo del server e la chiave pubblica:
Successivamente, vai alla scheda Impostazioni PPP e indica lì il nome utente con cui vogliamo accedere alla rete:
Successivamente, apri la scheda Proprietà e specifica il percorso della chiave, del certificato client e della CA:
Chiudiamo questa scheda ed eseguiamo le impostazioni finali; per fare ciò, apriamo la scheda "Impostazioni IP" e selezioniamo la casella accanto all'opzione "Ottieni indirizzo server DNS automaticamente":
Questa opzione consentirà al client di ricevere dal server un indirizzo IP personale all'interno della rete.
Dopo tutte le impostazioni, chiudi tutte le schede e riavvia il client:
Connessione alla rete
Dopo le impostazioni, è possibile connettersi alla rete. Per fare ciò, apri la scheda dell'applet e seleziona la rete a cui vogliamo connetterci:
Durante il processo di creazione della connessione, il cliente ci chiederà di inserire il codice PIN Rutoken:
Se nella barra di stato appare una notifica che la connessione è stata stabilita con successo, significa che la configurazione è andata a buon fine:
Altrimenti vale la pena capire perché la connessione non è stata stabilita. Per fare ciò, dovresti guardare il registro del programma selezionando il comando "Informazioni sulla connessione" nell'applet:
Configurazione del client Windows
Configurare un client su Windows è molto più semplice che su Linux, perché... Tutto il software necessario è già integrato nel sistema.
Configurazione di sistema
Installeremo tutti i driver necessari per lavorare con Rutokens scaricandoli da Di. luogo.
Importazione di un certificato radice per l'autenticazione
Scarica il certificato root del server e installalo sul sistema. Per fare ciò, aprilo e nella finestra che si apre seleziona l'opzione “Installa certificato”:
Nella finestra che si apre, seleziona l'installazione di un certificato per l'utente locale. Se desideri che il certificato sia disponibile per tutti gli utenti del computer, dovresti scegliere di installare il certificato sul computer locale:
Installiamo il certificato nell'archivio certificati radice attendibili della CA:
Dopo tutte queste azioni, siamo d'accordo con tutti gli altri punti. Il sistema è ora configurato.
Configurazione di una connessione VPN
Per impostare una connessione VPN, vai al pannello di controllo e seleziona l'opzione per creare una nuova connessione.
Nella finestra pop-up, seleziona l'opzione per creare una connessione per connetterti al tuo posto di lavoro:
Nella finestra successiva, seleziona una connessione VPN:
e inserisci i dettagli della connessione VPN e specifica anche l'opzione per utilizzare una smart card:
La configurazione non è ancora completa. Non resta che specificare la chiave condivisa per il protocollo IPsec; per fare ciò, vai alla scheda “Impostazioni connessione di rete” e poi vai alla scheda “Proprietà per questa connessione”:
Nella finestra che si apre, vai alla scheda “Sicurezza”, specifica “Rete L2TP/IPsec” come tipo di rete e seleziona “Impostazioni avanzate”:
Nella finestra che si apre, specifica la chiave IPsec condivisa:
Подключение
Dopo aver completato la configurazione, puoi provare a connetterti alla rete:
Durante il processo di connessione ci verrà richiesto di inserire il codice PIN del token:
Abbiamo creato una rete VPN sicura e ci siamo assicurati che non fosse difficile.
Ringraziamenti
Vorrei ringraziare ancora una volta i nostri colleghi Vasily Shokov e Alexander Smirnov per il lavoro che hanno svolto insieme per semplificare la creazione di connessioni VPN per client Linux.