Konfiguracja routerów Cisco

7. Virtual Private Networks 7.1.1 Ustawienie tunelu site-to-site Włączamy tunel i ustalamy parametry po naszej stronie tunelu: gw1-bogus(config)#interface tunnel0 gw1-bogus(config-if)#ip address <VPN_local_addr> <VPN_local_mask> gw1-bogus(config-if)#tunnel source <local_addr> gw1-bogus(config-if)#tunnel destination <rmt_addr> gdzie: […]

7. Virtual Private Networks

7.1.1 Ustawienie tunelu site-to-site

Włączamy tunel i ustalamy parametry po naszej stronie tunelu:


gw1-bogus(config)#interface tunnel0
gw1-bogus(config-if)#ip address <VPN_local_addr> <VPN_local_mask>
gw1-bogus(config-if)#tunnel source <local_addr>
gw1-bogus(config-if)#tunnel destination <rmt_addr>

gdzie:

  • <VPN_local_addr> jest wirtualnym adresem końca tunelu po naszej stronie, natomiast <VPN_local_mask> jest maskę sieci wirtualnej po naszej stronie tunelu.
  • Adresy <local_addr> i <rmt_address> tunelu musza być rzeczywistymi adresami routerów brzegowych VPN-a.

I dalej ustawiamy GRE (generic routing encapsulation)


gw1-bogus(config-if)#tunnel mode gre ip
gw1-bogus(config-if)#no shutdown //i tunel wstaje :)

Ponadto ustawiamy routing dla tunelu


gw1-bogus(config)#ip route <prv_rmt_net> <prv_rmt_mask> tunnel0

gdzie

  • <prv_rmt_net > i <prv_rmt_mask> sieci odnoszą się do sieci prywatnej po drugiej stronie tunelu.

7.1.2. Ustawienie ISAKMP/IKE (Internet Security Association and Key Management Protocol/Internet Key Exchange) dla fazy 1

Mechanizm IKE jest używany do negocjacji i ustanowienia bezpiecznego powiązania miedzy hostami na końcach tunelu. Przeprowadzenie takiej procedury jest wymagane dla ustanowienia transmisji typu IPSec.

Uwaga: Poniższa konfiguracja IKE będzie bazowała na wykorzystaniu wspólnych kluczy (pre-shared keys).

Włączamy ISAKMP/IKE (domyślnie powinna być już włączona, jeśli router wspiera IPSec-a):


gw1-bogus(config)#crypto isakmp enable

Definiujemy pierwszą politykę IKE dla fazy 1 oraz jej parametry:


gw1-bogus(config)#crypto isakmp policy 10

Kontynujemy:


gw1-bogus(config-isakmp)#encryption 3des
gw1-bogus(config-isakmp)#hash sha
gw1-bogus(config-isakmp)#authentication pre-share
gw1-bogus(config-isakmp)#group 1
gw1-bogus(config-isakmp)#lifetime 86400

Uwaga: Polityka IKE podlega negocjacji. Aby negocjacje powiodły się routery po obu stronach tunelu VPN muszą dysponować przynajmniej jedną identyczną polityką (jedną polityką o identycznych parametrach).

Uruchamiamy DPD (dead peer detection):


gw1-bogus(config)#crypto isakmp keepalive 20 3

Ustawiamy typ identyfikacji:


gw1-bogus(config)#crypto isakmp identity hostname

Ustawiamy wspólny klucz:


gw1-bogus(config)#crypto isakmp key <haslo> address <rmt_addr> no-xauth

gdzie

  • <hasło> to jest właśnie wspólny klucz
  • <rmt_addr> określa prawdziwy adres routera zdalnego.

Uwaga: W konfiguracje opartej na wspólnych kluczach takie samo <haslo> musi zostać ustawione na zdalnym routerze docelowym.

7.1.3. Konfiguracja parametrów IPSec

