Rozbudowa klastra równoważenia obciążenia ASA VPN

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 ASAKlastrowe 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. Można również uzyskać ASAv na test (wirtualna ASA dla hypervisorów VMWare/Hyper-V/KVM oraz platform chmurowych AWS/Azure) u autoryzowanych partnerów lub kontaktując się z przedstawicielami Cisco, z którymi współpracujesz..

Procedura wydawania licencji AnyConnect COVID-19 opisana jest tutaj.

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.

Szczegóły technologii tutaj

Logiczna topologia przedstawionego przykładu:

Rozbudowa klastra równoważenia obciążenia ASA VPN

Wstępne wdrożenie:

  1. Rozwijamy z obrazu instancje ASAv potrzebnych nam szablonów (ASAv5/10/30/50).

  2. 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.

  3. 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: https://software.cisco.com/ -> Smart Software Licensing
    • W otwartym oknie kliknij przycisk Nowy token

    Rozbudowa klastra równoważenia obciążenia ASA VPN

    • 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ę.

    Rozbudowa klastra równoważenia obciążenia ASA VPN

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

    Rozbudowa klastra równoważenia obciążenia ASA VPN

    • 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, szczegóły tutaj.

    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:

    Rozbudowa klastra równoważenia obciążenia ASA VPN

    Rozbudowa klastra równoważenia obciążenia ASA VPN

  4. 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:

    Rozbudowa klastra równoważenia obciążenia ASA VPN

    • 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:

    Rozbudowa klastra równoważenia obciążenia ASA VPN

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

    Rozbudowa klastra równoważenia obciążenia ASA VPN

    • 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:

    Rozbudowa klastra równoważenia obciążenia ASA VPN

    • 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.

    Rozbudowa klastra równoważenia obciążenia ASA VPN

    Rozbudowa klastra równoważenia obciążenia ASA VPN

    • 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.

    Rozbudowa klastra równoważenia obciążenia ASA VPN

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

    Rozbudowa klastra równoważenia obciążenia ASA VPN

    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-REDISTRIBUTE

    Teraz 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:

    Rozbudowa klastra równoważenia obciążenia ASA VPN

  5. 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:

    Rozbudowa klastra równoważenia obciążenia ASA VPN

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

    Rozbudowa klastra równoważenia obciążenia ASA VPN

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

    Rozbudowa klastra równoważenia obciążenia ASA VPN

    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:

    Rozbudowa klastra równoważenia obciążenia ASA VPN

    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

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster