VPN IPSec Site-to-Site com certificado digital (e variação com pre-shared-key)

Fernando Mantovani Pierobon
TechRebels
Published in
7 min readOct 24, 2019

Fala pessoal, tudo bem? Sou o Fernando Mantovani Pierobon e esse é o meu primeiro artigo aqui na TechRebels. A inspiração pra começar a escrever veio dos anos de estudo que levei até conseguir o CCIE Security (#63268).

Vamos então abordar boa parte das tecnologias de segurança da Cisco e hoje começaremos do básico. Vamos brincar com VPN site-to-site autenticando com certificado digital e PSK. Usei roteadores, mas o conceito é exatamente o mesmo entre firewalls (seja ASA ou o Firepower), ok?

Fiquem a vontade para comentar ou me contatar no LinkedIn. Gostou do que leu?? Então dê seu “claps” aí do lado esquerdo do artigo e compartilhe nos seus grupos. Não se esqueça de me seguir e a TechRebels clicando follow lá em cima :)

Topologia e arquitetura

Topologia Site to Site IPSec com Certificado Digital
  • ISP — Internet e NTP Server
  • R1 — CA Server
  • R2 — Site 1
  • R3 — Site 2

Obs: Para os estudos do CCIE acostumei a não usar mais rotas estáticas e sim um protocolo de roteamento dinâmico, sempre com autenticação. Isso consta no blueprint e cai na prova

R1

Após a conectividade estar ok a primeira coisa que fazemos é a geração da chave rsa

crypto key generate rsa label rsakey

Consulte a chave depois com o comando abaixo:

R1#sh crypto key mypubkey rsa

% Key pair was generated at: 11:27:31 BRT Oct 15 2019

Key name: rsakey

Key type: RSA KEYS

Storage Device: private-config

Usage: General Purpose Key

Key is not exportable.

Configuração da CA

Em seguida, vamos criar a CA Server. O método de enrollment que usaremos será via http, então precisamos habilitar o http server no router

R1#ip http server

crypto pki server ca-server

database level complete

no database archive

issuer-name CN=r1.lab.com

grant auto

O método de geração do certificado, que no nosso caso é automático (grant auto). Caso fosse manual, após criar a requisição no R2 ou R3, teríamos que entrar com esse output na CA Server que irá gerar o certificado, copiá-lo e depois importá-lo no R2 ou R3. Então, pra facilitar (e como é um lab), podemos usar o modo automático.

O comando database level configura o nível de informações que será guardada na base de dados e o issuer-name o nome do host.

Feito isso, é só dar um no shutdown na CA Server

Para ver o status:

R1#sh crypto pki server

Certificate Server ca-server:

Status: enabled

State: enabled

Server’s configuration is locked (enter “shut” to unlock it)

Issuer name: CN=r1.lab.com

CA cert fingerprint: 090C3088 5F798668 32B78445 90C3080C

Granting mode is: auto

Last certificate issued serial number (hex): 3

CA certificate expiration timer: 11:28:50 BRT Oct 14 2022

CRL NextUpdate timer: 17:28:17 BRT Oct 18 2019

Current primary storage dir: nvram:

Database Level: Complete — all issued certs written as <serialnum>.cer

Caso a gente não habilite o ip http server, o status da CA Server estaria disabled.

R2 e R3

A config da CA está pronta, agora vamos criar um trustpoint em cada um dos sites.

Após criar a chave rsa utilizando o mesmo comando anterior — crypto key generate rsa label rsakey — vamos criar o trustpoint de nome trustp-r2

crypto pki trustpoint trustp-r2

enrollment url http://10.0.1.1:80

fqdn r3.lab.com

ip-address ethernet0/0

subject-name CN=r3.lab.com

revocation-check crl

rsakeypair rsakey

O enrollment url que apontamos para o R1, o fqdn e subject-name que será incluído no certificado, o nome da rsakey que criamos, e eu ainda gosto de adicionar o IP do router no certificado.

Finalizada a config, vamos autenticar o trustpoint e fazer o download do certificado do R1:

R2(config)#crypto pki authenticate trustp-r2

Certificate has the following attributes:

Fingerprint MD5: 090C3088 5F798668 32B78445 90C3080C

Fingerprint SHA1: 66F18FBC 68EE0171 25DEAFA3 A6A52B7F AD282B50

% Do you accept this certificate? [yes/no]: yes

Trustpoint CA certificate accepted.

Por fim, vamos requisitar o nosso certificado para a CA Server, ou seja, vamos fazer o enrollment do R2

R2(config)#crypto pki enroll trustp-r2

%

% Start certificate enrollment ..

% Create a challenge password. You will need to verbally provide this

password to the CA Administrator in order to revoke your certificate.

For security reasons your password will not be saved in the configuration.

Please make a note of it.

Password: xxxxxx

Re-enter password: xxxxxx

% The subject name in the certificate will include: CN=r2.lab.com

% The subject name in the certificate will include: r2.lab.com

% Include the router serial number in the subject name? [yes/no]: no

Request certificate from CA? [yes/no]: yes

% Certificate request sent to Certificate Authority

