W tym artykule chciałbym przedstawić krok po kroku instrukcję, jak szybko wdrożyć najbardziej skalowalną obecnie architekturę VPN z dostępem zdalnym dostępu opartego na AnyConnect oraz Cisco ASA – Klastrowe równoważenie obciążenia VPN.
Wprowadzenie: Wiele firm na całym świecie, w związku z obecną sytuacją spowodowaną COVID-19, podejmuje działania mające na celu przejście swoich pracowników na tryb pracy zdalnej. W wyniku masowej migracji na pracę zdalną znacząco wzrasta obciążenie istniejącymi bramkami VPN, co wymaga bardzo szybkiej możliwości ich skalowania. Z drugiej strony, wiele firm zmuszonych jest w pośpiechu uczyć się od podstaw koncepcji pracy zdalnej.
Aby pomóc firmom w jak najszybszym wdrożeniu wygodnego, bezpiecznego i skalowalnego dostępu VPN dla pracowników, firma Cisco oferuje licencje na wielofunkcyjny klient SSL-VPN AnyConnect na okres do 13 tygodni. .
.
Przygotowałem krok po kroku instrukcję prostego wdrożenia klastra równoważenia obciążenia VPN jako najbardziej skalowalnej technologii VPN.
Poniższy przykład będzie dość prosty pod względem używanych algorytmów uwierzytelniania i autoryzacji, ale będzie dobrym rozwiązaniem na szybki start (czego obecnie wielu ludziom brakuje), z możliwością głębokiej adaptacji do własnych potrzeb w trakcie wdrażania.
Informacje ogólne: Technologia klastrowego równoważenia obciążenia VPN nie jest funkcją failover ani natywną funkcją klastrowania; pozwala na łączenie zupełnie różnych modeli ASA (z określonymi ograniczeniami) w celu równoważenia obciążenia połączeń VPN z dostępem zdalnym. Synchronizacja sesji i konfiguracji między węzłami takiego klastra jest nieobecna, za to możliwe jest automatyczne równoważenie obciążenia połączeń VPN i zapewnienie odporności połączeń VPN, dopóki pozostanie przynajmniej jeden aktywny węzeł w klastrze. Obciążenie w klastrze jest automatycznie równoważone w zależności od obciążenia węzłów liczbą sesji VPN.
Aby zapewnić odporność na awarie dla konkretnych węzłów klastra (jeśli jest to wymagane), można zastosować firewall, w ten sposób aktywne połączenie będzie obsługiwane przez główny węzeł firewalla. Firewall nie jest koniecznym elementem zapewnienia odporności na awarie w ramach klastra Load-Balancing; sam klaster w przypadku awarii węzła przeniesie sesję użytkownika do innego działającego węzła, jednak bez zachowania statusu połączenia, co właśnie zapewnia firewall. W związku z tym można w razie potrzeby łączyć te dwie technologie.
Klastr VPN Load-Balancing może zawierać więcej niż dwa węzły.
Klast VPN Load-Balancing jest wspierany na ASA 5512-X i wyższych.
Ponieważ każda ASA w ramach klastra VPN Load-Balancing jest niezależną jednostką pod względem przeprowadzanych konfiguracji, wszystkie etapy konfiguracji przeprowadzamy indywidualnie na każdym pojedynczym urządzeniu.
Logiczna topologia przedstawionego przykładu:

Wstępne wdrożenie:
Rozwijamy z obrazu instancje ASAv potrzebnych nam szablonów (ASAv5/10/30/50).
Przypisujemy interfejsy INSIDE/OUTSIDE do tych samych VLAN (Outside w swoim VLAN, INSIDE w swoim, ale wspólnym w ramach klastra – zobacz topologię); ważne, aby interfejsy tego samego typu znajdowały się w jednym segmencie L2.
Licencje:
- W momencie instalacji ASAv nie będzie miała żadnych licencji i będzie ograniczona do wydajności 100 kbit/s.
- Aby zainstalować licencję, musisz wygenerować token w swoim panelu Smart-Account: -> Smart Software Licensing
- W otwartym oknie kliknij przycisk Nowy token

