Cisco ASA: Site-to-Site VPN

Wie man eine Site-to-Site VPN-Verbindung unter ASA 8.4(6) einrichtet:

Szenario:

Wir wollen einen Kunden(netcorp) an unsere Aachener-Geschäftstelle via VPN anbinden. Es wurde uns vorgegeben 3des-md5 zu nutzen.

Aachen extern: 10.20.20.60

Aachen intern: 192.168.1.0/24

Netcorp extern: 10.30.30.70

Netcorp intern: 192.168.2.0/24

Zunächst deklarieren wir das transform-set:

asa-aachen-1(config)# crypto ipsec ikev1 transform-set ESP-3DES-MD5 esp-3des esp-md5-hmac

Dann erstellen wir eine access-list mit der wir definieren, welcher Traffic später protected sein soll.

asa-aachen-1(config)# access-list outside_cryptomap_1 extended permit ip 192.168.1.0 255.255.255.0 192.168.2.0 255.255.255.0

Wir definieren nun unseren crypto map-Eintrag(outside_map 1):

Als erstes setzen wir fest, dass die access-list outside_cryptomap_1 für unsere crypto-map genutzt werden soll um wie oben beschrieben zu definieren welcher Traffic über den Tunnel gesendet werden soll.

asa-aachen-1(config)# crypto map outside_map 1 match address outside_cryptomap_1

Konfiguration von PFS:

asa-aachen-1(config)# crypto map outside_map 1 set pfs group1

Setzen der Peer-Adresse:

asa-aachen-1(config)# crypto map outside_map 1 set peer 10.30.30.70

Setzen des transform-sets:

crypto map outside_map 1 set transform-set ESP-3DES-MD5

Zum Abschluss der crypto map-Konfiguration definieren wir, dass die crypto map auf dem outside-Interface aktiviert wird:

asa-aachen-1(config)# crypto map outside_map interface outside

 

Jetzt konfigurieren wir isakmp:

asa-aachen-1(config)# crypto isakmp policy 10

Festlegen, dass ein pre-shared-key genutzt wird:

asa-aachen-1(config-ikev1-policy)# authentication pre-share

Nun definieren wir noch die encryption, den hash, die Diffie-Hellman-group und die lifetime:

asa-aachen-1(config-ikev1-policy)# encryption 3des
asa-aachen-1(config-ikev1-policy)# hash md5
asa-aachen-1(config-ikev1-policy)# group 2
asa-aachen-1(config-ikev1-policy)# lifetime 86400

Die group-policy und die tunnel-group mit pre-shared-key konfigurieren wir auf folgende Art und Weise:

asa-aachen-1(config)# group-policy 10.30.70.70 internal
asa-aachen-1(config)# group-policy 10.30.70.70 attributes
asa-aachen-1(config-group-policy)# vpn-tunnel-protocol ikev1

asa-aachen-1(config)# tunnel-group 10.30.70.70 type ipsec-l2l
asa-aachen-1(config)# tunnel-group 10.30.70.70 general-attributes
asa-aachen-1(config-tunnel-general)# default-group-policy 10.30.30.70

asa-aachen-1(config)# tunnel-group 10.30.30.70 ipsec-attributes
asa-aachen-1(config-tunnel-ipsec)# ikev1 pre-shared-key *****

 

Jetzt aktivieren ikev1 auf dem outside-Interface:

asa-aachen-1(config)# crypto ikev1 enable outside

 

Damit der Traffic von netcorp auch problemlos durchkommt, erlauben wir Ihn zuerst in der Access-List des outside-Interfaces.

access-list outside_access_in extended permit ip 192.168.2.0 255.255.255.0 192.168.1.0 255.255.255.0 log disable

Weiterhin erstellen wir ein NAT-exempt:

Zuerst werden Netzwerk-Objekte angelegt:

asa-aachen-1(config)# object network insidenat
asa-aachen-1(config-network-object)# subnet 192.168.1.0 255.255.255.0
asa-aachen-1(config-network-object)# exit
asa-aachen-1(config)# object network netcorp2
asa-aachen-1(config-network-object)# subnet 192.168.2.0 255.255.255.0

Dann wird die NAT-Regel erstellt und wir sind mit der Konfiguration von asa-aachen-1 fertig:

nat (inside,outside) source static insidenat insidenat destination static netcorp2 netcorp2 no-proxy-arp route-lookup