Konfiguracja transform-set-u (który określa w jaki sposób pakiet jest szyfrowany) i sposobu tunelowania pakietów:


gw1-bogus(config)#crypto ipsec transform-set <ts_name> <transform_1> <transform_2>…
gw1-bogus(cfg-crypto-trans)#mode tunnel

gdzie

  • <ts_name> – nazwa nowego transformset-u
  • <transform_1>,<transform_2>… – rodzaje przekształceń wykonywanych w ramach transformsetu

np.:


gw1-bogus(config)#crypto ipsec transform-set my_TS ah-sha-hmac esp-3des
gw1-bogus(cfg-crypto-trans)#mode tunnel

Uwaga: Wybór zastosowanego transformsetu podlega negocjacji. Aby negocjacje powiodły się routery po obu stronach tunelu VPN muszą dysponować przynajmniej jednym identycznym transformset-em (jednym transformset-em o identycznych parametrach).

Wyjaśnienie: Polecenie mode tunnel ustala, iż pakiet trafiający do tunelu będzie szyfrowany w całości (tzn. łącznie z nagłówkiem).

7.1.4. Konfiguracja ISAKMP/IKE dla fazy 2

Na początku tworzymy rozszerzonego ACL-a określającego, jaki rodzaj ruchu przechodzącego przez router ma być szyfrowany i tunelowany (permit):


gw1-bogus(config)#access-list <ACL_3> permit gre host <local_addr> host <rmt_addr>
gw1-bogus(config)#access-list <ACL_3> permit ip host <local_addr> host <rmt_addr>

gdzie:

  • <ACL_3> – nr ACL-a sterującego szyfrowaniem (dwukrotnie ten sam numer)
  • ip i gre – typy ruchu opisanego przez podawane reguły ACL
  • permit – szyfrowanie ruchu miedzy hostem <local_aadr> a <rmt_addr>
  • <local_addr> i <rmt_addr> – rzeczywiste adresy hostów końcowych tunelu

Konfiguracja kryptomapy na lokalnym adresie:


gw1-bogus(config)#crypto map <cm_name> local-address <interface_name>


gdzie:

  • <cm_name> – nazwa nowej kryptomapy
  • <interface_name> – adres (fizyczny interfejs) przez który przechodzi IPSec

Konfiguracja parametrów krypto mapy:


gw1-bogus(config)#crypto map <cm_name> <cm_prority> ipsec-isakmp
gw1-bogus(config-crypto-map)#match address <ACL_3>
gw1-bogus(config-crypto-map)#set peer <rmt_addr>
gw1-bogus(config-crypto-map)#set transform-set <ts_name_1>, <ts_name_2>…

gdzie:

  • <cm_name> – nazwa nowej kryptomapy
  • <prority> – priorytet, identyfikuje każdą zdefiniowaną kryptomapę
  • <ACL_3> – ACL utworzony wcześniej i przypisany do kryptomapy
  • <rmt_addr> – rzeczywisty adres zdalnego hosta po drugiej stronie tunelu
  • <ts_name_1> i <ts_name_2> – nazwy transformsetów powiązanych z kryptomapą

np.:


gw1-bogus(config)#crypto map my_CM local-address e0
gw1-bogus(config)#crypto map my_CM 1 ipsec-isakmp
gw1-bogus(config-crypto-map)#match address 111
gw1-bogus(config-crypto-map)#set peer 121.111.1.1 // Publiczny adres IP
gw1-bogus(config-crypto-map)#set transform-set my_TS

Uwaga: Jedna krypto mapa może obsługiwać wiele zbiorów parametrów grupowanych przez różne wartości priorytetu. Taka funkcja przydaje się gdy chcemy od tej samej krypto mapy podpiąć szyfrowanie dla więcej niż jednego tunelu (w sytuacji gdy oba tunele bazują na tym samym fizycznym interfejsie zewnętrznym).

np.:


