Pesquisa de site

VPN IPsec baseada em StrongSwan usando certificados e chave pré-compartilhada no Ubuntu 16.04


Nesta página

  1. Instalação do Strongswan (binário e código-fonte)
  2. Compilação do Strongswan usando fonte
  3. VPN site a site
  4. Túnel baseado em chave pré-compartilhada
  5. Túnel baseado em certificado X.509

Introdução

Neste artigo, nosso foco está na implementação de software livre do protocolo IPsec. A segurança da camada de rede é garantida pelo uso do protocolo IPsec, que consiste nos seguintes dois componentes.

  • Cabeçalho de Autenticação (AH)
  • Encapsulando a carga útil de segurança (ESP)

A integridade e a autenticação do pacote são garantidas usando AH, o componente ESP fornece recursos de confidencialidade e segurança. A implementação de código aberto do IPsec,  StrongSwan (Strong Secure WAN), é uma ferramenta conhecida que oferece suporte a ambas as versões de troca de chaves da Internet (IKE v1/2)/. O compartilhamento de chaves ou a troca de chaves da Internet faz parte da VPN IPSec (rede privada virtual). O mecanismo IKE é usado para compartilhar a chave entre duas partes para criptografia de dados no protocolo ESP. Algoritmos de criptografia e integridade (como AES, SHA, etc.) de OpenSSL e bibliotecas de criptografia são usados durante a etapa IKE. No entanto, a implementação do kernel Linux do algoritmo de segurança é usada na parte principal do IPSec (ESP & AH). Cisne Forte.

Características do cisne forte

  • Suporte para autenticação baseada em chave pré-compartilhada.
  • Certificados no formato X.509 são compatíveis para autenticação.
  • Um único daemon que suporta IKE v1/v2.
  • Plugins e bibliotecas de terceiros podem ser facilmente integrados.
  • Os tokens de hardware são suportados usando o projeto openSC.

As VPNs Gateway-to-Gateway e Road warrior são suportadas pelo strongswan. O tráfego de rede é criptografado ou descriptografado nos dispositivos de gateway de uma organização em uma VPN site a site. No entanto, um segundo canal seguro é estabelecido do dispositivo de gateway para o usuário final/máquina cliente.

Neste artigo, a ferramenta strongSwan será instalada no Ubuntu 16.04 (LTS), mostrarei a integração do OpenSC para tokens de hardware e por fim a criação de um túnel gateway a gateway usando uma chave pré-compartilhada e certificados x.509 . Tokens de hardware ou módulos de segurança de hardware  (HSM), como USB e cartões inteligentes, podem ser usados com strongswan para armazenar as chaves criptográficas (públicas e privadas) e certificados. O suporte ao token de hardware no strongswan é fornecido usando o OpenSC (conjunto de ferramentas e bibliotecas), um projeto de código aberto. A estrutura de arquivos baseada em PKCS#15 e o acesso de cartão inteligente usando a API PKCS#11 também são fornecidos pela ferramenta OpenSC. Os seguintes cartões inteligentes são suportados pelo openSC.

  • WestCOS
  • SetCOS
  • CardOs
  • STARCOS
  • ASEPCOS

Instalação do Strongswan (binário e código-fonte)

Os pacotes binários (deb/rpm ) do strongswan estão disponíveis em quase todas as distribuições Linux amplamente utilizadas. A instalação do strongswan usando código-fonte e binário (com os recursos desejados) será explicada de forma abrangente neste artigo.

O pacote binário do strongswan pode ser instalado usando o seguinte comando no Ubuntu 16.04 LTS.

aptitude install strongswan

Os plugins strongswan disponíveis no repositório do Ubuntu são mostrados abaixo.

Após a instalação na plataforma Ubuntu, os arquivos e pastas de configuração (ipsec.conf, ipsec.secrets, ipsec.d,strongswan.conf, strongswan.d) são armazenados no diretório /etc.

Compilação Strongswan usando fonte

  • Opensc (pelo suporte do HSM no strongswan).
  • PC/SC  (é necessário para suporte ao leitor de cartão inteligente na plataforma Ubuntu).
  • Biblioteca GMP (necessária para operações matemáticas em strongswan).
  • Ferramenta OpenSSL (implementação conhecida de algoritmos de criptografia como AES, SHA1).
  • PKCS (Padrões de criptografia de chave pública) 1,7,8,11,12.

Neste artigo, a ferramenta PCSC-Lite será instalada junto com o opensc na plataforma Ubuntu para adicionar suporte a leitores de smart card. PCSC-Lite é recomendado para leitores CCID.

Execute os seguintes comandos para instalar o software de pré-requisito antes de iniciarmos a compilação do strongswan.

1. Instalação do Opensc

aptitude install opensc

2. Instalação da biblioteca GMP

aptitude install libgmp10

Instale a biblioteca de desenvolvimento do GMP.

aptitude install libgmp-dev

OpenSSL libcrypto é instalado usando o seguinte comando.

apt-get install libssl-dev

Etapas de compilação

Vá para a pasta /usr/src/ e baixe a versão mais recente do strongswan usando o comando wget.

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

