sábado, 15 de julho de 2017

IPSec Crypto-maps em routers Cisco

Pessoal, nesse post vou falar um pouco sobre IPSec em roteadores Cisco, como hoje em dia os firewalls de nova geração tratam a criação/manutenção de VPNs de forma mais simples, muitas vezes os analistas acabam criando e mantendo ambientes sem ao menos entender o que ele está fazendo na GUI (sou um exemplo disso, pois aprendi um pouco mais fazendo na CLI).

Pra começar vamos falar um pouco de conceitos de VPN e IPSec além de  algumas observações.

- VPN (Virtual Private Network) - é uma extensão da rede privada sobre a rede pública (internet) em geral provendo:
   - Autenticação de dados (garantir a identidade de quem envia os dados);
   - Integridade de dados (garantir que os dados não foram alterados até o destino);
   - Confiabilidade de dados (garantir privacidade nos dados);
   - Anti-replay de dados;
 
   - IPsec é um protocolo de criptografia de tunelamento na camada 3 (muitos se confundem com o SSL), criado para manter alguns padrões em cima dos itens citados acima;
      - Possuí 2 modos:
         - Tunnel: o pacote inteiro é criptografado;
- Transport: somente o payload é criptografado;

      - Utiliza 2 estruturas para construir o túnel:
         - SA (Security Association)- Mantém os parametros IPSec em acordo, além da criptografia e autenticação;
         - SPI (Security Parameter Index) - Campo do headear para selecionar o SA em quem recebe o tráfego (receiver), parecido com o header de vlan nos labels MPLS;

 - Protocolos de negociação : ISAKMP/IKE:
         - ISAKMP (Internet Security Association and Key Management Protocol) - framework de configuração que mantem os padrões de autenticação e troca de  keys;
         - IKE ( Internet Key Exchange) - Implementação atual que é composta de 3 suites de protocolos (ISAKMP, Oakley e SKEME), é usado para distribuição e criação de chaves públicas;
 - Utilizam PSK (Preshared key) ou PKI (certificados) para autenticação;
      - DH (Difie-Hellman) - método de troca de chaves criptografadas;
 - Algoritimos de criptografia (DES, 3DES, AES-128, AES-256);
 - IKE Hashing - IKEv1, MD5, SHA1, IKEv2, SHA-256, SHA-384;

- Phase 1 e Phase2:
 - Negociação do IPSec SAs:
    - Security Protocol (ESP ou AH);
- Encapsulation mode (tunnel ou transport);
- Encryption (DES, 3DES, AES);
- Authentication (MD5, SHA, SHA256, SHA512);

Observações:
- AH vs ESP:
  - AH (Authentication Header) - encrptação do header na origem do pacote (número de protocolo 51);
      - Garante integridade;
  - ESP (Encapsulation Security Payload) - encriptação do pacote inteiro (protocolo 50);
           - Garante integridade, confidencialidade e anty-replay;

  - IPSec Control Plane vs Data Plane:
   - Todo tráfego é unicast IPv4/IPv6;
- Control Plane ISAKMP:
  -UDP 500;
  -UDP 4500 se for utilizar NAT;
   - IPSec Data plane:
  - ESP(50) ou AH (51);
  - ESP na porta 4500 se for utilizar NAT;

 - Passos para configurar IPSec:
       - Defina Phase 1 ISAKMP policy;
       - Defina Phase 2 IPSec policy;
       - Permita o tráfego origem/destino nos routers (ACL);
       - Aplique a crypto map ou o IPsec protect no túnel ou na interface;
       - Crie tráfego para dar up no tunel;
  - Who? (peer address, hostname ou FQDN);
  - What? (proxy ACL);
  - How? (Defina o transform-set);

LAB:

Para o lab vou utilizar 3 roteadores IOU (I86BI_LINUX-ADVENTERPRISEK9-M)), porém você pode utilizar diveros outros modelos que suportem IPsec (7200 no GNS3 por exemplo).

-Configuração básica do LAB:

R1#interface Loopback100
 ip address 200.0.0.1 255.255.255.255
 interface Ethernet0/1.12
 encapsulation dot1Q 12
 ip address 192.168.12.1 255.255.255.0
R1#ip route 0.0.0.0 0.0.0.0 192.168.12.2

R2# interface Loopback100
 ip address 200.0.0.2 255.255.255.255
 interface Ethernet0/1.12
 encapsulation dot1Q 12
 ip address 192.168.12.2 255.255.255.0
  interface Ethernet0/1.23
 encapsulation dot1Q 23
 ip address 192.168.23.2 255.255.255.0

R3# interface Loopback100
 ip address 200.0.0.3 255.255.255.255
  interface Ethernet0/1.23
 encapsulation dot1Q 23
 ip address 192.168.23.3 255.255.255.0