gw1-bogus(config)#crypto map my_CM local-address e0
gw1-bogus(config)#crypto map my_CM 1 ipsec-isakmp
gw1-bogus(config-crypto-map)#match address 111
gw1-bogus(config-crypto-map)#set peer 121.111.1.1 //Publiczny adres IP
gw1-bogus(config-crypto-map)#set transform-set my_TS_1
gw1-bogus(config)#crypto map my_CM 2 ipsec-isakmp
gw1-bogus(config-crypto-map)#match address 121
gw1-bogus(config-crypto-map)#set peer 122.111.1.1 //Publiczny adres IP
gw1-bogus(config-crypto-map)#set transform-set my_TS_2

Podpięcie krypto mapy do rzeczywistego interfejsu sieciowego:


gw1-bogus(config)#interface <interface_name>
gw1-bogus(config-if)#crypto map <cm_name>

gdzie:

  • <cm_name> – nazwa użytej kryptomapy
  • <interface_name> –fizyczny interfejs, przez który wychodzi IPSec

np:


gw1-bogus(config)#interface e0
gw1-bogus(config-if)#crypto map my_CM

7.2. Konfiguracja zdalnego dostępu dla klientow VPN

Założenie: Domyślna ścieżka routingu jest ustawiona (ip route 0.0.0.0 0.0.0.0).

7.2.2. Konfiguracja adresacji klientów VPN

Po ustaleniu szyfrowanego połączenia między siecią prywatna a zdalnym klientem VPN, po stronie klienta zostaje skonfigurowany tymczasowy, dynamiczny adres interfejsu VPN służącego do komunikowania się z siecią prywatną.

Podczas konfiguracji zdalnego dostępu dla klientów VPN należy zdefiniować zakres dynamicznych adresów przydzielanych klientom VPN.

Uwaga: Dynamiczne adresy klientów VPN powinny pochodzić z całkowicie nowej sieci/zakresu adresów IP. Wybrana sieć nie powinna być już w użyciu na żadnym z interfejsów router-a. Klasa wybranej sieci jest dowolna.

Uwaga: Można zdefiniować wiele różnych sieci/zakresów IP dla klientów VPN. Dany zakres adresów IP można przydzielić globalnie i/lub do odpowiedniej grupy w ramach zdefiniowanej autoryzacji grupowej.

Przykład: Dla sieci prywatnej 192.168.1.0/24 można wybrać dla klientów VPN sieć 192.168.2.0/24.

Po pierwsze, definiujemy zbiór adresów IP, które będą dynamicznie przydzielane zdalnym klientom VPN po uzyskaniu przez nich dostępu do sieci prywatnej. Niestety nie jest możliwe definiowanie całych sieci, jedynie operowanie zakresem adresów IP:


gw1-bogus(config)#ip local pool <ip-pool-name> <first-IP> <last-IP>

gdzie:

  • <ip-pool-name> – nazwa zbioru adresów
  • <first-IP> – pierwszy adres w zakresie
  • <last-IP> – ostatni adres w zakresie

np.:


gw1-bogus(config)#ip local pool vpn-pool 192.168.2.1 192.168.2.254

Przy okazji możemy ustawić domyślny zbiór adresów IP współdzielony przez te grupy dostępne w autoryzacji grupowej, które nie posiadają zdefiniowanego parametru pool:


gw1-bogus(config)#crypto isakmp client configuration address-pool local <ip-pool-name>

7.2.3. Konfiguracja sposobów uwierzytelniania użytkowników i autoryzacji grupowej (user authentication/group authorization)

Upewniamy się, że moduł uwierzytelniania i autoryzacji jest uruchomiony:


gw1-bogus(config)#aaa new-model

Ustawiamy lokalne uwierzytelnianie użytkowników – co pozwoli na korzystanie z lokalnie zdefiniowanych użytkowników podczas uwierzytelniania:


