GNU/Linux >> Linux Esercitazione >  >> Ubuntu

VPN IPsec basata su StrongSwan che utilizza certificati e chiave pre condivisa su Ubuntu 16.04

Introduzione

In questo articolo, il nostro focus è sull'implementazione open source del protocollo IPsec. La sicurezza del livello di rete è garantita dall'utilizzo del protocollo IPsec che consiste nei seguenti due componenti.

  • Intestazione di autenticazione (AH) 
  • Encapsulating Security Payload (ESP)

L'integrità e l'autenticazione del pacchetto sono garantite dall'utilizzo di AH, il componente ESP fornisce funzionalità di riservatezza e sicurezza. L'implementazione open source di IPsec,  StrongSwan (Strong Secure WAN), è uno strumento noto che supporta entrambe le versioni di scambio di chiavi Internet (IKE v1/2)/. La condivisione delle chiavi o lo scambio di chiavi Internet fa parte della VPN IPSec (rete privata virtuale). Il meccanismo IKE viene utilizzato per condividere la chiave tra due parti per la crittografia dei dati nel protocollo ESP. Durante la fase IKE vengono utilizzati algoritmi di crittografia e integrità (come AES, SHA, ecc.) di OpenSSL e librerie crittografiche. Tuttavia, l'implementazione dell'algoritmo di sicurezza del kernel Linux viene utilizzata nella parte principale di IPSec (ESP e AH). Cigno Forte.

Caratteristiche di Strongswan

  • Supporto per l'autenticazione basata su chiave precondivisa.
  • I certificati in formato X.509 sono supportati per l'autenticazione.
  • Un singolo demone che supporta sia IKE v1/v2.
  • Plugin e librerie di terze parti possono essere facilmente integrati.
  • I token hardware sono supportati utilizzando il progetto openSC.

Gateway-to-Gateway e Road Warrior VPN sono supportati da strongswan. Il traffico di rete viene crittografato o decrittografato sui dispositivi gateway di un'organizzazione in una VPN da sito a sito. Tuttavia, viene stabilito un secondo canale sicuro dal dispositivo gateway al computer dell'utente finale/client.

In questo articolo, lo strumento strongSwan verrà installato su Ubuntu 16.04 (LTS), mostrerò l'integrazione di OpenSC per i token hardware e infine la creazione di un tunnel gateway-to-gateway utilizzando una chiave precondivisa e certificati x.509 . I token hardware o Hardware Security Modules (HSM) come USB e smart card possono essere utilizzati con strongswan per archiviare le chiavi crittografiche (pubbliche e private) e i certificati. Il supporto del token hardware in strongswan viene fornito utilizzando OpenSC (set di strumenti e librerie), un progetto open source. Anche la struttura dei file basata su PKCS#15 e l'accesso alla smart card tramite l'API PKCS#11 sono forniti dallo strumento OpenSC. Le seguenti smart card sono supportate da openSC.

  • WestCOS
  • SetCOS
  • CardO
  • STARCOS
  • ASEPCOS

Installazione di Strongswan (codice binario e sorgente)

I pacchetti binari (deb/rpm ) di strongswan sono disponibili in quasi tutte le distribuzioni Linux ampiamente utilizzate. L'installazione di strongswan utilizzando codice binario e sorgente (con le funzionalità desiderate) sarà spiegata in modo esauriente in questo articolo.

Il pacchetto binario di strongswan può essere installato utilizzando il seguente comando su Ubuntu 16.04 LTS.

aptitude install strongswan

I plug-in strongswan disponibili nel repository di Ubuntu sono mostrati di seguito.

Dopo l'installazione su piattaforma Ubuntu, i file e le cartelle di configurazione (ipsec.conf, ipsec.secrets, ipsec.d,strongswan.conf, strongswan.d) vengono archiviati nella directory /etc.