% The ‘show crypto pki certificate verbose trustp-r2’ command will show the finge rprint.

Após apenas alguns segundos, receberemos as mensagens abaixo

R2(config)#

*Oct 15 14:34:43.556: CRYPTO_PKI: Certificate Request Fingerprint MD5: 27936625 CD9C0DC5 D3C7A746 03C2FDED

*Oct 15 14:34:43.557: CRYPTO_PKI: Certificate Request Fingerprint SHA1: 1A927C3 1 5097B653 78FBEFC5 F19B8682 BD06CED7

R2(config)#

*Oct 15 14:34:43.613: %PKI-6-CERTRET: Certificate received from Certificate Authority

Temos agora o nosso certificado que será usado para autenticar a VPN site-to-site com o R3

Obs: Fazer o mesmo procedimento no R3

Para verificarmos o nosso certificado e o certificado da CA que baixamos:

R2#sh crypto pki certificates

Certificate

Status: Available

Certificate Serial Number (hex): 02

Certificate Usage: General Purpose

Issuer: cn=r1.lab.com

Subject: Name: r2.lab.com

IP Address: 10.0.2.2

ipaddress=10.0.2.2+hostname=r2.lab.com

cn=r2.lab.com

Validity Date:

start date: 11:34:43 BRT Oct 15 2019

end date: 11:34:43 BRT Oct 14 2020

Associated Trustpoints: trustp-r2

Storage: nvram:r1labcom#2.cer

CA Certificate

Status: Available

Certificate Serial Number (hex): 01

Certificate Usage: Signature

Issuer: cn=r1.lab.com

Subject: cn=r1.lab.com

Validity Date:

start date: 11:28:50 BRT Oct 15 2019

end date: 11:28:50 BRT Oct 14 2022

Associated Trustpoints: trustp-r2

Storage: nvram:r1labcom#1CA.cer

VPN

Vamos agora pra configuração da VPN IPSec site-to-site:

Em primeiro lugar vamos definir o tráfego Interessante, ou o tráfego que será permitido passar pelo tunel

ip access-list extended VPN-R3

permit ip 172.16.2.0 0.0.0.255 172.16.3.0 0.0.0.255

Obs: Repare que é apenas o tráfego das loopbacks dos dois routers. Essas subnets simulam 2 servidores da rede LAN de cada site

crypto isakmp policy 10

authentication rsa-sig

encryption aes 256

hash sha256

group 2

O comando authentication rsa-sig vem por default e não aparece na config. Caso fôssemos usar pre-shared-key, teríamos que explicitar auth pre-shared-key

crypto ipsec transform-set TSET esp-3des esp-sha-hmac

!

crypto map CMAP 10 ipsec-isakmp

set peer 10.0.3.3

set transform-set TSET

match address VPN-R3

reverse-route static

Habilitar a VPN na interface

interface Ethernet0/0

ip address 10.0.2.2 255.255.255.0

crypto map CMAP

Reparem que nós não temos rota para a loopback do R3 — afinal eu não publiquei ela no BGP e não adicionei nenhuma rota estática

R2#show ip route

10.0.0.0/8 is variably subnetted, 4 subnets, 2 masks

B 10.0.1.0/24 [20/0] via 10.0.2.10, 00:14:54

C 10.0.2.0/24 is directly connected, Ethernet0/0

L 10.0.2.2/32 is directly connected, Ethernet0/0

B 10.0.3.0/24 [20/0] via 10.0.2.10, 00:14:54

172.16.0.0/16 is variably subnetted, 3 subnets, 2 masks

C 172.16.2.0/24 is directly connected, Loopback0

L 172.16.2.2/32 is directly connected, Loopback0

R3#sh run | s router bgp

router bgp 3

bgp log-neighbor-changes

network 10.0.3.0 mask 255.255.255.0

neighbor 10.0.3.10 remote-as 123

neighbor 10.0.3.10 password cisco

A solução então é entrar com o comando destacado reverse-route static, que injeta uma rota estática baseado na nossa ACL de tráfego interessante

R2(config-crypto-map)#reverse-route ?

remote-peer Create route in route table for remote tunnel endpoint

static Create routes based on static ACLs permanently

Verificação

Ping

Fase 1

Fase 2

Alternando para pre-shared-key, teríamos essas mudanças na config

crypto isakmp policy 10

encr aes 256

hash sha256

authentication pre-share

group 2

crypto isakmp key cisco address 10.0.2.2

E após mudar o mesmo no R3, verificaríamos

No próximo artigo continuaremos a explorar os principais tecnologias de segurança. Portanto continue com a gente :)

O que achou desse artigo? Vai te ajudar no dia-a-dia? Fala pra gente nos comentários?

Gostou do que leu?? Então dê seu “claps” aí do lado esquerdo do artigo e compartilhe nos seus grupos. Não se esqueça de me seguir e a TechRebels clicando follow lá embaixo :)

Sobre o autor:

Fernando Mantovani Pierobon trabalha há 18 anos na área de TI sendo 14 com segurança da tecnologia da informação.

É formado em Ciências da Computação e CCIE Security #63268.

https://www.linkedin.com/in/fernandomantovani/

--

--