- Upewnij się, że w otwartym oknie aktywne jest pole oraz ustawione jest zaznaczenie Zezwól na funkcjonalności kontrolowane eksportem… Bez tego aktywnego pola nie będziesz mógł korzystać z funkcji silnego szyfrowania i odpowiednio VPN. Jeżeli to pole nie jest aktywne, skontaktuj się z zespołem wsparcia Twojego konta z prośbą o aktywację.

- Po naciśnięciu przycisku Utwórz Token, zostanie utworzony token, który będziemy używać do uzyskania licencji na ASAv, skopiujemy go:

- Powtórzymy kroki C, D, E dla każdej wdrożonej ASAv.
- Aby uprościć kopiowanie tokena, tymczasowo zezwolimy na telnet. Skonfigurujemy każdą ASA (przykład poniżej ilustruje ustawienia na ASA-1). telnet z outside nie działa, jeśli to konieczne, zmień poziom bezpieczeństwa na 100 na outside, a potem przywróć do pierwotnego.
! ciscoasa(config)# int gi0/0 ciscoasa(config)# nameif outside ciscoasa(config)# ip address 192.168.31.30 255.255.255.0 ciscoasa(config)# no shut ! ciscoasa(config)# int gi0/1 ciscoasa(config)# nameif inside ciscoasa(config)# ip address 192.168.255.2 255.255.255.0 ciscoasa(config)# no shut ! ciscoasa(config)# telnet 0 0 inside ciscoasa(config)# username admin password cisco priv 15 ciscoasa(config)# ena password cisco ciscoasa(config)# aaa authentication telnet console LOCAL ! ciscoasa(config)# route outside 0 0 192.168.31.1 ! ciscoasa(config)# wr !- Aby zarejestrować token w chmurze Smart-Account, należy zapewnić ASA dostęp do Internetu, .
Krótko mówiąc, ASA potrzebuje:
- dostępu do Internetu przez HTTPS;
- synchronizacji czasu (najlepiej przez NTP);
- wpisanego serwera DNS;
- Logujemy się przez telnet na nasze ASA i konfigurujemy ustawienia do aktywacji licencji przez Smart-Account.
! ciscoasa(config)# clock set 19:21:00 Mar 18 2020 ciscoasa(config)# clock timezone MSK 3 ciscoasa(config)# ntp server 192.168.99.136 ! ciscoasa(config)# dns domain-lookup outside ciscoasa(config)# DNS server-group DefaultDNS ciscoasa(config-dns-server-group)# name-server 192.168.99.132 ! ! Sprawdzamy działanie DNS: ! ciscoasa(config-dns-server-group)# ping ya.ru Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 87.250.250.242, timeout is 2 seconds: !!!!! ! ! Sprawdzamy synchronizację NTP: ! ciscoasa(config)# show ntp associations address ref clock st when poll reach delay offset disp *~192.168.99.136 91.189.94.4 3 63 64 1 36.7 1.85 17.5 * master (synced), # master (unsynced), + selected, - candidate, ~ configured ! ! Ustawiamy konfigurację naszej ASAv dla Smart-Licensing (zgodnie z Twoim profilem, w moim przypadku 100M dla przykładu) ! ciscoasa(config)# license smart ciscoasa(config-smart-lic)# feature tier standard ciscoasa(config-smart-lic)# throughput level 100M ! ! W razie potrzeby można skonfigurować dostęp do Internetu przez proxy użyj następującego bloku poleceń: !call-home ! http-proxy ip_address port port ! ! Następnie wklejamy skopiowany z portalu Smart-Account token (<token>) i rejestrujemy licencję ! ciscoasa(config)# end ciscoasa# license smart register idtoken <token>- Sprawdzamy, czy urządzenie pomyślnie zarejestrowało licencję i opcje szyfrowania są dostępne:


Konfigurujemy podstawowy SSL-VPN na każdym bramie
- Następnie konfigurujemy dostęp przez SSH i ASDM:
ciscoasa(config)# ssh ver 2 ciscoasa(config)# aaa authentication ssh console LOCAL ciscoasa(config)# aaa authentication http console LOCAL ciscoasa(config)# hostname vpn-demo-1 vpn-demo-1(config)# domain-name ashes.cc vpn-demo-1(config)# cry key gen rsa general-keys modulus 4096 vpn-demo-1(config)# ssh 0 0 inside vpn-demo-1(config)# http 0 0 inside ! ! Uruchamiamy serwer HTTPS dla ASDM na porcie 445, aby nie kolidować z portalem SSL-VPN ! vpn-demo-1(config)# http server enable 445 !- Aby korzystać z ASDM, najpierw należy pobrać go ze strony cisco.com, w moim przypadku jest to następujący plik:

