Ein kleines IPsec Howto

April 5, 2012

IPsec ist ein ziemlich komplexes Protokoll beziehungsweise eine Protokollsammlung, die es ermöglichen soll über VPNs (“Tunnel”) zwischen Netzwerken sicher kommunizieren zu können. Dabei können je nach Konfiguration Vertraulichkeit, Authentizität und Integrität gewährleistet werden.

Zwei Modi:

  • Transport-Mode
    [Host-to-Host Verbindung]
  • Tunnel-Mode
    [Net-to-Net Verbindung]

Drei Protokolle:

  • Authentication Header (AH)
    [Authentizität/Integrität]
  • Encapsulating Security Payload (ESP)
    [Authentizität/Integrität/Vertraulichkeit]
  • Internet Key Exchange (IKE)
    [Keyaustausch]

Im folgenden sollen die zwei Netzwerke 192.168.0.0/24 und 192.168.1.0/24 mit Hilfe des Tunnelmodus verbunden werden und die komplette Kommunikation zwischen diesen Netzwerken mit Hilfe von AH abgesichert werden. Für die Demonstration des Beispiels wird der Cisco Packet Tracer verwendet. Es kommen zwei Router des Modells 1841 zum Einsatz.

topology

Zwischen Host1 und R1 sowie zwischen Host2 und R2 besteht jeweils eine Verbindung durch ein Crossover-Kabel. R1 und R2 werden über eine serielle Verbindung verbunden, wobei R1 der DCE und somit der Taktgeber ist. Die IP-Konfiguration der Interfaces wird hier als bekannt vorausgesetzt. R1 und R2 dienen jeweils als Standardgateway für Host1 beziehungsweise Host2.

1.ISAKMP (IKE) Policy auf R1 und R2 konfigurieren:

crypto isakmp policy 100
 encryption 3des
 hash md5
 authentication pre-share
 lifetime 42400

Durch diese Policy wird festgelegt, dass zur Verschlüsselung (beziehungsweise Signierung) 3DES, für Hashbildung MD5 und als Authentifizierungsmethode pre-share verwendet werden.

2.Transform-set auf R1 und R2 anlegen.
Dadurch wird festgelegt, ob AH oder ESP verwendet wird.

Auf R1:

crypto ipsec transform-set R1TRANSFORM ah-md5-hmac

Auf R2:

crypto ipsec transform-set R2TRANSFORM ah-md5-hmac

Bei einigen IOS-Versionen gelangt man nun in den transform-mode, wo man noch “mode tunnel” setzen kann. Bei dem hier verwendeten IOS Version 12.4(15)T1 ist der Tunnel Modus allerdings Standard.

3.Den verwendeten Key (pre-share) anlegen.

Auf R1:

crypto isakmp key OURKEY address 172.12.12.2

Auf R2:

crypto isakmp key OURKEY address 172.12.12.1

4. ACLs anlegen
Irgendwie müssen die Router wissen, für welchen Traffic sie IPsec verwenden sollen. Deswegen werden ACLs angelegt, um “interessanten Traffic” zu identifizieren. Nur wenn Traffic auf die ACLs matcht wird für diesen IPsec verwendet, der restliche Traffic bleibt komplett unberührt. Wir möchten den Traffic, der von Host1 zu Host2 (und umgekehrt) geht absichern.

Auf R1:

access-list 123 permit ip 192.168.0.0 0.0.0.255 192.168.1.0 0.0.0.255

Auf R2:

access-list 123 permit ip 192.168.1.0 0.0.0.255 192.168.0.0 0.0.0.255 

5. Crypto Map erstellen
Nun muss noch eine crypto Map erstellt werden. Diese fügt die zuvor erstellten Elemente (den Remote Gateway, die ACL, das Transform Set) nun sozusagen zusammen.

Auf R1:

crypto map OURMAP 100 ipsec-isakmp
 set peer 172.12.12.2
 set transform-set R1TRANSFORM
 match address 123

Auf R2:

crypto map OURMAP 100 ipsec-isakmp
 set peer 172.12.12.1
 set transform-set R2TRANSFORM
 match address 123

6. Crypto Map zuweisen
Die crypto Map muss nun noch den entsprechenden Interfaces zugewiesen werden.

Auf R1:

interface Serial0/1/0
 ip address 172.12.12.1 255.255.255.0
 clock rate 64000
 crypto map OURMAP

Auf R2:

interface Serial0/1/0
 ip address 172.12.12.2 255.255.255.0
 crypto map OURMAP

Nun sollte diese Meldung erscheinen:

%CRYPTO-6-ISAKMP_ON_OFF: ISAKMP is ON

7. Routen konfigurieren
Noch können unsere Hosts sich nicht erreichen, da die Gateways keine entsprechenden Routen kennen. Daher konfigurieren wir jetzt der Einfachheit halber auf jedem Router eine entsprechende statische Route.

Auf R1:

ip route 192.168.1.0 255.255.255.0 Serial0/1/0

Auf R2:

ip route 192.168.0.0 255.255.255.0 Serial0/1/0

8. Testen
Für den abschließenden Test schaltet man das IPsec Debugging an und schickt einen Ping von Host1 zu Host2.

debug crypto ipsec

Es sollten nun Debug-Meldungen dieser Art erscheinen:

IPSEC(sa_request): , (key eng. msg.) OUTBOUND local= IPSEC(sa_request): , local_proxy= 192.168.0.0/255.255.255.0/0/0 (type=4), remote_proxy= 192.168.1.0/255.255.255.0/0/0 (type=4), protocol= ESP, transform= (Tunnel), lifedur= 3600s and 4608000kb, spi= 0x0(0), conn_id= 0, keysize= 0, flags= 0x0

Nun am besten noch prüfen, ob eine SA (Security Association) erstellt wurde. Diese enthält den SPI (Security Parameter Index), in dem Infos darüber enthalten sind, welche kryptografischen Verfahren eingesetzt werden, außerdem die Source sowie Destination IP und die Sicherheitsprotokoll ID. State “QM_IDLE” ist genau das, was wir haben möchten.

show crypto isakmp sa
IPv4 Crypto ISAKMP SA
dst             src             state      conn-id slot status
172.12.12.2     172.12.12.1     QM_IDLE       1098    0 ACTIVE
Back...