Configuración de IPSec en Router Cisco

Enviado por W0lf_F4ng el Lun, 10/04/2017 - 12:49
Configuración de IPSec en Router Cisco

A continuación, presentaré la configuración de una VPN Site-to-Site (S2S) utilizando IPSec entre dos Routers Cisco.

IPSec es un framework, el cual permite establecer conexiones seguras entre dos redes a través de un medio inseguro.

IPSec permite implementar CIA triad:

  • Confidencialidad
  • Integridad
  • Autenticación

NOTA: Cisco, en el material del CCNA Security establece que, en la triada CIA, la "A" es de Authentication, mientras que CIA por sí sola, la "A" es de Availability.

Además de esto, te permite implementar no repudio, lo cual especifica que el emisor no puede negar que él envió los datos (implementado cuando se utilizan certificados digitales) y anti-replay, que indica que no se aceptan mensajes viejos o duplicados.

IPSec utiliza el protocolo IKE (Internet Key Exchange version 1 [RFC 2409] y IKE v2 [RFC 5996]) para negociar y establecer los túneles VPN, el cual es un protocolo híbrido que implementa Oakley y SKEME (Secure Key Exchange Mechanism) para el intercambio de llaves, y este se encuentra dentro del framework ISAKMP (Internet Security Association and Key Management Protocol).

Para este laboratorio, implementaremos solo IKE v1.

IKE v1 posee 2 fases (al igual que la versión 2), donde la fase 1 se utiliza para crear un canal de comunicación seguro bidireccional (ISAKMP Security Association) entre los dos peer del túnel IPSec (autentica y cifra los peers).

Los atributos que se presentan en esta fase son:

  • Cifrado: se pueden utilizar DES (64 bits), 3DES (168 bits) o AES (128, 192 y 256 bits)
  • Hashing: es soportado MD5 y SHA
  • Intercambio de llaves: se utiliza un grupo Diffie-Hellman
  • Método de autenticación: puede ser a través de una PSK o un certificado digital
  • Atributos específicos de vendor

Es importante que se permita el puerto UDP 500 en los peer VPN, debido que es el puerto utilizado por IKE.

Esta fase se puede establecer con uno de los siguientes modos:

  • Main Mode: se intercambian 6 paquetes en tres rondas de ida y vuelta. Provee identity protection solo si se usa una PSK.

Main Mode

  • Aggressive Mode: se intercambian solo 3 paquetes. Provee identity protection solo si se usan certificados digitales.

Aggressive Mode

La fase 2 negocia el IPSec Security Association (SA). Se crean 2 IPSec SA (dos túneles), uno de entrada y otro de salida, los cuales son identificados por un SPI (Security Parameter Index) único, asignados por el initiator y otro por el responder.

En esta fase se trabaja con un modo llamado Quick Mode, en el cual se negocian los parámetros necesarios para establecer un canal seguro entre los pares, además de especificar el tráfico interesante de la VPN (tráfico que será enviado a través de la VPN).

Todas las negociaciones que se producen en esta fase están protegidas por las realizadas en la fase 1.

En Quick Mode se negocia lo siguiente:

  • El tipo de cifrado y las funciones hash a utilizar.
  • Modos de operación, puede ser transport o tunnel, la diferencia entre estos es:
    • Transport Mode: es utilizando en comunicaciones end-to-end, y solo cifra el payload del paquete, por lo tanto, no modifica la cabecera L3.
    • Tunnel Mode: es el modo por defecto de los Routers Cisco, y este, a diferencia del modo de transporte, es utilizado en comunicaciones entre VPN Gateways (VPN S2S), y cifra por completo el paquete original, añadiendo un nuevo encabezado L3.
  • Protocolo, puede ser AH o ESP:
    • AH (Authentication Header): este protocolo se encarga de la integridad de los datos, autenticación de origen, utiliza mecanismos de hash con llave y proporciona protección anti-replay, pero no provee confidencialidad debido que no cifra los datos. Utiliza el Protocol Number 51.
    • ESP (Encapsulating Security Payload): ESP provee integridad de los datos, confidencialidad (cifrado), autenticación del origen de los datos y protección anti-replay. Utiliza el Protocol Number 50.

ESP-AHA continuación, se presenta la diferencia entre Tunnel Mode y Transport Mode usando AH y ESP:

Operation Mode

NAT Traversal

ESP, como trabaja en capa 3, no posee un número de puerto como a diferencia de ISAKMP que usa el puerto UDP 500, por lo tanto, es un problema trabajar con este protocolo cuando se posee una red con NAT.