R3#ip route 0.0.0.0 0.0.0.0 192.168.23.2

 - Configurar a fase 1 ISAKMP policy:
- Nessa etapa você deverá configurar a policy do ISAKMP com os seguintes parâmetros:

  #R1(config)crypto isakmp policy 10
  #R1(config-isakmp)authentication pre-share  (definir PSK como chave)
  #R1(config-isakmp)encryption aes 128 (criptografia, pode ser 3des, AES e DES, além do tamanho da key em bit)
  #R1(config-isakmp)hash md5  (definir a hash)
  #R1(config-isakmp)group 5 (definir o Diffie-Hellman group)
  #R1(config-isakmp)lifetime 86400

  #R3(config)crypto isakmp policy 10
  #R3(config-isakmp)authentication pre-share
  #R3(config-isakmp)encryption aes 128
  #R3(config-isakmp)hash md5
  #R3(config-isakmp)group 5
  #R3(config-isakmp)lifetime 86400

Obs. essas opções são variáveis e se diferenciam no nível de segurança que você quer o seu túnel IPsec (quanto maior a chave mais seguro, porém consome mais processamento do router).

- Agora devemos criar a PSK para poder acontecer a troca de chaves:

  #R1(config)crypto isakmp key CAFE address 192.168.23.3 (chave CAFE kkkk)

  #R3(config)crypto isakmp key CAFE address 192.168.12.1

- Vamos criar a access-list com o tráfego que será permitido no túnnel:

  R1(config)#access-list 100 permit ip 192.168.23.0 0.0.0.255 192.168.12.0 0.0.0.255
  R1(config)#access-list 100 permit ip host 200.0.0.3 host 200.0.0.1
  R1(config)# access-list 100 permit ip host 200.0.0.1 host 200.0.0.3

  R3(config)#access-list 100 permit ip 192.168.12.0 0.0.0.255 192.168.23.0 0.0.0.255
  R3(config)#access-list 100 permit ip host 200.0.0.1 host 200.0.0.3
  R3(config)#access-list 100 permit ip host 200.0.0.3 host 200.0.0.1

Obs. estou colocando o tráfego interessante como a comunicação entres as loopbacks para simular 2 lans se comunicando.

- Agora passando pra fase 2, vamos configurar os parâmetros do Crypto-Map:
 
   #R1(config)crypto ipsec transform-set TESTE esp-aes esp-sha-hmac
   #R1(cfg-crypto-trans)#mode tunnel
   #R1(config)#crypto map R1_R3 10 ipsec-isakmp
   #R1(config-crypto-map)#set peer 192.168.23.3
   #R1(config-crypto-map)#match address 100
   #R1(config-crypto-map)#set transform-set TESTE

   #R3(config)crypto ipsec transform-set TESTE esp-aes esp-sha-hmac
   #R3(cfg-crypto-trans)#mode tunnel
   #R3(config)#crypto map R3_R1 10 ipsec-isakmp
   #R3(config-crypto-map)#set peer 192.168.12.1
   #R3(config-crypto-map)#match address 100
   #R3(config-crypto-map)#set transform-set TESTE

-  Aplique o a crypto-map na interface de saída dos túneis:

#R1
interface Ethernet0/1.12
 encapsulation dot1Q 12
 ip address 192.168.12.1 255.255.255.0
 crypto map R1_R3
end

#R3
interface Ethernet0/1.23
 encapsulation dot1Q 23
 ip address 192.168.23.3 255.255.255.0
 crypto map R3_R1
end

- Se tudo estiver correto, agora basta gerar tráfego no túnel para ele subir:

R1#ping 200.0.0.3 source lo100
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 200.0.0.3, timeout is 2 seconds:
Packet sent with a source address of 200.0.0.1
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 5/5/6 ms

- Para verificar as configurações de crypto isakmp e ipsec utilize:

R1#sh crypto isakmp sa      
IPv4 Crypto ISAKMP SA
dst             src             state          conn-id status
192.168.23.3    192.168.12.1    QM_IDLE           1006 ACTIVE

IPv6 Crypto ISAKMP SA

R1#sh crypto ipsec sa