Compilazione di Strongswan usando il sorgente

  • Opensc (per il supporto di HSM nel cigno forte).
  • PC/SC  (è richiesto per il supporto del lettore di smart card sulla piattaforma Ubuntu).
  • Libreria GMP (necessaria per operazioni matematiche in strongswan).
  • Strumento OpenSSL (implementazione ben nota di algoritmi di crittografia come AES,SHA1).
  • PKCS (standard di crittografia a chiave pubblica) 1,7,8,11,12.

In questo articolo, lo strumento PCSC-Lite verrà installato insieme a opensc sulla piattaforma Ubuntu per aggiungere il supporto per i lettori di smart card. PCSC-Lite è consigliato per i lettori di CCID.

Esegui i seguenti comandi per installare il software prerequisito prima di iniziare la compilazione di strongswan.

1. Installazione di Opensc

aptitude install opensc

2. Installazione della libreria GMP

aptitude install libgmp10

Installa la libreria di sviluppo di GMP.

aptitude install libgmp-dev

OpenSSL libcrypto viene installato utilizzando il seguente comando.

apt-get install libssl-dev

Passaggi della compilazione

Vai a /usr/src/ cartella e scarica l'ultima versione di strongswan utilizzando il comando wget.

cd /usr/src
wget https://download.strongswan.org/strongswan-5.5.0.tar.gz

Estrai il file compresso e vai all'interno della cartella estratta per eseguire lo script di configurazione.

tar –xzf strongswan-5.5.0.tar.gz
cd strongswan-5.5.0

Esegui lo script di configurazione per verificare le dipendenze di strongswan. Il supporto HSM è già abilitato nell'ultima versione di strongswan come mostrato di seguito.

Esegui lo script di configurazione, usa il prefisso /usr/local e abilita il supporto di openssl.

./configure --prefix=/usr/local  --enable-openssl

L'istantanea seguente mostra che lo script di configurazione non ha generato alcun errore poiché tutte le dipendenze richieste erano già installate sul sistema.

Esegui i due comandi seguenti per compilare e installare strongswan in /usr/local directory.

make

make install

La compilazione e l'installazione di strongswan sulla piattaforma Ubuntu è completa, diversi file di configurazione (strongswan.conf, ipsec.conf e ipsec.secrets ) e cartelle (strongswan.d,ipsec.d ) vengono copiati in /usr/local/etc il percorso. La configurazione della politica VPN è inserita in ipsec.conf i file e i segreti riservati sono archiviati in ipsec.secrets file. La configurazione del plug-in Strongswan è memorizzata in strongswan.d directory.

Sia il trasporto che il tunnel VPN sono supportati da strongswan. Nella modalità tunnel, viene fornita la sicurezza da sito a sito del canale e funziona con altri fornitori come dispositivi Cisco, Huawei e Juniper.

VPN da sito a sito

La figura seguente mostra il posizionamento di un dispositivo gateway VPN basato su strongswan in una rete. Verrà stabilito un canale di comunicazione sicuro tra le reti private 192.168.223.0/24 e 192.168.222.0/24 dell'organizzazione.

Prima di utilizzare IPsec tra la rete privata A e B, accertarsi del routing tra i gateway VPN dell'organizzazione sta lavorando in modo che il gateway VPN su A lato può eseguire il ping della macchina VPN lato remoto (B ) che garantisce che la connettività di rete sia corretta.

Come mostrato di seguito, la configurazione predefinita dello strumento Strongswan è all'interno di  /usr/local/etc/ directory.

Tunnel basato su chiave precondivisa

Nel primo caso, verrà creata una VPN basata su segreto condiviso tra i dispositivi gateway. Il noto algoritmo di condivisione delle chiavi Diffie-Hellman è utilizzato da strongswan per l'autenticazione reciproca. I dettagli su come funziona il protocollo IPsec sono disponibili al seguente link.

http://www.unixwiz.net/techtips/iguide-ipsec.html

Configurazione della VPN:

(Lato A )

La configurazione principale di una policy VPN strongswan si trova nel file ipsec.conf. Informazioni come quelle fornite di seguito si trovano in questo file di configurazione.

  • Versione di IKE
  • Tipo di tunnel
  • gateway di origine e destinazione
  • reti private di VPN

ipsec.conf di Lato A è riportato di seguito.

config setup
        charondebug="all"
        uniqueids=yes
        strictcrlpolicy=no
conn %default
conn tunnel #
        left=192.168.1.101
        leftsubnet=192.168.223.0/24
        right=192.168.1.102
        rightsubnet=192.168.222.0/24
        ike=aes256-sha2_256-modp1024!
        esp=aes256-sha2_256!
        keyingtries=0
        ikelifetime=1h
        lifetime=8h
        dpddelay=30
        dpdtimeout=120
        dpdaction=restart
        authby=secret
        auto=start
        keyexchange=ikev2
        type=tunnel

I segreti IPsec (chiavi condivise, password della chiave privata, pin per sbloccare hsm ) sono archiviati in ipsec.secrets file . Come mostrato di seguito, lo shard secret tra le due parti VPN è "test12345".

192.168.1.101 192.168.1.102 : PSK 'test12345'

(lato B)

La configurazione nei file ipsec.conf e ipsec.secrets sul lato remoto sarà l'inverso del sito locale come indicato di seguito.

Il contenuto del file ipsec.conf è riportato di seguito.

config setup
        charondebug="all"
        uniqueids=yes
        strictcrlpolicy=no
conn %default
conn tunnel #
        left=192.168.1.102
        leftsubnet=192.168.222.0/24
        right=192.168.1.101
        rightsubnet=192.168.223.0/24
        ike=aes256-sha2_256-modp1024!
        esp=aes256-sha2_256!
        keyingtries=0
        ikelifetime=1h
        lifetime=8h
        dpddelay=30
        dpdtimeout=120
        dpdaction=restart
        authby=secret
        auto=start
        keyexchange=ikev2
        type=tunnel

Il file ipsec.secrets contiene il segreto condiviso sul lato remoto.

192.168.1.102 192.168.1.101 : PSK 'test12345'

Avvia il daemon del cigno (caronte ) utilizzando il comando seguente dopo aver impostato il file di configurazione su entrambi i lati.

riavvio di ipsec

Il comando seguente mostra lo stato della VPN creata sui dispositivi.

ipsec statusall

Di seguito è mostrato lo stato del tunnel su entrambi i lati (locale e remoto).

Questo comando Linux mostra le politiche e gli stati del tunnel IPsec.

ip xfrm state
ip xfrm policy

Come mostrato nell'output del comando precedente, le informazioni riservate esp/hmac (chiavi) vengono visualizzate anche dal comando ip xfrm.

Tunnel basato su certificato X.509

Nel tunnel basato su certificato X.509 (autenticazione con chiave pubblica), è necessario generare certificati per l'autorità di certificazione (CA), client A e B.

La generazione di un certificato CA autofirmato utilizzando l'utilità PKI di strongswan viene mostrata negli screenshot seguenti.

Entra in /usr/local/etc/ipsec.d percorso ed eseguire i seguenti comandi.

cd /usr/local/etc/ipsec.d
ipsec pki --gen --type rsa --size 4096 --outform pem > private/strongswanKey.pem
ipsec pki --self --ca --lifetime 3650 --in private/strongswanKey.pem --type rsa --dn "C=CH, O=strongSwan, CN=Root CA" --outform pem > cacerts/strongswanCert.pem    

Di seguito viene mostrata la generazione dei certificati per il client A.

ipsec pki --gen --type rsa --size 2048 --outform pem > private/client1Key.pem
chmod 600 private/client1Key.pem
ipsec pki --pub --in private/client1Key.pem --type rsa | ipsec pki --issue --lifetime 730 --cacert cacerts/strongswanCert.pem --cakey private/strongswanKey.pem --dn "C=CH, O=strongSwan, CN=device1" --san device1 --flag serverAuth --flag ikeIntermediate --outform pem > certs/client1Cert.pem

