Estabelecendo VPN Site-to-site IPSEC com OpenSwan

Neste post veremos passo a passo como configurar o OpenSwan para estabelecer uma VPN Site-to-site (entre 2 redes)  utilizando segredo compartilhado ou certificado digital. No decorrer do post explicarei as diferenças quando um dos firewall está atrás de um equipamento realizando NAT-T.

A motivação da escrita deste post se deu na necessidade de realizar essa VPN em meu ambiente somado ao fato que não encontrei na internet nenhum tutorial que trouxesse de forma simples, completa e bem comentada cada um dos parâmetros para o correto funcionamento do OpenSwan no ambiente proposto. Achei sim, diversos tutoriais, que me ajudaram muito, mas somente informações fragmentadas e muitas vezes confusas, sendo assim resolvi agregar todas em um único post. Espero que ajude.

 

Ambiente

Antes de iniciar a configuração propriamente dita do OpenSwan e dos equipamentos é necessário entender bem todo o nosso ambiente.

Antes de mais nada é importante frisar que os IPs validos e inválidos deste ambiente são fictícios e escolhidos aleatoriamente, não representando qualquer ambiente real meu ou de cliente.

Para os dois servidores de VPN foi utilizado o Ubuntu 12.0.4, e o OpenSwan do repositório do ubuntu.

Esta imagem abaixo demonstra detalhadamente todo o nosso ambiente.

Ambiente VPN site to site

Nela podemos observar que há 2 servidores de VPN, um na matriz e um na filial, e que o servidor da filial está atrás de um Roteador que está fazendo NAT. Este é um ambiente bem comum quando a filial está utilizando uma internet de baixo custo onde a operadora fornece o modem (como por exemplo ADSL) e este modem é quem recebe o IP válido e distribui uma rede inválida (comumente 192.168.x.x) para as maquinas internas.

Configuração de rede dos servidores de VPN

Segue abaixo a configuração de rede de cada um dos servidores VPN

metwork-matriz

Configuração de rede do servidor de VPN da Matriz

network-filial

Configuração de rede do servidor de VPN da Filial

Instalando OpenSwan

O processo de instalação do OpenSwan é o mesmo para os dois equipamentos, desta forma execute os passos abaixo nos 2.

Instalando o OpenSwan e OpenSSL

1
2
3
add-apt-repository ppa:openswan/ppa
apt-get update
apt-get install openssl openswan

Neste processo será questionado se deseja criar um certificado digital para este servidor. Pode selecionar a opção <NO>
openswan-01

Edite o arquivo /etc/ipsec.conf (em ambos equipamentos) para que ele fique com o seguinte conteúdo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
version 2.0
config setup
        dumpdir=/var/run/pluto/
        nat_traversal=yes
        virtual_private=%v4:10.0.0.0/8
        oe=off
        protostack=netkey
 
conn %default
        authby=rsasig
        leftrsasigkey=%cert
        rightrsasigkey=%cert
        keyingtries=1
        keylife=20m
        ikelifetime=240m
 