interface: Ethernet0/1.12
    Crypto map tag: R1_R3, local addr 192.168.12.1

   protected vrf: (none)
   local  ident (addr/mask/prot/port): (200.0.0.1/255.255.255.255/0/0)
   remote ident (addr/mask/prot/port): (200.0.0.3/255.255.255.255/0/0)
   current_peer 192.168.23.3 port 500
     PERMIT, flags={origin_is_acl,}
    #pkts encaps: 9, #pkts encrypt: 9, #pkts digest: 9
    #pkts decaps: 9, #pkts decrypt: 9, #pkts verify: 9
    #pkts compressed: 0, #pkts decompressed: 0
    #pkts not compressed: 0, #pkts compr. failed: 0
    #pkts not decompressed: 0, #pkts decompress failed: 0
    #send errors 0, #recv errors 0

     local crypto endpt.: 192.168.12.1, remote crypto endpt.: 192.168.23.3
     plaintext mtu 1438, path mtu 1500, ip mtu 1500, ip mtu idb Ethernet0/1.12
     current outbound spi: 0x58895A2A(1485396522)
     PFS (Y/N): N, DH group: none

     inbound esp sas:
      spi: 0x9A4EAE32(2588847666)
        transform: esp-aes esp-sha-hmac ,
        in use settings ={Tunnel, }
        conn id: 993, flow_id: SW:993, sibling_flags 80004040, crypto map: R1_R3
        sa timing: remaining key lifetime (k/sec): (4349587/1716)
        IV size: 16 bytes
        replay detection support: Y
        ecn bit support: Y status: off
        Status: ACTIVE(ACTIVE)

     inbound ah sas:

     inbound pcp sas:

     outbound esp sas:
      spi: 0x58895A2A(1485396522)
        transform: esp-aes esp-sha-hmac ,
        in use settings ={Tunnel, }
        conn id: 994, flow_id: SW:994, sibling_flags 80004040, crypto map: R1_R3
        sa timing: remaining key lifetime (k/sec): (4349587/1716)
        IV size: 16 bytes
        replay detection support: Y
        ecn bit support: Y status: off
        Status: ACTIVE(ACTIVE)
       
     outbound ah sas:

     outbound pcp sas:

   protected vrf: (none)
   local  ident (addr/mask/prot/port): (200.0.0.3/255.255.255.255/0/0)
   remote ident (addr/mask/prot/port): (200.0.0.1/255.255.255.255/0/0)
   current_peer 192.168.23.3 port 500
     PERMIT, flags={origin_is_acl,}
    #pkts encaps: 0, #pkts encrypt: 0, #pkts digest: 0
    #pkts decaps: 0, #pkts decrypt: 0, #pkts verify: 0
    #pkts compressed: 0, #pkts decompressed: 0
    #pkts not compressed: 0, #pkts compr. failed: 0
    #pkts not decompressed: 0, #pkts decompress failed: 0
    #send errors 0, #recv errors 0

     local crypto endpt.: 192.168.12.1, remote crypto endpt.: 192.168.23.3
     plaintext mtu 1500, path mtu 1500, ip mtu 1500, ip mtu idb Ethernet0/1.12
     current outbound spi: 0x0(0)
     PFS (Y/N): N, DH group: none

     inbound esp sas:
       
     inbound ah sas:

     inbound pcp sas:

     outbound esp sas:

     outbound ah sas:

     outbound pcp sas:

   protected vrf: (none)
   local  ident (addr/mask/prot/port): (192.168.23.0/255.255.255.0/0/0)
   remote ident (addr/mask/prot/port): (192.168.12.0/255.255.255.0/0/0)
   current_peer 192.168.23.3 port 500
     PERMIT, flags={origin_is_acl,}
    #pkts encaps: 0, #pkts encrypt: 0, #pkts digest: 0
    #pkts decaps: 0, #pkts decrypt: 0, #pkts verify: 0
    #pkts compressed: 0, #pkts decompressed: 0
    #pkts not compressed: 0, #pkts compr. failed: 0
    #pkts not decompressed: 0, #pkts decompress failed: 0
    #send errors 0, #recv errors 0

     local crypto endpt.: 192.168.12.1, remote crypto endpt.: 192.168.23.3
     plaintext mtu 1500, path mtu 1500, ip mtu 1500, ip mtu idb Ethernet0/1.12
     current outbound spi: 0x0(0)
     PFS (Y/N): N, DH group: none

     inbound esp sas:

     inbound ah sas:

     inbound pcp sas:

     outbound esp sas:

     outbound ah sas:

     outbound pcp sas:

- Verifique os matchs na access-list criada:

 R1# sh access-lists 100
Extended IP access list 100
    10 permit ip 192.168.23.0 0.0.0.255 192.168.12.0 0.0.0.255 (15 matches)
    20 permit ip host 200.0.0.3 host 200.0.0.1
    30 permit ip host 200.0.0.1 host 200.0.0.3 (24 matches)

- Teste também o tráfego por outras interfaces (simulando outras redes):

 R1#ping 200.0.0.3 source lo0
 Type escape sequence to abort.
 Sending 5, 100-byte ICMP Echos to 200.0.0.3, timeout is 2 seconds:
 Packet sent with a source address of 150.1.1.1
 .....
 Success rate is 0 percent (0/5)

Abraços pessoal

Nenhum comentário:

Postar um comentário