Allo stesso modo, coppia di chiavi pubblica/privata e certificato generato per il client B.

ipsec pki --gen --type rsa --size 2048 --outform pem > private/client2Key.pem
chmod 600 private/client2Key.pem
ipsec pki --pub --in private/client2Key.pem --type rsa | ipsec pki --issue --lifetime 730 --cacert cacerts/strongswanCert.pem --cakey private/strongswanKey.pem --dn "C=CH, O=strongSwan, CN=device2" --san device2 --flag serverAuth --flag ikeIntermediate --outform pem > certs/client2Cert.pem

Dopo aver generato correttamente CA e certificati client, il passaggio successivo consiste nel modificare la configurazione ipsec.conf e ipsec.secrets. Consulta la documentazione di strongswan per maggiori dettagli sulle modifiche in ipsec.conf e nel file secrets.

Il contenuto di ipsec.conf e ipsec.secrets per il lato A è riportato di seguito.

config setup
        charondebug="all"
        uniqueids=yes
        strictcrlpolicy=no
conn %default
conn tunnel #
        left=192.168.1.101
        leftsubnet=192.168.223.0/24
        right=192.168.1.102
        rightsubnet=192.168.222.0/24
        ike=aes256-sha2_256-modp1024!
        esp=aes256-sha2_256!
        keyingtries=0
        ikelifetime=1h
        lifetime=8h
        dpddelay=30
        dpdtimeout=120
        dpdaction=restart
        #authby=secret
        auto=start
        keyexchange=ikev2
        type=tunnel
        leftcert=client1Cert.pem
        leftid="C=CH, O=strongSwan, CN=device1"
        rightid="C=CH, O=strongSwan, CN=device2"

#192.168.1.101 192.168.1.102 : PSK 'test12345'
: RSA client1Key.pem

Di seguito è riportata anche la configurazione del lato B.

config setup
        charondebug="all"
        uniqueids=yes
        strictcrlpolicy=no
conn %default
conn tunnel #
        left=192.168.1.102
        leftsubnet=192.168.222.0/24
        right=192.168.1.101
        rightsubnet=192.168.223.0/24
        ike=aes256-sha2_256-modp1024!
        esp=aes256-sha2_256!
        keyingtries=0
        ikelifetime=1h
        lifetime=8h
        dpddelay=30
        dpdtimeout=120
        dpdaction=restart
        #authby=secret
        auto=start
        keyexchange=ikev2
        type=tunnel
        leftcert=client2Cert.pem
        leftid="C=CH, O=strongSwan, CN=device2"
        rightid="C=CH, O=strongSwan, CN=device1"


#192.168.1.102 192.168.1.101 : PSK 'test12345'
: RSA client2Key.pem

Esegui riavvio di ipsec comando per applicare le modifiche sopra e controllare lo stato del tunnel creato utilizzando i certificati.

ipsec statusall    # at side A

ipsec statusall    # at side B

Infine, la VPN basata su certificato è stata creata con successo utilizzando lo strumento strongswan.


Ubuntu
  1. Come creare uno stack LAMP basato su una finestra mobile utilizzando la finestra mobile su Ubuntu 20.04

  2. Come creare una VPN su Ubuntu 20.04 usando Wireguard

  3. Come installare e configurare Algo VPN Server su Ubuntu 20.04

  4. Utilizzo di Ansible per installare e configurare Elasticsearch su Ubuntu 20.04

  5. Come installare e configurare strongSwan VPN su Ubuntu 18.04

Come creare ed eseguire un programma C usando Ubuntu 20.04 LTS

Come configurare una VPN su Ubuntu

Backup e ripristino delle applicazioni Ubuntu utilizzando Aptik

Utilizzo di file e cartelle sullo schermo del desktop in Ubuntu

Come configurare una VPN basata su IPsec con Strongswan su Debian e Ubuntu

Cartella condivisa in Virtualbox (ubuntu e Windows 7)?