Para poder tener una comunicación sin problemas cuando se envían paquetes encapsulados en ESP, se utiliza la herramienta NAT-T (NAT Traversal).

Cuando se está estableciendo el túnel VPN, en la fase 1 (Main Mode), se detecta si ambos extremos soportan NAT-T, y si están utilizando NAT, de ser así, los paquetes en la fase 2 serán encapsulados en un datagrama UDP con el puerto 4500.

NAT-TPara finalizar la parte de teoría, se presentan los 3 mensajes enviados en Quick Mode:

Quick Mode

Para este lab se utilizará la siguiente topología, y la VPN se realizará entre R1 y R3:

Diagrama

Configuración inicial

R1

R1#show run | sec interface FastEthernet0/0|interface FastEthernet0/1|ip route
interface FastEthernet0/0
ip address 200.12.12.1 255.255.255.252
duplex auto
speed auto
interface FastEthernet0/1
ip address 192.168.1.1 255.255.255.0
duplex auto
speed auto
ip route 0.0.0.0 0.0.0.0 200.12.12.2

R2

R2#show run | sec interface FastEthernet0/0|interface FastEthernet0/1
interface FastEthernet0/0
ip address 200.12.12.2 255.255.255.252
duplex auto
speed auto
interface FastEthernet0/1
ip address 200.23.23.2 255.255.255.252
duplex auto
speed auto

R3

R3#show run | sec interface FastEthernet0/0|interface FastEthernet0/1|ip route
interface FastEthernet0/0
ip address 172.16.2.1 255.255.255.0
duplex auto
speed auto
interface FastEthernet0/1
ip address 200.23.23.1 255.255.255.252
duplex auto
speed auto
ip route 0.0.0.0 0.0.0.0 200.23.23.2

Configuración fase 1

Primero que todo, es necesario definir los parámetros para asegurar la comunicación entre ambos Routers:

R1

R1(config)#crypto isakmp policy 1
R1(config-isakmp)#authentication pre-share
R1(config-isakmp)#encryption aes 256
R1(config-isakmp)#hash sha
R1(config-isakmp)#group 5
R1(config-isakmp)#lifetime 21600

R3

R3(config)#crypto isakmp policy 1
R3(config-isakmp)#authentication pre-share
R3(config-isakmp)#encryption aes 256
R3(config-isakmp)#hash sha
R3(config-isakmp)#group 5
R3(config-isakmp)#lifetime 21600

Cabe destacar que en ambos peers deben estar los mismos valores, o la VPN no levantará, y además de que los valores utilizados en este lab no son mandatorios, se puede utilizar un certificado digital para la autenticación, además de poder cambiar los algoritmos de cifrado, hash y grupo Diffie-Hellman.

Como se utiliza una PSK, se debe establecer la clave en ambos equipos, y esta debe ser idéntica en ambos Routers:

R1

R1(config)#crypto isakmp key 0 PASSPHASE1 address 200.23.23.1

R3

R3(config)#crypto isakmp key 0 PASSPHASE1 address 200.12.12.1

Configuración fase 2

En la fase 2 se definirá el tráfico interesante que pasará a través de la VPN:

R1

R1(config)#ip access-list extended TRAFFIC-TO-R3
R1(config-ext-nacl)#permit ip 192.168.1.0 0.0.0.255 172.16.2.0 0.0.0.255

R3

R3(config)#ip access-list extended TRAFFIC-TO-R1
R3(config-ext-nacl)#permit ip 172.16.2.0 0.0.0.255 192.168.1.0 0.0.0.255

Luego de especificar el tráfico interesante, debemos especificar como se van a cifrar los datos:

R1

R1(config)#crypto ipsec transform-set TSET-TO-R3 esp-sha-hmac esp-aes 256
R1(cfg-crypto-trans)#?
Crypto transform configuration commands:
default Set a command to its defaults
exit Exit from crypto transform configuration mode
mode encapsulation mode (transport/tunnel)
no Negate a command or set its defaults

R1(cfg-crypto-trans)#mode ?
transport transport (payload encapsulation) mode
tunnel tunnel (datagram encapsulation) mode

R1(cfg-crypto-trans)#mode tunnel

Como se puede observar, al configurar el transform-set, el Router nos permite cambiar el modo de operación de Tunnel Mode a Transport Mode.

R3

R3(config)#crypto ipsec transform-set TSET-TO-R1 esp-sha-hmac esp-aes 256