gw1-bogus(config)#aaa authentication login <authen-list-name> local

gdzie:

  • <authen-list-name> – nazwa listy uwierzytelniania

W tym momencie możemy już definiować poszczególnych użytkowników poleceniem:


gw1-bogus(config)#user <user-name> secret <user-password>

gdzie:

  • <user-name> – nazwa użytkownika
  • <user-password> – jego hasło

Ustawiamy lokalną autoryzację grupową – co pozwoli na korzystanie z lokalnie zdefiniowanych grup podczas autoryzacji grupowej:


gw1-bogus(config)#aaa authorization network <author-list-name> local

gdzie:

  • <author-list-name> – nazwa listy autoryzacji grupowej

Teraz możemy zdefiniować poszczególne grupy wykorzystywane w autoryzacji grupowej:


gw1-bogus(config)#crypto isakmp client configuration group <group-name>
gw1-bogus(config-isakmp-group)#key <group-password>
gw1-bogus(config-isakmp-group)#dns <dns-server-address>
gw1-bogus(config-isakmp-group)#wins <wins-server-address>
gw1-bogus(config-isakmp-group)#pool <ip-pool-name>
gw1-bogus(config-isakmp-group)#netmask <net-mask>
gw1-bogus(config-isakmp-group)#domain <domain-name>

gdzie:

  • <group-name> – nazwa grupy
  • <group-password> – hasło wykorzystywane w autoryzacji grupowej
  • <dns-server-address> – adres serwera DNS dostępnego w sieci prywatnej
  • <wins-server-address> – adres serwera WINS dostępnego w sieci prywatnej
  • <ip-pool-name> – (opcjonalnie) zakres adresów IP przydzielanych grupie
  • <net-mask> – (opcjonalnie) maska sieci dla przydzielonego adresu IP
  • <domain-name> – (opcjonalnie) nazwa domeny

Uwaga: Można stworzyć grupę domyślną podając słowo default w miejsce nazwy grupy.

7.2.4. Konfiguracja ISAKMP/IKE dla fazy 1

Włączamy ISAKMP/IKE (domyślnie powinna być już włączona, jeśli router wspiera IPSec-a):


gw1-bogus(config)#crypto isakmp enable

Definiujemy pierwszą politykę IKE dla fazy 1 oraz jej parametry:


gw1-bogus(config)#crypto isakmp policy 1
gw1-bogus(config-isakmp)#encryption aes 128
gw1-bogus(config-isakmp)#authentication pre-share
gw1-bogus(config-isakmp)#group 2

Uwaga: Dobrze, gdy polityki związane ze zdalnym dostępem są definiowane z niższym priorytetem niż polityki związane z VPN-ami typi site-to-site.

Uruchamiamy DPD (dead peer detection):


gw1-bogus(config)#crypto isakmp keepalive 20 3

7.2.5. Konfiguracja parametrów IPSec

Konfiguracja transform-set-u (który określa w jaki sposób pakiet jest szyfrowany):


gw1-bogus(config)#crypto ipsec transform-set <ts-name> esp-aes esp-sha-hmac
gw1-bogus(cfg-crypto-trans)#exit

gdzie:

  • <ts-name> – nazwa nowego transformset-u

7.2.6. Konfiguracja ISAKMP/IKE Phase 2

Ponieważ nie jesteśmy w stanie przewidzieć adresu zdalnego klienta VPN, więc tworzymy kryptomapę dynamiczną:


gw1-bogus(config)#crypto dynamic-map <dyn-cm-name> 10
gw1-bogus(config-crypto-map)#set transform-set <ts-name>
gw1-bogus(config-crypto-map)#exit

gdzie:

  • <dyn-cm-name > – nazwa dynamicznej kryptomapy
  • <ts-name> – nazwa transformset-u