include /etc/ipsec.d/*.conf

Edite o arquivo /etc/ipsec.secrets para que ele fique com o seguinte conteúdo:

1
2
include /var/lib/openswan/ipsec.secrets.inc
include /etc/ipsec.d/*.secret

Edite o arquivo /etc/sysctl.conf e altere ou insira a seguinte linha. Esta configuração tem por objetivo permitir que o kernel do linux faça roteamento dos pacotes de rede.

1
net.ipv4.ip_forward = 1

E depois execute o seguinte comando para aplicar essa configuração:

1
sysctl -p

Pronto as configurações gerais estão prontas, agora vamos para as configurações individuais de cada servidor de VPN.

Um pouco sobre segredo compartilhado versus certificado digital

Quando estamos configurando uma VPN com IPSEC há diversos fatores que podem influenciar e gerar problema no estabelecimento da conexão, desta forma sempre iniciamos a configuração de forma simples, e depois vamos incrementando opções e segurança. Seguindo esta lógica primeiro iremos configurar e estabelecer o tunnel VPN utilizando segredo compartilhado, para depois que o tunnel tiver OK possamos trocar para certificado digital.

Mas porque isso? Porque com certificado digital há diversos outros fatores que podem gerar problema como data de validade do certificado, common name, tipo do certificado, autoridade certificadora entre outros, então a forma mais simples de isolar os problemas é primeiro estabelecer o tunnel usando segredo compartilhado.

Por característica do protocolo IPSEC, para estabelecer um tunnel com segrede compartilhado é necessário saber o IP interno e externo de todos os envolvidos, não podendo ser nenhum dos 2 lados dinâmico, desta forma se em eu ambiente você utiliza uma internet com IP dinâmico, para estes primeiros passos descubra qual é o IP atualmente atribuido, faça a configuração com ele que nos próximos passos (depois de mudar o tunnel para usar certificado digital) iremos alterar para não precisar informar este IP na configuração.

VPN Server Matriz

Nesta sessão veremos todas as configurações que devem serem realizadas no servidor de VPN da matriz.

Crie um arquivo nomeado /etc/ipsec.d/vpn1.conf e insira o seguinte conteúdo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
conn vpn1 # Nome da Conexão VPN
    type= tunnel
    authby= secret #Tipo de autenticação
 
    # Left security, (dados da Matriz)
    left= 200.165.10.50 # IP real/físico do servidor na matriz
    leftsubnet= 10.0.0.0/24 # Rede interna na Matriz para qual será estabelecido a VPN
    leftnexthop= 200.165.10.1 # IP real do Gateway do servidor de VPN da Matriz
 
    # Right security, (dados da Filial)
    right= 201.80.24.7 # IP Externo (após o NAT) que o servidor sairá para conexão com a matriz
    rightsubnet= 10.0.1.0/24 # Rede interna da filial para qual será estabelecido a VPN
    rightnexthop= 200.165.10.1 # IP real do Gateway do servidor de VPN da Matriz
 
    # Tipo de criptografia usada
    keyexchange=ike
 
    # IPSEC Fase 1
    # Não é obrigatório o preenchimento, caso preenchido será restrito a estes protocolos preenchidos
    # Formato de preenchimento 'cipher-hash;modpgroup, cipher-hash;modpgroup, ...'
    #   -> Não é obrigatório o preenchimento do modpgroup
    # cipher-hash disponíveis: 3des-sha1, 3des-md5, aes-sha1, aes-md5, aes128-sha1 e aes128-md5
    # modpgroup disponíveis: modp1024, modp1536 e modp2048
    ike= 3des-md5, 3des-sha1,aes-sha1,aes-md5,aes128-sha1,aes128-md5
 
    # IPSEC Fase 2
    # cipher-hash disponíveis: 3des, 3des-md5-96, 3des-sha1-96
    phase2alg = 3des-md5-96 # Antigo parametro 'esp' que está obsoleto
 
    # Outras configurações
    pfs= no
    auto= start

Agora crie o arquivo nomeado /etc/ipsec.d/vpn1.secret com o seguinte conteúdo

1
201.80.24.7 200.165.10.50: PSK "123456"

Agora reinicie o serviço do ipsec com o seguinte comando

1
ipsec setup restart

Caso deseje reiniciar somente um tunnel utilize os comandos abaixo

1
2
ipsec auto --down vpn1
ipsec auto --up vpn1

VPN Server Filial

Nesta sessão veremos todas as configurações que devem serem realizadas no servidor de VPN da filial.

Crie um arquivo nomeado /etc/ipsec.d/vpn1.conf e insira o seguinte conteúdo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
conn vpn1 # Nome da Conexão VPN
    type= tunnel
    authby= secret #Tipo de autenticação
 
    # Left security, (dados da Filial)
    left= 192.168.0.10 # IP real/físico do servidor na filial
    leftid= 201.80.24.7 # IP Externo (após o NAT) que o servidor sairá para conexão com a matriz
    leftsubnet= 10.0.1.0/24 # Rede interna na filial para qual será estabelecido a VPN
    leftnexthop= 192.168.0.1 # IP real do Gateway do servidor de VPN da filial
 
    # Right security, (dados da Matriz)
    right= 200.165.10.50 # IP externo do servidor na matriz
    rightsubnet= 10.0.0.0/24 # Rede interna da matriz para qual será estabelecido a VPN
    rightnexthop= 192.168.0.1 # IP real do Gateway do servidor de VPN da filial
 
    # Tipo de criptografia usada
    keyexchange=ike
 
    # IPSEC Fase 1
    # Não é obrigatório o preenchimento, caso preenchido será restrito a estes protocolos preenchidos
    # Formato de preenchimento 'cipher-hash;modpgroup, cipher-hash;modpgroup, ...'
    #   -> Não é obrigatório o preenchimento do modpgroup
    # cipher-hash disponíveis: 3des-sha1, 3des-md5, aes-sha1, aes-md5, aes128-sha1 e aes128-md5
    # modpgroup disponíveis: modp1024, modp1536 e modp2048
    ike= 3des-md5, 3des-sha1,aes-sha1,aes-md5,aes128-sha1,aes128-md5
 
    # IPSEC Fase 2
    # cipher-hash disponíveis: 3des, 3des-md5-96, 3des-sha1-96
    phase2alg = 3des-md5-96 # Antigo parametro 'esp' que está obsoleto
 
    # Outras configurações
    pfs= no
    auto= start

Agora crie o arquivo nomeado /etc/ipsec.d/vpn1.secret com o seguinte conteúdo

1
200.165.10.50 201.80.24.7: PSK "123456"

Agora reinicie o serviço do ipsec com o seguinte comando

1
ipsec setup restart

Caso deseje reiniciar somente um tunnel utilize os comandos abaixo

1
2
ipsec auto --down vpn1
ipsec auto --up vpn1

 

Verificando status e erros de configuração

Após iniciar a configuração alguns passos podem ser feito para checar a configuração e correto carregamento da mesma, bem como erros no estabelecimento do tunnel.

Verifique no arquivo de log /var/log/auth.log se estes 2 logs foram gerados, eles indicam que o arquivo de chaves da VPN foi carregado e que a vpn1 foi carregada e será iniciado o processo para estabelecer o tunnel

1
2
loading secrets from "/etc/ipsec.d/vpn1.secret"
"vpn1" #1: initiating Main Mode

E um dos logs mais legal de se ver é o que estabeleceu a SA, ou seja o tunnel está OK

1
"vpn1" #4: STATE_QUICK_I2: sent QI2, IPsec SA established tunnel mode {ESP=>0xb71ffca5

Outro comando bem útil é o comando para verificar o status do ipsec

1
/usr/sbin/ipsec auto --status

Este comando irá retornar uma saída parecida com essa.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
000 using kernel interface: netkey
000 interface lo/lo ::1
000 interface lo/lo 127.0.0.1
000 interface lo/lo 127.0.0.1
000 interface eth0/eth0 10.0.0.1
000 interface eth0/eth0 10.0.0.1
000 interface eth1/eth1 200.165.10.50
000 interface eth1/eth1 200.165.10.50
000 %myid = (none)
000 debug none
000
000 virtual_private (%priv):
000 - allowed 1 subnet: 10.0.0.0/8
000 - disallowed 0 subnets:
000 WARNING: Disallowed subnets in virtual_private= is empty. If you have
000 private address space in internal use, it should be excluded!
000
000 algorithm ESP encrypt: id=2, name=ESP_DES, ivlen=8, keysizemin=64, keysizemax=64
000 algorithm ESP encrypt: id=3, name=ESP_3DES, ivlen=8, keysizemin=192, keysizemax=192
000 algorithm ESP encrypt: id=6, name=ESP_CAST, ivlen=8, keysizemin=40, keysizemax=128
000 algorithm ESP encrypt: id=7, name=ESP_BLOWFISH, ivlen=8, keysizemin=40, keysizemax=448
000 algorithm ESP encrypt: id=11, name=ESP_NULL, ivlen=0, keysizemin=0, keysizemax=0
000 algorithm ESP encrypt: id=12, name=ESP_AES, ivlen=8, keysizemin=128, keysizemax=256
000 algorithm ESP encrypt: id=13, name=ESP_AES_CTR, ivlen=8, keysizemin=160, keysizemax=288
000 algorithm ESP encrypt: id=14, name=ESP_AES_CCM_A, ivlen=8, keysizemin=128, keysizemax=256
000 algorithm ESP encrypt: id=15, name=ESP_AES_CCM_B, ivlen=8, keysizemin=128, keysizemax=256
000 algorithm ESP encrypt: id=16, name=ESP_AES_CCM_C, ivlen=8, keysizemin=128, keysizemax=256
000 algorithm ESP encrypt: id=18, name=ESP_AES_GCM_A, ivlen=8, keysizemin=128, keysizemax=256
000 algorithm ESP encrypt: id=19, name=ESP_AES_GCM_B, ivlen=8, keysizemin=128, keysizemax=256
000 algorithm ESP encrypt: id=20, name=ESP_AES_GCM_C, ivlen=8, keysizemin=128, keysizemax=256
000 algorithm ESP encrypt: id=22, name=ESP_CAMELLIA, ivlen=8, keysizemin=128, keysizemax=256
000 algorithm ESP encrypt: id=252, name=ESP_SERPENT, ivlen=8, keysizemin=128, keysizemax=256
000 algorithm ESP encrypt: id=253, name=ESP_TWOFISH, ivlen=8, keysizemin=128, keysizemax=256
000 algorithm ESP auth attr: id=1, name=AUTH_ALGORITHM_HMAC_MD5, keysizemin=128, keysizemax=128
000 algorithm ESP auth attr: id=2, name=AUTH_ALGORITHM_HMAC_SHA1, keysizemin=160, keysizemax=160
000 algorithm ESP auth attr: id=5, name=AUTH_ALGORITHM_HMAC_SHA2_256, keysizemin=256, keysizemax=256
000 algorithm ESP auth attr: id=6, name=AUTH_ALGORITHM_HMAC_SHA2_384, keysizemin=384, keysizemax=384
000 algorithm ESP auth attr: id=7, name=AUTH_ALGORITHM_HMAC_SHA2_512, keysizemin=512, keysizemax=512
000 algorithm ESP auth attr: id=8, name=AUTH_ALGORITHM_HMAC_RIPEMD, keysizemin=160, keysizemax=160
000 algorithm ESP auth attr: id=9, name=AUTH_ALGORITHM_AES_CBC, keysizemin=128, keysizemax=128
000 algorithm ESP auth attr: id=251, name=AUTH_ALGORITHM_NULL_KAME, keysizemin=0, keysizemax=0
000
000 algorithm IKE encrypt: id=0, name=(null), blocksize=16, keydeflen=131
000 algorithm IKE encrypt: id=5, name=OAKLEY_3DES_CBC, blocksize=8, keydeflen=192
000 algorithm IKE encrypt: id=7, name=OAKLEY_AES_CBC, blocksize=16, keydeflen=128
000 algorithm IKE hash: id=1, name=OAKLEY_MD5, hashsize=16
000 algorithm IKE hash: id=2, name=OAKLEY_SHA1, hashsize=20
000 algorithm IKE hash: id=4, name=OAKLEY_SHA2_256, hashsize=32
000 algorithm IKE hash: id=6, name=OAKLEY_SHA2_512, hashsize=64
000 algorithm IKE dh group: id=2, name=OAKLEY_GROUP_MODP1024, bits=1024
000 algorithm IKE dh group: id=5, name=OAKLEY_GROUP_MODP1536, bits=1536
000 algorithm IKE dh group: id=14, name=OAKLEY_GROUP_MODP2048, bits=2048
000 algorithm IKE dh group: id=15, name=OAKLEY_GROUP_MODP3072, bits=3072
000 algorithm IKE dh group: id=16, name=OAKLEY_GROUP_MODP4096, bits=4096
000 algorithm IKE dh group: id=17, name=OAKLEY_GROUP_MODP6144, bits=6144
000 algorithm IKE dh group: id=18, name=OAKLEY_GROUP_MODP8192, bits=8192
000 algorithm IKE dh group: id=22, name=OAKLEY_GROUP_DH22, bits=1024
000 algorithm IKE dh group: id=23, name=OAKLEY_GROUP_DH23, bits=2048
000 algorithm IKE dh group: id=24, name=OAKLEY_GROUP_DH24, bits=2048
000
000 stats db_ops: {curr_cnt, total_cnt, maxsz} :context={0,2,64} trans={0,2,3072} attrs={0,2,2048}
000
000 "vpn1": 10.0.0.0/24===200.165.10.50---200.165.10.1...200.165.10.1---201.80.24.7===10.0.1.0/24; erouted; eroute owner: #4
000 "vpn1": myip=unset; hisip=unset;
000 "vpn1": ike_life: 14400s; ipsec_life: 1200s; rekey_margin: 540s; rekey_fuzz: 100%; keyingtries: 1
000 "vpn1": policy: PSK+ENCRYPT+TUNNEL+UP+IKEv2ALLOW+SAREFTRACK; prio: 24,24; interface: eth1;
000 "vpn1": newest ISAKMP SA: #1; newest IPsec SA: #4;
000 "vpn1": IKE algorithm newest: AES_CBC_128-SHA1-MODP2048
000 "vpn1": ESP algorithms wanted: 3DES(3)_000-MD5(1)_096; flags=-strict
000 "vpn1": ESP algorithms loaded: 3DES(3)_192-MD5(1)_096
000 "vpn1": ESP algorithm newest: 3DES_000-HMAC_MD5; pfsgroup=<N/A>
000
000 #3: "vpn1":4500 STATE_QUICK_R2 (IPsec SA established); EVENT_SA_REPLACE in 727s; isakmp#2; idle; import:not set
000 #3: "vpn1" O endereço de e-mail address está sendo protegido de spambots. Você precisa ativar o JavaScript enabled para vê-lo..7 O endereço de e-mail address está sendo protegido de spambots. Você precisa ativar o JavaScript enabled para vê-lo. O endereço de e-mail address está sendo protegido de spambots. Você precisa ativar o JavaScript enabled para vê-lo..7 O endereço de e-mail address está sendo protegido de spambots. Você precisa ativar o JavaScript enabled para vê-lo. ref=0 refhim=4294901761
000 #2: "vpn1":4500 STATE_MAIN_R3 (sent MR3, ISAKMP SA established); EVENT_SA_REPLACE in 13926s; lastdpd=-1s(seq in:0 out:0); idle; import:not set
000 #4: "vpn1":4500 STATE_QUICK_I2 (sent QI2, IPsec SA established); EVENT_SA_REPLACE in 453s; newest IPSEC; eroute owner; isakmp#1; idle; import:admin initiate
000 #4: "vpn1" O endereço de e-mail address está sendo protegido de spambots. Você precisa ativar o JavaScript enabled para vê-lo..7 O endereço de e-mail address está sendo protegido de spambots. Você precisa ativar o JavaScript enabled para vê-lo. O endereço de e-mail address está sendo protegido de spambots. Você precisa ativar o JavaScript enabled para vê-lo..7 O endereço de e-mail address está sendo protegido de spambots. Você precisa ativar o JavaScript enabled para vê-lo. ref=0 refhim=4294901761
000 #1: "vpn1":4500 STATE_MAIN_I4 (ISAKMP SA established); EVENT_SA_REPLACE in 13163s; newest ISAKMP; lastdpd=-1s(seq in:0 out:0); idle; import:admin initiate
000

Neste retorno há diversas informações, mas as mais importantes estão no final, onde mostram as SAs estabelecidas, ou seja, os tunneis IPSEC estabelecidos.

Pronto, a primeira fase da configuração está ok e nosso tunnel VPN estabelecido. Agora iniciaremos o processo para configuração utilizando certificado digital.

Gerando certificados digitais

Antes de realizarmos a configuração do OpenSwan para utilizar os certificados digitais é necessário ter ou gerar os certificados. Como o objetivo deste post é ser o mais completo possível, realizaremos todo o processo de geração da autoridade certificadora e assinatura/geração dos certificados.

Se você não entende muito bem como funciona esse negócio de autoridade certificadora, cadeia de certificação segue alguns posts para você dar uma olhada antes de continuar:

Agora sim podemos continuar com a geração dos certificados. Neste post veremos 2 formas de gerar estes certificados, a primeira e a mais simples utilizando um aplicativo windows que criei para gerar os certificados e a segunda e mais complexa utilizando os comandos OpenSSL (que funcionam em windows e linux)

Gerando certificados com o aplicativo BuildCert

Conforme ja comentado este aplicativo foi desenvolvido por mim especificamente para geração de certificados digitais para utilização em sistemas de VPN IPSEC, muitos dos aplicativos que realizam VPN IPSEC pedem configurações específicas nos certificados que são bem chatas de fazer através do openssl via linha de comando. Este aplicativo basicamente utiliza as próprias bibliotecas do OpenSSL para gerar os certificados.

Este aplicativo cria desde a CA até os certificados individuais de cada servidor de VPN. Todos compatíveis com qualquer sistema de autoridade de certificação. Outra funcionalidade interessante deste aplicativo é que pode ser utilizado com a sua autoridade de certificadora atual (caso ja tenha uma instalada).

Utilizando a CA atual para assinar o certificado

Para realizar este processo utilizando a sua CA atual será necessário ter o arquivo .pfx ou .p12 da sua CA. Caso sua CA seja windows e você não saiba como realizar este procedimento no post Instalando CA Root com Windows eu ensino como realiza-lo.

Gerando certificado

Realize o download do aplicativo BuildCert (clicando aqui) e descompacte em qualquer lugar em seu PC. O Aplicativo terá a seguinte estrutura de arquivos, por mais que pareça que há duplicados todos são necessários.

BuildCertTree

Modo de utilização

1
BuildCert.exe [common_name_ca] [common_name_cert] [password_ca] [password_cert]

Ao ser iniciado o aplicativo irá buscar dentro do diretório certs o arquivo com o common mane da CA + a extensão pfx ex.: ca.meudominio.pfx, caso o arquivo exista o aplicativo irá abri-lo com a senha definida e utiliza-lo para assinar os certificados gerados, caso contrário o aplicativo irá criar este pfx e utiliza-lo para assinar os certificados gerados.

Vamos para a pratica, execute os comandos abaixo para gerar uma CA com nome cavpn.tutorial e os certificados matriz.tutorial e filial.tutorial. Ambos com a senha 123456

1
2
BuildCert.exe cavpn.tutorial matriz.tutorial 123456 123456
BuildCert.exe cavpn.tutorial filial.tutorial 123456 123456

Após a execução dos comandos 3 arquivos por certificado serão criados:

  1. .cer: arquivo do certificado digital X509
  2. .key: chave privada do certificado
  3. .pfx: arquivo PKCS#12 contendo o certificado X509 + a chave privada

certs

Segue os prints dos certificados

ca1

Certificado da CA (Autoassinado)

ca2

Certificado da matriz assinado pela CA

ca3

Certificado da filial assinado pela CA

Pronto, os certificados foram gerados e estão prontos para serem utilizados no OpenSwan

Gerando certificados com o OpenSSL

Outro modo de gerar os certificados é utilizando diretamente o OpenSSL.

Se você ja gerou os certificados através dos passos anteriores (aplicativo BuildCert) pode pular estes passos e ir direto para configuração dos tunneis.

Gerando certificado

Antes de tudo vamos preparar o ambiente para o OpenSSL, realize uma cópia do arquivo de configuração padrão do OpenSSL para o seu ambiente

1
cp cp /etc/ssl/openssl.cnf /etc/ipsec.d/

Edite o arquivo de configuração alterando as seguintes linhas

1
2
3
4
5
6
[ CA_default ]
 
dir = /etc/ipsec.d
certificate = $dir/cacerts/cavpn.tutorial.cer
 
private_key = $dir/private/cavpn.tutorial.key

E por fim vamos criar arquivos e diretórios necessários para o correto funcionamento do OpenSSL

1
2
3
mkdir newcerts
touch index.txt
echo "00" > serial

Agora vamos criar a nossa CA através do comando abaixo

1
2
cd /etc/ipsec.d
openssl req -x509 -days 3650 -config /etc/ipsec.d/openssl.cnf -newkey rsa:2048 -keyout private/cavpn.tutorial.key -out cacerts/cavpn.tutorial.cer

Na execução deste comando diversas informações serão solicitadas, porém 2 delas são importantes, 1 – Senha da CA, essa senha será solicitada para assinar os certificados da matriz e da filial; 2 – CommonName, ou seja o nome da CA. Preencha estes dados conforme desejado ou seguindo o exemplo abaixo

cert1

Gere a requisição e assine o certificado da matriz

1
2
3
openssl req -config /etc/ipsec.d/openssl.cnf -newkey rsa:1024 -keyout private/matriz.tutorial.key -out certs/matriz.tutorial.req
openssl ca -in certs/matriz.tutorial.req -config /etc/ipsec.d/openssl.cnf -days 730 -out certs/matriz.tutorial.cer -notext
openssl rsa -in private/matriz.tutorial.key -out private/matriz.tutorial.key

Diversas informações serão solicitadas porém a mais importante é o CommonName que precisa ser o matriz.tutorial para que os próximos scripts funcionem corretamente
cert-matriz

Gere a requisição e assine o certificado da filial

1
2
3
openssl req -config /etc/ipsec.d/openssl.cnf -newkey rsa:1024 -keyout private/filial.tutorial.key -out certs/filial.tutorial.req
openssl ca -in certs/filial.tutorial.req -config /etc/ipsec.d/openssl.cnf -days 730 -out certs/filial.tutorial.cer -notext
openssl rsa -in private/filial.tutorial.key -out private/filial.tutorial.key

Diversas informações serão solicitadas porém a mais importante é o CommonName que precisa ser o filial.tutorial para que os próximos scripts funcionem corretamente
cert-filial

Pronto, os certificados estão gerados e pronto para serem utilizados.

Configurando os tunneis ipsec para utilizar os certificados digitais

Agora que temos todos os certificados a mão podemos iniciar a configuração do OpenSwan para estabelecer a VPN utilizando os certificados digitais, estes passos são individuais para cada servidor.

VPN Server Matriz

Copie os arquivos necessários para os seus respectivos locais de utilização conforme indicado na tabela abaixo:

  • /etc/ipsec.d/cacerts/cavpn.tutorial.cer
  • /etc/ipsec.d/certs/filial.tutorial.cer
  • /etc/ipsec.d/certs/matriz.tutorial.cer
  • /etc/ipsec.d/private/matriz.tutorial.key

Edite o arquivo /etc/ipsec.d/vpn1.conf para que o mesmo fique com o seguinte conteúdo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
conn vpn1 # Nome da Conexão VPN
    type= tunnel
    authby= rsasig #Tipo de autenticação
 
    # Left security, (dados da Matriz)
    left= 200.165.10.50 # IP real/físico do servidor na matriz