Das ganze kann man natürlich auch über den VPN-Wizard im ASDM(7.1 für ASA4.6(5)) erledigen.

Auf der Gegenstelle bei netcorp wäre die Konfiguration nahezu identisch bis auf ein paar Kleinigkeiten:

asa-aachen-1(config)# access-list outside_cryptomap_1 extended permit ip 192.168.2.0 255.255.255.0 192.168.1.0 255.255.255.0

asa-aachen-1(config)# crypto map outside_map 1 set peer 10.20.20.60

Bei der group-policy und der tunnel-group muss 10.30.30.70 durch 10.20.20.60 ersetzt werden.

access-list outside_access_in extended permit ip 192.168.1.0 255.255.255.0 192.168.2.0 255.255.255.0 log disable

asa-aachen-1(config)# object network insidenat
asa-aachen-1(config-network-object)# subnet 192.168.2.0 255.255.255.0
asa-aachen-1(config-network-object)# exit
asa-aachen-1(config)# object network fn1
asa-aachen-1(config-network-object)# subnet 192.168.1.0 255.255.255.0

nat (inside,outside) source static insidenat insidenat destination static fn1 fn1 no-proxy-arp route-lookup

Nützliche Befehle unter Cisco

Nützliche Befehle unter Cisco:

Switch-Befehle:

show ip arp arp-Tabelle anzeigen
clear ip arp arp-Tabelle löschen
show mac-address-table mac-Adressen auf dem Switch anzeigen
show interface Anzeige der Interfaces auf dem Switch, jedes einzeln
show ip interface brief Kompakte Anzeige der Interfaces
show interface gi0/1 Anzeige des Interfaces gi0/1



Router-Befehle:

show ip proto Übersicht der genutzten IP-Protokolle
show log Das Router Log anzeigen
show ip ospf neigh OSPF Nachbarn anzeigen
show ip route  Routen auf dem Router anzeigen



ASA-Befehle:

show interface ip brief Kompakte Anzeige der Interfaces
show vpdn session pppoe state Anzeiges des PPPoE-Status
show route Anzeige der Routen
show crypto ipsec sa Anzeige der IPsec-SAs

lsof und fuser

Wie man herausfindet welcher Prozess auf einem bestimmten Port horcht:

Wenn man sich z.B. auf einem fremdem Server befindet und man herausfinden möchte welcher Prozess auf dem smtp-Port horcht, sind lsof und fuser von Nutzen.

Vorweg: Man muss root sein um beide befehle ausführen zu können ansonsten sieht das ganze so aus:

mj@predator:~$ lsof -i :25
mj@predator:~$

Also führen wir den Befehl als root aus:

root@predator:~# lsof -i :25
COMMAND  PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
master  2484    root   12u  IPv4  20405      0t0  TCP *:smtp (LISTEN)

Wir haben nun herausgefunden, dass der postfix master-Prozess auf Port 25 lauscht und unsere Aufgabe ist nun erfüllt.

Falls lsof auf dem System nicht vorhanden ist oder man sowieso fuser nutzt gibt es auch noch eine andere Möglichkeit die Aufgabe zu erfüllen:

root@predator:~# fuser -n tcp 25
25/tcp:               2484

Da hier nur die PID(2484) angezeigt wird müssen wir noch ps zu Rate ziehen:

root@predator:~# ps aux | grep 2484
root      2484  0.0  0.0   5828  1780 ?        Ss   19:38   0:00 /usr/lib/postfix/master

Zwei Befehle hintereinander abzusetzen ist natürlich unschön. Man kann das ganze auch auf folgende Art und Weise lösen:

root@predator:~# fuser -n tcp 25 2>&1 | awk {‚print $2‘} | xargs ps u
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      2484  0.0  0.0   5828  1780 ?        Ss   19:38   0:00 /usr/lib/postfix/master

„fuser -n tcp 25“ bringt uns die Ausgabe von Port und PID.

Da wir aber nur die PID benötigen, nutzen wir „awk {‚print $2‘}“.

Damit awk den Output von fuser auch vernünftig verarbeiten kann, leiten wir stderr in stdout(Terminal) mit „2>&1“ um.

Zum Schluss übergeben wir das bisherige Ergebnis 2484 an „ps u“ mittels „xargs“.

Wir nutzen „ps u“ damit der User angezeigt wird, außerdem ist diese Ausgabe komfortabler zu lesen.