W końcu tworzymy lub uaktualniamy kryptomapę statyczną. Ustawiamy w niej uwierzytelnianie XAUTH, autoryzację grupową, sterowanie nawiązywaniem połączenia, dołączamy dynamiczną kryptomapę:


gw1-bogus(config)#crypto map <cm-name> client authentication list <authen-list-name>
gw1-bogus(config)#crypto map <cm-name> isakmp authorization list <author-list-name>
gw1-bogus(config)#crypto map <cm-name> client configuration address repond
gw1-bogus(config)#crypto map <cm-name> 1000 ipsec-isakmp dynamic <dyn-cm-name>

gdzie:

  • <cm-name> – nazwa kryptomapy
  • <authen-list-name> – nazwa wykorzystywanej listy uwierzytelniania
  • <author-list-name> – nazwa wykorzystywanej listy autoryzacji grupowej
  • <dyn-cm-name > – nazwa dynamicznej kryptomapy

Podpięcie krypto mapy do rzeczywistego interfejsu sieciowego:


gw1-bogus(config)#interface <interface-name>
gw1-bogus(config-if)#crypto map <cm-name>

gdzie:

  • <cm-name> – nazwa użytej kryptomapy statycznej
  • <interface-name> –fizyczny interfejs przez który wychodzi IPSec

Po wykonaniu powyższej operacji zdalny dostęp do zasobów sieci prywatnej powinien już działać.

7.2.7. Przykład – konfiguracja tunelu VPN oraz IPSec-a dla zdalnego dostępu

7.2.8. Zdalny dostęp klientów VPN i NAT

Uwaga: Jeśli zdalny dostęp dla klientów VPN jest ustawiony na interfejsie z NAT-em, wówczas należy zadbać by trafik zwrotny skierowany „do klientów VPN” nie był objęty NAT-em.

W takiej sytuacji jedyną możliwością wyłączenia pewnego rodzaju ruchu z NAT-a jest konfiguracja NAT-a na bazie rozszerzonych list dostępu [patrz jeden z poprzednich rozdziałów].

Rozszerzony ACL powinien wyglądać podobnie do poniższego przykładu:


gw1-bogus(config)#access-list <ACL_#> deny ip any <VPN-client-subnet> <VPN-client-wildcard>
gw1-bogus(config)#access-list <ACL_#> permit ip anyany

7.2.9. Split-tunneling

Split-tunelling pozwala na zdefiniowanie rodzaju trafiku wymienianego między siecią prywatną a zdalnymi klientami VPN z wykorzystaniem szyfrowania oraz trafiku przesyłanego otwartym tekstem.

Uwaga: Domyślnie cały ruch między siecią prywatną, a zdalnym klientem VPN jest szyfrowany.

Split-tunneling jest definiowany z pomocą tzw. rozszerzonego ACL-a, który definiuje szyfrowanie (permit) oraz wysyłanie otwartym tekstem (deny):


gw1-bogus(config)#access-list <ACL_4> permit ip <private-subnet> <private-wildcard> <VPN-client-subnet> <VPN-client-wildcard>

gdzie:

  • <ACL_4> – nr rozszerzonego ACL
  • <private-subnet> – adres sieci prywatnej
  • <private-wildcard> – wildcard sieci prywatnej
  • <VPN-client-subnet> – adres sieci klientów VPN
  • <VPN-client-wildcard> – wildcard sieci klientów VPN

np.:


gw1-bogus(config)#access-list 115 permit ip 192.168.1.0 0.0.0.255 192.168.2.0 0.0.0.255

Następnie przyporządkowujemy ACL-a do wybranej grupy zdefiniowanej w ramach autoryzacji grupowej:


gw1-bogus(config)#crypto isakmp client configuration group <group-name>
gw1-bogus(config-isakmp-group)#acl <ACL_4>

gdzie:

  • <group-name> – nazwa grupy
  • <ACL_4> – nr ACL-a wykorzystywanego w tzw. split-tunellingu

Strony: 1 2 3 4