W tym artykule chciałbym przedstawić instrukcje krok po kroku, jak szybko wdrożyć najbardziej skalowalny obecnie schemat VPN dostępu zdalnego oparte na dostępie AnyConnect i Cisco ASA - Klaster równoważenia obciążenia VPN.
Wstęp: Wiele firm na całym świecie w związku z obecną sytuacją związaną z wirusem Covid-19 podejmuje wysiłki mające na celu przeniesienie swoich pracowników na pracę zdalną. W związku z powszechnym przejściem na pracę zdalną obciążenie istniejących bram VPN firm krytycznie wzrasta i wymagana jest bardzo szybka możliwość ich skalowania. Z drugiej strony wiele firm jest zmuszonych na pośpiechu opanować koncepcję pracy zdalnej od podstaw.
Przygotowałem instrukcje krok po kroku dotyczące prostej opcji wdrożenia klastra VPN Load-Balancing jako najbardziej skalowalnej technologii VPN.
Poniższy przykład będzie dość prosty z punktu widzenia stosowanych algorytmów uwierzytelniania i autoryzacji, ale będzie dobrą opcją na szybki start (czego obecnie wielu osobom brakuje) z możliwością dogłębnej adaptacji do Twoich potrzeb podczas procesu wdrażania.
Krótka informacja: Technologia klastra równoważenia obciążenia VPN nie jest funkcją przełączania awaryjnego ani klastrowania w swoim natywnym sensie; technologia ta może łączyć zupełnie różne modele ASA (z pewnymi ograniczeniami) w celu równoważenia obciążenia połączeń VPN dostępu zdalnego. Nie ma synchronizacji sesji i konfiguracji pomiędzy węzłami takiego klastra, ale możliwe jest automatyczne równoważenie obciążenia połączeń VPN i zapewnienie odporności na awarie połączeń VPN do czasu, aż w klastrze pozostanie przynajmniej jeden aktywny węzeł. Obciążenie klastra jest równoważone automatycznie w zależności od obciążenia węzłów liczbą sesji VPN.
Aby zapewnić odporność na awarie określonych węzłów klastra (jeśli jest to wymagane), można użyć narzędzia filer, dzięki czemu aktywne połączenie będzie przetwarzane przez węzeł podstawowy narzędzia filer. Przeniesienie pliku nie jest warunkiem koniecznym zapewnienia odporności na awarie w klastrze Load-Balancing; w przypadku awarii węzła klaster sam przeniesie sesję użytkownika do innego działającego węzła, ale bez utrzymywania stanu połączenia, co jest dokładnie tym, co zapewnia plik. W związku z tym w razie potrzeby te dwie technologie można połączyć.
Klaster równoważenia obciążenia VPN może zawierać więcej niż dwa węzły.
Klaster VPN z równoważeniem obciążenia jest obsługiwany na platformie ASA 5512-X i nowszych.
Ponieważ każdy ASA w klastrze VPN Load-Balancing jest niezależną jednostką pod względem ustawień, wszystkie etapy konfiguracji przeprowadzamy indywidualnie na każdym urządzeniu.
Wdrażamy instancje ASAv potrzebnych szablonów (ASAv5/10/30/50) z obrazu.
Przypisujemy interfejsy INSIDE/OUTSIDE do tej samej sieci VLAN (Outside we własnym VLAN, INSIDE we własnym, ale wspólne w obrębie klastra, patrz topologia), ważne jest, aby interfejsy tego samego typu znajdowały się w tym samym segmencie L2.
Licencje:
W momencie instalacji ASAv nie będzie miał żadnych licencji i będzie ograniczony do 100 kbit/s.
Aby zainstalować licencję należy wygenerować token na koncie Smart-Account: https://software.cisco.com/ -> Inteligentne licencjonowanie oprogramowania
W oknie, które zostanie otwarte, kliknij przycisk Nowy token
Upewnij się, że w oknie, które zostanie otwarte, pole jest aktywne i checkbox jest zaznaczony Zezwalaj na funkcjonalność kontrolowaną przez eksport... Bez tego aktywnego pola nie będziesz mógł korzystać z silnych funkcji szyfrowania, a co za tym idzie, VPN. Jeśli to pole nie jest aktywne, skontaktuj się z zespołem ds. konta i poproś o aktywację.
Po naciśnięciu przycisku Utwórz token, zostanie utworzony token, który wykorzystamy do uzyskania licencji na ASAv, skopiuj go:
Powtórzmy kroki C, D, E dla każdego wdrożonego ASAv.
Aby ułatwić kopiowanie tokena, włączmy tymczasowo telnet. Skonfigurujmy każdy ASA (poniższy przykład ilustruje ustawienia na ASA-1). telnet z zewnątrz nie działa, jeśli naprawdę tego potrzebujesz, zmień poziom zabezpieczeń na 100 na zewnątrz, a następnie zmień go z powrotem.
!
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 udostępnić ASA dostęp do Internetu, szczegóły tutaj.
Krótko mówiąc, ASA jest potrzebny:
Dostęp do Internetu poprzez HTTPS;
synchronizacja czasu (dokładniej przez NTP);
zarejestrowany serwer DNS;
Przez telnet łączymy się z naszym ASA i dokonujemy ustawień aktywacji licencji poprzez 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
!
! Проверим работу 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:
!!!!!
!
! Проверим синхронизацию 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
!
! Установим конфигурацию нашей ASAv для Smart-Licensing (в соответствии с Вашим профилем, в моем случае 100М для примера)
!
ciscoasa(config)# license smart
ciscoasa(config-smart-lic)# feature tier standard
ciscoasa(config-smart-lic)# throughput level 100M
!
! В случае необходимости можно настроить доступ в Интернет через прокси используйте следующий блок команд:
!call-home
! http-proxy ip_address port port
!
! Далее мы вставляем скопированный из портала Smart-Account токен (<token>) и регистрируем лицензию
!
ciscoasa(config)# end
ciscoasa# license smart register idtoken <token>
Sprawdzamy, czy urządzenie pomyślnie zarejestrowało licencję i dostępne są opcje szyfrowania:
Konfiguracja podstawowego protokołu SSL-VPN na każdej bramce
Następnie konfigurujemy dostęp poprzez 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
!
! Поднимем сервер HTTPS для ASDM на порту 445 чтобы не пересекаться с SSL-VPN порталом
!
vpn-demo-1(config)# http server enable 445
!
Aby ASDM zadziałał należy go najpierw pobrać ze strony cisco.com, w moim przypadku jest to następujący plik:
Aby klient AnyConnect działał, musisz pobrać obraz do każdego ASA dla każdego używanego systemu operacyjnego klienta (planowanego na Linux/Windows/MAC), będziesz potrzebować pliku z Pakiet wdrożeniowy stacji czołowej W tytule:
Pobrane pliki można wgrać np. na serwer FTP i wgrać do każdego indywidualnego ASA:
Konfigurujemy certyfikat ASDM i Self-Signed dla SSL-VPN (zalecane jest użycie zaufanego certyfikatu na produkcji). Ustalona nazwa FQDN adresu wirtualnego klastra (vpn-demo.ashes.cc), jak również każda nazwa FQDN powiązana z adresem zewnętrznym każdego węzła klastra musi zostać przetłumaczona w zewnętrznej strefie DNS na adres IP interfejsu OUTSIDE (lub na zmapowany adres, jeśli używane jest przekierowanie portów udp/443 (DTLS) i tcp/443(TLS)). Szczegółowe informacje dotyczące wymagań stawianych certyfikatowi znajdują się w pkt Weryfikacja certyfikatu dokumentacja.
!
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
% The 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:
Przeprowadźmy podstawowe ustawienia tunelu:
Udostępnimy sieć firmową poprzez tunel i bezpośrednio połączymy się z Internetem (nie jest to najbezpieczniejsza metoda w przypadku braku środków bezpieczeństwa na hoście łączącym, możliwe jest przedostanie się przez zainfekowany host i wyprowadzenie danych firmowych, opcja split-tunnel-policy tunelall zezwoli na cały ruch hosta do tunelu. Niemniej jednak Tunel dzielony pozwala odciążyć bramę VPN i nie przetwarzać ruchu internetowego hosta)
W tunelu wydamy hosty z adresami z podsieci 192.168.20.0/24 (pula od 10 do 30 adresów (dla węzła nr 1)). Każdy węzeł w klastrze musi mieć własną pulę VPN.
Wykonajmy podstawowe uwierzytelnienie z lokalnie utworzonym użytkownikiem na ASA (nie jest to zalecane, jest to najprostsza metoda), lepiej przeprowadzić uwierzytelnienie poprzez LDAP/PROMIeńlub jeszcze lepiej, krawat Uwierzytelnianie wieloskładnikowe (MFA)Np Cisco DUO.
(OPCJONALNY): W powyższym przykładzie użyliśmy lokalnego użytkownika na zaporze sieciowej do uwierzytelnienia użytkowników zdalnych, co oczywiście jest mało przydatne z wyjątkiem laboratorium. Podam przykład, jak szybko dostosować konfigurację uwierzytelniania PROMIEŃ serwer, używany np Silnik usług tożsamości Cisco:
Integracja ta umożliwiła nie tylko szybkie zintegrowanie procedury uwierzytelniania z usługą katalogową AD, ale także rozróżnienie, czy podłączony komputer należy do AD, zrozumienie, czy jest to urządzenie firmowe, czy osobiste, a także ocenę stanu podłączonego urządzenie.
Skonfigurujmy Transparent NAT, aby ruch pomiędzy klientem a zasobami sieciowymi sieci firmowej nie był zakłócany:
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
(OPCJONALNY): Aby udostępnić naszym klientom dostęp do Internetu za pośrednictwem ASA (podczas korzystania z tunel opcje) za pomocą PAT, a także wyjdź przez ten sam interfejs OUTSIDE, z którego są połączone, musisz wprowadzić następujące ustawienia
Podczas korzystania z klastra niezwykle ważne jest, aby sieć wewnętrzna mogła zrozumieć, który ASA ma kierować ruch zwrotny do użytkowników; w tym celu konieczna jest redystrybucja adresów tras /32 wydawanych klientom.
Na chwilę obecną nie skonfigurowaliśmy jeszcze klastra, ale mamy już działające bramy VPN, z którymi można indywidualnie łączyć się poprzez FQDN lub IP.
Podłączonego klienta widzimy w tablicy routingu pierwszego ASA:
Aby cały nasz klaster VPN i cała sieć firmowa znała trasę do naszego klienta, dokonamy redystrybucji prefiksu klienta na dynamiczny protokół routingu, na przykład OSPF:
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ę bezpośrednio przez firmowy telefon programowy, tak jak nadejdzie ruch zwrotny z zasobów żądanych przez użytkownika w żądanej bramie VPN:
Przejdźmy do konfiguracji klastra Load-Balance.
Adres 192.168.31.40 będzie używany jako wirtualny adres IP (VIP - początkowo będą się z nim łączyć wszyscy klienci VPN), z tego adresu Cluster Master przekieruje do mniej obciążonego węzła klastra. Nie zapomnij się zarejestrować przesyłanie i odwracanie rekordów DNS zarówno dla każdego adresu zewnętrznego/nazwy FQDN każdego węzła klastra, jak i dla VIP-a.
Sprawdzamy działanie klastra z dwoma podłączonymi klientami:
Sprawmy, aby doświadczenie klienta było wygodniejsze dzięki automatycznie pobieranemu profilowi AnyConnect za pośrednictwem ASDM.
Nadajemy profilowi dogodną nazwę i kojarzymy z nim naszą politykę grupową:
Po następnym połączeniu klienta profil ten zostanie automatycznie pobrany i zainstalowany w kliencie AnyConnect, więc jeśli chcesz się połączyć, wystarczy wybrać go z listy:
Ponieważ przy użyciu ASDM utworzyliśmy ten profil tylko na jednym ASA, nie zapomnij powtórzyć kroków na pozostałych ASA w klastrze.
Wnioski: Dlatego szybko wdrożyliśmy klaster kilku bram VPN z automatycznym równoważeniem obciążenia. Dodawanie nowych węzłów do klastra jest łatwe i pozwala na proste skalowanie poziome poprzez wdrożenie nowych maszyn wirtualnych ASAv lub użycie sprzętowych ASA. Bogaty w funkcje klient AnyConnect może znacznie zwiększyć możliwości bezpiecznego połączenia zdalnego za pomocą Postawa (ocena stanu), najskuteczniej stosowane w połączeniu ze scentralizowanym systemem kontroli dostępu i księgowości Silnik usług tożsamości.