Extraia o arquivo compactado e entre na pasta extraída para executar o script de configuração.

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

Execute o script configure para verificar as dependências de strongswan. O suporte HSM já está ativado na versão mais recente do strongswan, conforme mostrado abaixo.

Execute o script de configuração, use o prefixo /usr/local e habilite o suporte a openssl.

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

O instantâneo a seguir mostra que nenhum erro foi gerado pelo script de configuração, pois todas as dependências necessárias já estavam instaladas no sistema.

Execute os dois comandos a seguir para compilar e instalar o strongswan no diretório /usr/local.

make
make install

A compilação e instalação do strongswan na plataforma Ubuntu está concluída, vários arquivos de configuração (strongswan.conf, ipsec.conf e ipsec.secrets) e pastas (strongswan.d,ipsec.d) são copiados no caminho /usr/local/etc . A configuração da política VPN é colocada no arquivo ipsec.conf e os segredos confidenciais são armazenados no arquivo ipsec.secrets. A configuração do plug-in Strongswan é armazenada no diretório strongswan.d.

As VPNs de transporte e túnel são suportadas pelo strongswan. No modo de túnel, a segurança site a site do canal é fornecida e funciona com outros fornecedores, como dispositivos cisco, huawei e juniper.

VPN site a site

A figura a seguir mostra o posicionamento de um dispositivo de gateway VPN baseado em strongswan em uma rede. Um canal de comunicação seguro será estabelecido entre as redes privadas 192.168.223.0/24 e 192.168.222.0/24 da organização.

Antes de usar o IPsec entre as redes privadas A e B, verifique se o roteamento entre os gateways VPN da organização está funcionando para que o gateway VPN no lado A possa fazer ping na máquina VPN do lado remoto (B), o que garante que a conectividade da rede esteja correta.

Conforme mostrado abaixo, a configuração padrão da ferramenta strongswan está dentro do diretório  /usr/local/etc/.

Túnel baseado em chave pré-compartilhada

No primeiro caso, uma VPN baseada em segredo compartilhado será criada entre os dispositivos de gateway. O conhecido algoritmo de compartilhamento de chaves Diffie-Hellman é usado pelo strongswan para autenticação mútua. Detalhes sobre como o protocolo IPsec funciona estão disponíveis no seguinte link.

Configuração da VPN:

(Aparte)

A configuração principal de uma política de VPN strongswan está no arquivo ipsec.conf. Informações como as fornecidas abaixo são encontradas neste arquivo de configuração.

  • Versão do IKE
  • Tipo de túnel
  • gateways de origem e destino
  • redes privadas de VPN

ipsec.conf de um lado é dado abaixo.

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

Os segredos IPsec (chaves compartilhadas, senha da chave privada, pin para desbloquear hsm ) são armazenados no arquivo ipsec.secrets . Conforme mostrado abaixo, os segredos do fragmento entre ambas as partes da VPN são \test12345\.

192.168.1.101 192.168.1.102 : PSK 'test12345'

(Lado B)

A configuração nos arquivos ipsec.conf e ipsec.secrets no lado remoto será a inversa do site local conforme indicado abaixo.

O conteúdo do arquivo ipsec.conf é fornecido abaixo.

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

O arquivo ipsec.secrets contém o segredo compartilhado no lado remoto.

192.168.1.102 192.168.1.101 : PSK 'test12345'

Inicie o daemon strongswan (charon) usando o seguinte comando depois de configurar o arquivo de configuração em ambos os lados.

O comando a seguir mostra o status da VPN criada nos dispositivos.

ipsec statusall

O status do túnel em ambos os lados (local e remoto) é mostrado abaixo.

Este comando do Linux mostra as políticas e os estados do túnel IPsec.

ip xfrm state
ip xfrm policy

Conforme mostrado na saída do comando acima, as informações confidenciais esp/hmac (chaves) também são mostradas pelo comando ip xfrm.

Túnel baseado em certificado X.509

No túnel baseado em certificado X.509 (autenticação de chave pública), é necessário gerar certificados para a autoridade de certificação (CA), cliente A e B.

A geração de um certificado de CA autoassinado usando o utilitário PKI do strongswan é mostrada nas capturas de tela a seguir.

Entre no caminho /usr/local/etc/ipsec.d e execute os seguintes comandos.

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    

A geração dos certificados para o cliente A é mostrada abaixo.

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

Da mesma forma, par de chaves pública/privada e certificado gerado para o cliente 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

Após a geração bem-sucedida de certificados de CA e cliente, a próxima etapa é alterar a configuração de ipsec.conf e ipsec.secrets. Consulte a documentação do strongswan para obter mais detalhes sobre as alterações no ipsec.conf e no arquivo de segredos.

O conteúdo de ipsec.conf & ipsec.secrets para o lado A é fornecido abaixo.

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

A configuração do lado B também é dada abaixo.

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

Execute o comando ipsec restart para aplicar as alterações acima e verifique o status do túnel criado usando certificados.

ipsec statusall    # at side A
ipsec statusall    # at side B

Finalmente, a VPN baseada em certificado foi criada com sucesso usando a ferramenta strongswan.