Por último, se crea un crypto map, el cual declara todos los datos anteriormente configurados y los aplica a la interfaz de salida:

R1

R1(config)#crypto map CMAP 1 ipsec-isakmp
% NOTE: This new crypto map will remain disabled until a peer
and a valid access list have been configured.
R1(config-crypto-map)#match address TRAFFIC-TO-R3
R1(config-crypto-map)#set transform-set TSET-TO-R3
R1(config-crypto-map)#set peer 200.23.23.1
R1(config-crypto-map)#exit
R1(config)#interface f0/0
R1(config-if)#crypto map CMAP
*Mar 1 00:22:55.127: %CRYPTO-6-ISAKMP_ON_OFF: ISAKMP is ON
R1(config-if)#

R3

R3(config)#crypto map CMAP 1 ipsec-isakmp
% NOTE: This new crypto map will remain disabled until a peer
and a valid access list have been configured.
R3(config-crypto-map)#match address TRAFFIC-TO-R1
R3(config-crypto-map)#set transform-set TSET-TO-R1
R3(config-crypto-map)#set peer 200.12.12.1
R3(config-crypto-map)#exit
R3(config)#interface f0/1
R3(config-if)#crypto map CMAP
*Mar 1 00:20:00.451: %CRYPTO-6-ISAKMP_ON_OFF: ISAKMP is ON
R3(config-if)#

NOTA: solo se puede aplicar un crypto map por interfaz.

El siguiente punto, a mi parecer es muy importante, debido que no todos lo explican, pero es fundamental para que levante la VPN y se reenvíe el tráfico por esta.

Para poder reenviar el tráfico hacia la red de destino desde cualquier extremo de la VPN, es necesario tener una ruta hacia esta. La primera opción, es configurar una ruta estática hacia esta red, o la otra es inyectar una ruta reversa, la cual funcionará como proxy.

R1

R1(config)#ip route 172.16.2.0 255.255.255.0 f0/0
R1(config)#do sh ip ro
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route

Gateway of last resort is 200.12.12.2 to network 0.0.0.0

 172.16.0.0/24 is subnetted, 1 subnets
S 172.16.2.0 is directly connected, FastEthernet0/0
200.12.12.0/30 is subnetted, 1 subnets
C 200.12.12.0 is directly connected, FastEthernet0/0
C 192.168.1.0/24 is directly connected, FastEthernet0/1
S* 0.0.0.0/0 [1/0] via 200.12.12.2

R3

R3(config)#crypto map CMAP 1
R3(config-crypto-map)#reverse-route static
This will remove all existing SAs on this map
R3(config-crypto-map)#do sh ip ro
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route

Gateway of last resort is 200.23.23.2 to network 0.0.0.0

 200.23.23.0/30 is subnetted, 1 subnets
C 200.23.23.0 is directly connected, FastEthernet0/1
172.16.0.0/24 is subnetted, 1 subnets
C 172.16.2.0 is directly connected, FastEthernet0/0
S 192.168.1.0/24 [1/0] via 200.12.12.1
S* 0.0.0.0/0 [1/0] via 200.23.23.2

Para levantar el túnel, es necesario generar tráfico (como un ping). Cuando se hace un ping, este al principio falla debido que se está generando el túnel, pero luego de que este esté arriba, el tráfico pasa sin problemas:

R1

R1#ping 172.16.2.1 source fastEthernet 0/1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 172.16.2.1, timeout is 2 seconds:
Packet sent with a source address of 192.168.1.1
....
Success rate is 0 percent (0/5)
R1#show crypto isakmp sa
dst src state conn-id slot status
200.23.23.1 200.12.12.1 QM_IDLE 1 0 ACTIVE

R1#show crypto ipsec sa

interface: FastEthernet0/0
Crypto map tag: CMAP, local addr 200.12.12.1

 protected vrf: (none)
local ident (addr/mask/prot/port): (192.168.1.0/255.255.255.0/0/0)
remote ident (addr/mask/prot/port): (172.16.2.0/255.255.255.0/0/0)
current_peer 200.23.23.1 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 4, #recv errors 0

 local crypto endpt.: 200.12.12.1, remote crypto endpt.: 200.23.23.1
path mtu 1500, ip mtu 1500, ip mtu idb FastEthernet0/0
current outbound spi: 0x7F016F85(2130800517)

 inbound esp sas:
