În acest articol, aș dori să prezint un ghid pas cu pas despre cum să desfășuri rapid cea mai scalabilă arhitectură de până acum. Remote-Access VPN accesului pe baza AnyConnect și Cisco ASA – Cluster de balansare a încărcării VPN.
Introducere: Multe companii din întreaga lume, având în vedere situația actuală cu COVID-19, fac eforturi pentru a-și muta angajații în regim de lucru la distanță. Având în vedere amploarea tranziției către munca de acasă, sarcina pe gateway-urile VPN existente ale companiilor crește semnificativ și există o nevoie urgentă de a le scala rapid. Pe de altă parte, multe companii sunt nevoite să învețe rapid un concept precum munca de la distanță.
Pentru a ajuta afacerile să realizeze într-un timp scurt un acces VPN convenabil, sigur și scalabil pentru angajați, compania Cisco oferă, timp de până la 13 săptămâni, licențe pentru clientul multifuncțional SSL-VPN AnyConnect. .
.
Am pregătit un ghid pas cu pas pentru o versiune simplă de desfășurare a clusterului de balansare a încărcării VPN, ca cea mai scalabilă tehnologie VPN.
Exemplul de mai jos va fi destul de simplu din punct de vedere al algoritmilor de autentificare și autorizare aplicați, dar va fi o opțiune bună pentru un început rapid (ceea ce acum lipsește multora) cu posibilitatea de adaptare în profunzime la nevoile proprii în timpul desfășurării.
Informații suplimentare: Tehnologia clusterului de balansare a încărcării VPN nu este failover și nu este o funcție de clusterizare în sensul său nativ; această tehnologie poate combina modele diferite de ASA (cu anumite limitări) pentru a echilibra sarcina conexiunilor VPN de acces la distanță. Sincronizarea sesiunilor și a configurațiilor între nodurile acestui cluster lipsește, dar este posibilă balansarea automată a sarcinii conexiunilor VPN și asigurarea redundanței conexiunilor VPN până când rămâne cel puțin un nod activ în cluster. Sarcina în cluster este echilibrată automat în funcție de gradul de utilizare al nodurilor, în funcție de numărul de sesiuni VPN.
Pentru a asigura redundanța nodurilor din cluster (dacă este necesar), se poate utiliza un failover, astfel încât conexiunea activă să fie gestionată de nodul principal al failover-ului. Failover-ul nu este o cerință necesară pentru asigurarea redundanței în cadrul clusterului de Load-Balancing; clusterul, în caz de defectare a unui nod, va transfera sesiunea utilizatorului pe un alt nod activ, însă fără păstrarea stării conexiunii, ceea ce este asigurat de failover. Prin urmare, aceste două tehnologii pot fi combinate dacă este nevoie.
Un cluster VPN Load-Balancing poate conține mai mult de două noduri.
Clusterul VPN Load-Balancing este acceptat pe ASA 5512-X și versiunile ulterioare.
Deoarece fiecare ASA din cadrul clusterului VPN Load-Balancing este o unitate independentă în ceea ce privește configurările efectuate, toate etapele de configurație se realizează individual pe fiecare dispozitiv în parte.
Topologia logică a exemplului prezentat:

Desfășurarea inițială:
Desfășurăm instanțele ASAv dorite din imagini (ASAv5/10/30/50).
Atribuim interfețele INSIDE/OUTSIDE pe VLAN-uri identice (Outside în propriul VLAN, INSIDE în al său, dar comun în cadrul clusterului, vezi topologia); este important ca interfețele de același tip să fie în același segment L2.
Licențe:
- La instalarea inițială, ASAv nu va avea licențe și va fi limitată la o capacitate de 100kbit/sec.
- Pentru a instala licența, trebuie să generați un token în contul dumneavoastră Smart-Account: -> Licențiere Smart Software
- În fereastra deschisă, apăsați butonul New Token

- Asigurați-vă că în fereastra deschisă există un câmp activ și este bifată opțiunea Allow export-controlled functionality… Fără acest câmp activ, nu veți putea utiliza funcțiile de criptare avansată și, prin urmare, VPN. Dacă acest câmp nu este activ, vă rugăm să contactați echipa dumneavoastră de suport pentru activare.

- După ce ați apăsat butonul Creează token, se va crea un token pe care îl vom folosi pentru obținerea licenței pentru ASAv, îl vom copia:

- Vom repeta pașii C,D,E pentru fiecare ASAv desfășurată.
- Pentru a facilita copierea token-ului, vom permite temporar telnet. Vom configura fiecare ASA (exemplul de mai jos ilustrează setările pe ASA-1). telnet din exterior nu funcționează; dacă este absolut necesar, schimbați nivelul de securitate la 100 pe exterior, apoi reveniți la valoarea inițială.
! 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 !- Pentru a înregistra tokenul în cloudul Smart-Account, este necesar să oferiți acces la Internet pentru ASA, .
Pe scurt, ASA are nevoie de:
- acces HTTPS la Internet;
- sincronizare a timpului (optim prin NTP);
- server DNS configurat;
- Accesăm ASA prin telnet și configurăm setările pentru activarea licenței prin 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 ! ! Să verificăm funcționarea 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: !!!!! ! ! Să verificăm sincronizarea 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 (sincronizat), # master (nesincronizat), + selectat, - candidatul, ~ configurat ! ! Să configurăm ASAv pentru Smart-Licensing (conform profilului dvs., în cazul meu 100M ca exemplu) ! ciscoasa(config)# license smart ciscoasa(config-smart-lic)# feature tier standard ciscoasa(config-smart-lic)# throughput level 100M ! ! Dacă este necesar, puteți configura accesul la Internet prin proxy folosind următorul bloc de comenzi: !call-home ! http-proxy ip_address port port ! ! Apoi, inserăm tokenul copiat din portalul Smart-Account (<token>) și înregistrăm licența ! ciscoasa(config)# end ciscoasa# license smart register idtoken <token>- Verificăm dacă dispozitivul a înregistrat cu succes licența și opțiunile de criptare sunt disponibile:


Configurăm SSL-VPN de bază pe fiecare gateway
- Apoi configurăm accesul prin 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 ! ! Vom ridica serverul HTTPS pentru ASDM pe portul 445 pentru a nu se suprapune cu portalul SSL-VPN ! vpn-demo-1(config)# http server enable 445 !- Pentru a funcționa ASDM, trebuie să-l descărcați mai întâi de pe site-ul cisco.com, în cazul meu este următorul fișier:

- Pentru a utiliza clientul AnyConnect, trebuie să descărcați pe fiecare ASA imaginea pentru fiecare sistem de operare desktop folosit (la planificarea utilizării Linux/Windows/MAC) va fi necesar un fișier cu Pachet de implementare Headend în nume:

- Fișierele descărcate pot fi încărcate, de exemplu, pe un server FTP și transferate pe fiecare ASA în parte:

- Configurăm ASDM și certificatul auto-semnat pentru SSL-VPN (în producție, se recomandă utilizarea unui certificat de încredere). FQDN-ul stabilit al adresei virtuale a clusterului (vpn-demo.ashes.cc), precum și fiecare FQDN asociat cu adresa externă a fiecărei noduri a clusterului trebuie să fie rezolvat în zona externă DNS pe adresa IP a interfeței OUTSIDE (sau pe adresa mapată, dacă este utilizată redirecționarea portului udp/443 (DTLS) și tcp/443 (TLS)). Informații detaliate despre cerințele pentru certificat sunt specificate în secțiunea Verificarea certificatului documentație.
! 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 % Numele complet calificat al domeniului din certificat va fi: vpn-demo.ashes.cc Generați certificat auto-semnat? [yes/no]: yes vpn-demo-1(config)# ! vpn-demo-1(config)# sh cry ca certificates Certificat Status: Disponibil Numărul de serie al certificatului: 4d43725e Utilizarea certificatului: Scop general Tipul cheii publice: RSA (4096 biți) Algoritmul de semnătură: SHA256 cu criptare RSA Numele emitentului: serialNumber=9A439T02F95 hostname=vpn-demo.ashes.cc cn=*.ashes.cc ou=ashes-lab o=ashes c=ru Numele subiectului: serialNumber=9A439T02F95 hostname=vpn-demo.ashes.cc cn=*.ashes.cc ou=ashes-lab o=ashes c=ru Data de valabilitate: data de început: 00:16:17 MSK Mar 19 2020 data de sfârșit: 00:16:17 MSK Mar 17 2030 Stocare: config Puncte de încredere asociate: SELF Certificat CA Status: Disponibil Numărul de serie al certificatului: 0509 Utilizarea certificatului: Scop general Tipul cheii publice: RSA (4096 biți) Algoritmul de semnătură: SHA1 cu criptare RSA Numele emitentului: cn=QuoVadis Root CA 2 o=QuoVadis Limited c=BM Numele subiectului: cn=QuoVadis Root CA 2 o=QuoVadis Limited c=BM Data de valabilitate: data de început: 21:27:00 MSK Nov 24 2006 data de sfârșit: 21:23:33 MSK Nov 24 2031 Stocare: config Puncte de încredere asociate: _SmartCallHome_ServerCA- Pentru a verifica funcționarea ASDM, nu uitați să specificați portul, de exemplu:

- Să facem configurațiile de bază pentru tunel:
- Vom face rețeaua corporativă disponibilă prin tunel, iar internetul va fi direcționat direct (cea mai puțin sigură metodă în absența măsurilor de protecție pe gazda conectată, este posibilă infiltrarea prin gazda infectată și scurgerea de date corporative, opțiunea split-tunnel-policy tunnelall va permite tot traficul gazdei în tunel. Cu toate acestea, Split-Tunnel oferă posibilitatea de a descărca gateway-ul VPN și de a nu procesa traficul Internetului gazdei)
- Vom aloca gazdelor din tunel adrese din subrețeaua 192.168.20.0/24 (piscă de la 10 la 30 adrese (pentru nodul #1)). Fiecare nod din clusterul VPN trebuie să aibă propriul său pool.
- Vom efectua autentificarea de bază cu un utilizator creat local pe ASA (acest lucru nu este recomandat, fiind cea mai simplă metodă), este mai bine să se folosească autentificarea prin LDAP/RADIUS, iar și mai bine este să legi Autentificarea Multi-Factor (MFA), de exemplu 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 !- (OPȚIONAL): În exemplul de mai sus, am folosit un utilizator local pe MSE pentru a autentifica utilizatorii îndepărtați, ceea ce, bineînțeles, este slab aplicabil decât în laborator. Voi oferi un exemplu despre cum să adaptezi rapid configurația pentru autentificarea pe RADIUS server, folosind 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 !Această integrare a permis nu doar integrarea rapidă a procedurii de autentificare cu serviciul de directori AD, ci și discernerea apartenenței computerului conectat la AD, înțelegerea dacă este un dispozitiv corporativ sau personal și evaluarea stării dispozitivului conectat.


- Vom face configurarea Transparent NAT astfel încât traficul între client și resursele rețelei corporative să nu fie NAT-it:
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- (OPȚIONAL): Pentru a lansa clienții noștri în Internet prin ASA (când se folosește tunnelall opțiuni) utilizând PAT și ieșind prin același interfață OUTSIDE, de unde se conectează, trebuie să facem următoarele setări
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 !- Este extrem de important ca, atunci când se utilizează un cluster, rețeaua internă să înțeleagă pe care ASA să dirijeze traficul de întoarcere către utilizatori, pentru aceasta trebuie să realizăm redistribuția rutelor /32 de adrese emise clienților.
În prezent, nu am configurat încă clusterul, dar avem deja gateway-uri VPN funcționale la care se poate conecta individual prin FQDN sau IP.

Vedem clientul conectat în tabela de rutare a primului ASA:

Pentru ca întregul nostru cluster VPN și toată rețeaua corporativă să cunoască ruta către clientul nostru, vom realiza redistribuția prefixului clientului în protocolul de rutare dinamic, de exemplu 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-REDISTRIBUTEAcum avem o rută către client de la al doilea gateway ASA-2, iar utilizatorii conectați la diferite gateway-uri VPN din cadrul clusterului pot, de exemplu, comunica direct prin software-ul corporativ, la fel cum traficul de întoarcere de la resursele solicitate de utilizatori va veni la gateway-ul VPN corect:

Trecem la configurarea Load-Balancing-ului clusterului.
Adresa 192.168.31.40 va fi utilizată ca Virtual IP (VIP — la care se vor conecta inițial toți clienții VPN), iar de la această adresă, Masterul clusterului va face REDIRECT către un nod mai puțin încărcat al clusterului. Nu uitați să specificați înregistrarea DNS directă și inversă pentru fiecare adresă externă/FQDN a fiecărui nod al clusterului, precum și pentru 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)#- Verificăm funcționarea clusterului cu doi clienți conectați:

- Vom noi îmbunătățim experiența utilizatorului prin încărcarea automată a profilului AnyConnect prin ASDM.

Numim profilul într-un mod convenabil și asociem politica noastră de grup cu acesta:

După următoarea conectare a clientului, acest profil va fi descărcat automat și instalat în clientul AnyConnect, astfel încât, dacă este necesar, să îl poată selecta din listă:

Dat fiind că, folosind ASDM, am creat acest profil doar pe un singur ASA, nu uitați să repetați pașii pe celelalte ASA din cluster.
Concluzie: Astfel, am desfășurat rapid un cluster format din mai multe gateway-uri VPN cu balansare automată a încărcării. Adăugarea de noi noduri la cluster nu reprezintă o problemă, obținând o scalare orizontală simplă prin desfășurarea de noi mașini virtuale ASAv sau utilizând ASA hardware. Clientul multifuncțional AnyConnect poate extinde semnificativ posibilitățile de conectare sigură de la distanță utilizând funcția Posture (evaluarea stării), aplicată cel mai eficient împreună cu sistemul de control centralizat și contabilizare a accesului Identity Services Engine.
Sursa: habr.com


















