VPN IPsec baseada em StrongSwan usando certificados e chave pré-compartilhada no Ubuntu 16.04
Nesta página
- Instalação do Strongswan (binário e código-fonte)
- Compilação do Strongswan usando fonte
- VPN site a site
- Túnel baseado em chave pré-compartilhada
- 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.