spi: 0x360F4157(906969431)
transform: esp-256-aes esp-sha-hmac ,
in use settings ={Tunnel, }
conn id: 2001, flow_id: SW:1, crypto map: CMAP
sa timing: remaining key lifetime (k/sec): (4518742/3549)
IV size: 16 bytes
replay detection support: Y
Status: ACTIVE

 inbound ah sas:

 inbound pcp sas:

 outbound esp sas:
spi: 0x7F016F85(2130800517)
transform: esp-256-aes esp-sha-hmac ,
in use settings ={Tunnel, }
conn id: 2002, flow_id: SW:2, crypto map: CMAP
sa timing: remaining key lifetime (k/sec): (4518742/3547)
IV size: 16 bytes
replay detection support: Y
Status: ACTIVE

 outbound ah sas:

 outbound pcp sas:
R1#ping 172.16.2.1 source fastEthernet 0/1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 172.16.2.1, timeout is 2 seconds:
Packet sent with a source address of 192.168.1.1
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 24/35/44 ms

R3

R3#ping 192.168.1.1 source f0/0

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.1.1, timeout is 2 seconds:
Packet sent with a source address of 172.16.2.1
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 100/108/136 ms
R3#show crypto isakmp sa
dst src state conn-id slot status
200.23.23.1 200.12.12.1 QM_IDLE 1 0 ACTIVE

R3#show crypto ipsec sa

interface: FastEthernet0/1
Crypto map tag: CMAP, local addr 200.23.23.1

 protected vrf: (none)
local ident (addr/mask/prot/port): (172.16.2.0/255.255.255.0/0/0)
remote ident (addr/mask/prot/port): (192.168.1.0/255.255.255.0/0/0)
current_peer 200.12.12.1 port 500
PERMIT, flags={origin_is_acl,}
#pkts encaps: 20, #pkts encrypt: 20, #pkts digest: 20
#pkts decaps: 19, #pkts decrypt: 19, #pkts verify: 19
#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.: 200.23.23.1, remote crypto endpt.: 200.12.12.1
path mtu 1500, ip mtu 1500, ip mtu idb FastEthernet0/1
current outbound spi: 0x360F4157(906969431)

 inbound esp sas:
spi: 0x7F016F85(2130800517)
transform: esp-256-aes esp-sha-hmac ,
in use settings ={Tunnel, }
conn id: 2001, flow_id: SW:1, crypto map: CMAP
sa timing: remaining key lifetime (k/sec): (4486563/2978)
IV size: 16 bytes
replay detection support: Y
Status: ACTIVE

 inbound ah sas:

 inbound pcp sas:

 outbound esp sas:
spi: 0x360F4157(906969431)
transform: esp-256-aes esp-sha-hmac ,
in use settings ={Tunnel, }
conn id: 2002, flow_id: SW:2, crypto map: CMAP
sa timing: remaining key lifetime (k/sec): (4486562/2976)
IV size: 16 bytes
replay detection support: Y
Status: ACTIVE

 outbound ah sas:

 outbound pcp sas:
R3#

Como se puede observar, el comando show crypto isakmp sa muestra el valor QM_IDLE, esto indica que la autenticación se realizó de forma exitosa y que utiliza el Quick Mode para los intercambios en la fase 2.

show crypto ipsec sa muestra detalles tales como:

  • El crypto map que se está utilizando y donde está aplicado
  • Cuál es el tráfico interesante que pasará a través del túnel VPN
  • Datos del peer
  • El tráfico que ha pasado por el túnel
  • Los SPI que se generan, donde se puede observar que el SPI de entrada de R1, es idéntico al de salida de R3

Captura mensajes fase 1

La siguiente imagen muestra los 6 mensajes de la fase 1 y los 3 de la fase 2:

ike messages

Mensaje 1:

main mode message 1

Mensaje 2:

main mode message 2

Mensaje 3:

main mode message 3

Mensaje 4:

main mode message 4

Mensaje 5:

main mode message 5

Mensaje 6:

main mode message 6

Captura mensajes fase 2

Mensaje 1:

quick mode message 1

Mensaje 2:

quick mode message 2

Mensaje 3:

quick mode message 3

Captura del tráfico generado (ping)

esp traffic

Troubleshooting

Para realizar troubleshooting, se pueden utilizar los siguientes comandos:

Fase 1:

  • show crypto isakmp sa
  • show crypto isakmp sa detail
  • debug crypto isakmp

Fase 2:

  • show crypto ipsec sa
  • show crypto ipsec sa detail
  • debug crypto ipsec

Chequear el crypto map:

  • show crypto map