- Aby klient AnyConnect działał, należy na każdą ASA załadować obraz dla każdej używanej stacjonarnej wersji systemu operacyjnego (planowanej do użycia Linux/Windows/MAC), potrzebny będzie plik z Pakiet wdrożeniowy Headend w nazwie:

- Pobrane pliki można umieścić na przykład na serwerze FTP i załadować na każdą osobną ASA:

- Konfigurujemy ASDM i certyfikat Self-Signed dla SSL-VPN (w produkcji zaleca się używanie certyfikatu zaufanego). Zainstalowany FQDN wirtualnego adresu klastra (vpn-demo.ashes.cc), a także każdy FQDN skojarzony z zewnętrznym adresem każdej węzłowej jednostki klastra, musi być rozpoznawany w zewnętrznej strefie DNS na adres IP interfejsu OUTSIDE (lub na adres mapped, jeśli używane jest przekierowanie portu udp/443 (DTLS) i tcp/443 (TLS)). Szczegółowe informacje dotyczące wymagań dla certyfikatu podano w sekcji Weryfikacja certyfikatu dokumentacji.
! vpn-demo-1(config)# crypto ca trustpoint SELF vpn-demo-1(config-ca-trustpoint)# enrollment self vpn-demo-1(config-ca-trustpoint)# fqdn vpn-demo.ashes.cc vpn-demo-1(config-ca-trustpoint)# subject-name cn=*.ashes.cc, ou=ashes-lab, o=ashes, c=ru vpn-demo-1(config-ca-trustpoint)# serial-number vpn-demo-1(config-ca-trustpoint)# crl configure vpn-demo-1(config-ca-crl)# cry ca enroll SELF % Fully qualified domain name in the certificate will be: vpn-demo.ashes.cc Generate Self-Signed Certificate? [yes/no]: yes vpn-demo-1(config)# ! vpn-demo-1(config)# sh cry ca certificates Certificate Status: Available Certificate Serial Number: 4d43725e Certificate Usage: General Purpose Public Key Type: RSA (4096 bits) Signature Algorithm: SHA256 with RSA Encryption Issuer Name: serialNumber=9A439T02F95 hostname=vpn-demo.ashes.cc cn=*.ashes.cc ou=ashes-lab o=ashes c=ru Subject Name: serialNumber=9A439T02F95 hostname=vpn-demo.ashes.cc cn=*.ashes.cc ou=ashes-lab o=ashes c=ru Validity Date: start date: 00:16:17 MSK Mar 19 2020 end date: 00:16:17 MSK Mar 17 2030 Storage: config Associated Trustpoints: SELF CA Certificate Status: Available Certificate Serial Number: 0509 Certificate Usage: General Purpose Public Key Type: RSA (4096 bits) Signature Algorithm: SHA1 with RSA Encryption Issuer Name: cn=QuoVadis Root CA 2 o=QuoVadis Limited c=BM Subject Name: cn=QuoVadis Root CA 2 o=QuoVadis Limited c=BM Validity Date: start date: 21:27:00 MSK Nov 24 2006 end date: 21:23:33 MSK Nov 24 2031 Storage: config Associated Trustpoints: _SmartCallHome_ServerCA- Aby sprawdzić działanie ASDM, nie zapomnij podać portu, na przykład:

- Przeprowadzimy podstawowe ustawienia tunelu:
- Umożliwimy przez tunel dostęp do sieci korporacyjnej, a dostęp do internetu puścimy bezpośrednio (nie jest to najbezpieczniejsza metoda w przypadku braku ochrony na podłączonym hoście, możliwe jest przenikanie przez zainfekowany host i wyprowadzanie danych korporacyjnych, opcja split-tunnel-policy tunnelall przekieruje cały ruch hosta do tunelu. Niemniej jednak Split-Tunnel umożliwia odciążenie bramy VPN i nieobsługiwanie ruchu Internetu z hosta)
- Przydzielimy hostom w tunelu adresy z podsieci 192.168.20.0/24 (pul z adresami od 10 do 30 (dla węzła #1)). Na każdym węźle klastra VPN pule powinny być oddzielne.
- Przeprowadzimy podstawową autoryzację lokalnie utworzonym użytkownikiem na ASA (nie zaleca się tego, to najprostsza metoda), lepiej przeprowadzać autoryzację przez LDAP/RADIUS, a jeszcze lepiej powiązać z Multi-Factor Authentication (MFA), na przykład Cisco DUO.
! vpn-demo-1(config)# ip local pool vpn-pool 192.168.20.10-192.168.20.30 mask 255.255.255.0 ! vpn-demo-1(config)# access-list split-tunnel standard permit 192.168.0.0 255.255.0.0 ! vpn-demo-1(config)# group-policy SSL-VPN-GROUP-POLICY internal vpn-demo-1(config)# group-policy SSL-VPN-GROUP-POLICY attributes vpn-demo-1(config-group-policy)# vpn-tunnel-protocol ssl-client vpn-demo-1(config-group-policy)# split-tunnel-policy tunnelspecified vpn-demo-1(config-group-policy)# split-tunnel-network-list value split-tunnel vpn-demo-1(config-group-policy)# dns-server value 192.168.99.132 vpn-demo-1(config-group-policy)# default-domain value ashes.cc vpn-demo-1(config)# tunnel-group DefaultWEBVPNGroup general-attributes vpn-demo-1(config-tunnel-general)# default-group-policy SSL-VPN-GROUP-POLICY vpn-demo-1(config-tunnel-general)# address-pool vpn-pool ! vpn-demo-1(config)# username dkazakov password cisco vpn-demo-1(config)# username dkazakov attributes vpn-demo-1(config-username)# service-type remote-access ! vpn-demo-1(config)# ssl trust-point SELF vpn-demo-1(config)# webvpn vpn-demo-1(config-webvpn)# enable outside vpn-demo-1(config-webvpn)# anyconnect image disk0:/anyconnect-win-4.8.03036-webdeploy-k9.pkg vpn-demo-1(config-webvpn)# anyconnect enable !- (OPCJONALNIE): W powyższym przykładzie użyliśmy lokalnego użytkownika na MSE do autoryzacji zdalnych użytkowników, co oczywiście, poza laboratorium, jest słabo praktyczne. Podam przykład, jak szybko dostosować ustawienia do autoryzacji na RADIUS serwerze, w tym przykładzie użyto Cisco Identity Services Engine:
vpn-demo-1(config-aaa-server-group)# dynamic-authorization vpn-demo-1(config-aaa-server-group)# interim-accounting-update vpn-demo-1(config-aaa-server-group)# aaa-server RADIUS (outside) host 192.168.99.134 vpn-demo-1(config-aaa-server-host)# key cisco vpn-demo-1(config-aaa-server-host)# exit vpn-demo-1(config)# tunnel-group DefaultWEBVPNGroup general-attributes vpn-demo-1(config-tunnel-general)# authentication-server-group RADIUS !Ta integracja umożliwiła nie tylko szybkie włączenie procedury autoryzacji z usługą katalogową AD, ale także rozróżnienie przynależności podłączonego komputera do AD, zrozumienie, czy to urządzenie korporacyjne czy osobiste, oraz ocenę stanu podłączonego urządzenia.


- Skonfigurujemy Transparent NAT, aby ruch między klientem a zasobami sieci korporacyjnej nie był translokowany:
vpn-demo-1(config-network-object)# subnet 192.168.20.0 255.255.255.0 ! vpn-demo-1(config)# nat (inside,outside) source static any any destination static vpn-users vpn-users no-proxy-arp- (OPCJONALNIE): Aby wypuścić naszych klientów do Internetu przez ASA (przy użyciu tunnelall opcje) z użyciem PAT, a także łączyć się przez ten sam interfejs OUTSIDE, z którego się łączą, należy wprowadzić następujące ustawienia
vpn-demo-1(config-network-object)# nat (outside,outside) source dynamic vpn-users interface vpn-demo-1(config)# nat (inside,outside) source dynamic any interface vpn-demo-1(config)# same-security-traffic permit intra-interface !- Bardzo ważne jest, aby podczas korzystania z klastra umożliwić wewnętrznej sieci zrozumienie, na którą ASA kierować ruch zwrotny do użytkowników; w tym celu należy wykonać redistribucję tras /32 adresów przydzielanych klientom.
Na dzień dzisiejszy klaster jeszcze nie został skonfigurowany, ale mamy już działające bramy VPN, do których można podłączyć się indywidualnie przez FQDN lub IP.

Widimy podłączonego klienta w tabeli routingu pierwszej ASA:

Aby cały nasz klaster VPN i cała sieć korporacyjna znały trasę do naszego klienta, przeprowadzimy redistribucję prefiksu klienta w protokole dynamicznego routingu, na przykład OSPF:
! vpn-demo-1(config)# route-map RMAP-VPN-REDISTRIBUTE permit 1 vpn-demo-1(config-route-map)# match ip address VPN-REDISTRIBUTE ! vpn-demo-1(config)# router ospf 1 vpn-demo-1(config-router)# network 192.168.255.0 255.255.255.0 area 0 vpn-demo-1(config-router)# log-adj-changes vpn-demo-1(config-router)# redistribute static metric 5000 subnets route-map RMAP-VPN-REDISTRIBUTETeraz mamy trasę do klienta z drugiej bramy ASA-2, a użytkownicy podłączeni do różnych bram VPN w ramach klastra mogą na przykład komunikować się za pośrednictwem korporacyjnego softfona bezpośrednio, a także ruch zwrotny z żądanych przez użytkownika zasobów będzie przychodził do odpowiedniej bramy VPN:

Przechodzimy do ustawienia Load-Balancing klastra.
Adres 192.168.31.40 będzie używany jako Virtual IP (VIP — do niego będą się łączyć wszyscy klienci VPN), z tego adresu Master klastra będzie wykonywać REDIRECT na mniej obciążoną nodę klastra. Nie zapomnij wpisać bezpośredniego i odwrotnego rekordu DNS zarówno dla każdego zewnętrznego adresu/FQDN każdej nody klastra, jak i dla VIP.
vpn-demo-1(config)# vpn load-balancing vpn-demo-1(config-load-balancing)# interface lbpublic outside vpn-demo-1(config-load-balancing)# interface lbprivate inside vpn-demo-1(config-load-balancing)# priority 10 vpn-demo-1(config-load-balancing)# cluster ip address 192.168.31.40 vpn-demo-1(config-load-balancing)# cluster port 4000 vpn-demo-1(config-load-balancing)# redirect-fqdn enable vpn-demo-1(config-load-balancing)# cluster key cisco vpn-demo-1(config-load-balancing)# cluster encryption vpn-demo-1(config-load-balancing)# cluster port 9023 vpn-demo-1(config-load-balancing)# participate vpn-demo-1(config-load-balancing)#- Sprawdzamy działanie klastra z dwoma podłączonymi klientami:

- Ułatwimy doświadczenie klienta dzięki automatycznie ładowanemu profilowi AnyConnect przez ASDM.

Nazwij profil w wygodny sposób i powiąż go z naszą polityką grupową:

Po następne połączenie klienta ten profil zostanie automatycznie pobrany i zainstalowany w kliencie AnyConnect, dzięki czemu w razie potrzeby można go po prostu wybrać z listy:

Ponieważ, korzystając z ASDM, stworzyliśmy ten profil tylko na jednym urządzeniu ASA, nie zapomnij powtórzyć tych działań na pozostałych urządzeniach ASA w klastrze.
Wynik: W ten sposób szybko wdrożyliśmy klaster składający się z kilku bram VPN z automatycznym równoważeniem obciążenia. Dodanie nowych węzłów do klastra nie stanowi problemu, uzyskując proste poziome skalowanie poprzez wdrożenie nowych maszyn wirtualnych ASAv lub korzystanie z fizycznych ASA. Wszechstronny klient AnyConnect może znacznie rozszerzyć możliwości bezpiecznego zdalnego dostępu przy użyciu funkcji Posture (ocENA stanu), która jest najskuteczniej stosowana razem z systemem centralnego zarządzania i kontrolowania dostępu Identity Services Engine.
Źródło: habr.com


















