Distribuzione di un cluster di bilanciamento del carico ASA VPN

In questo articolo, vorrei fornire una guida passo passo su come implementare rapidamente l'attuale schema di accesso più scalabile Remote-Access VPN basato su AnyConnect e Cisco ASAVPN Load Balancing Cluster.

Introduzione: Molte aziende in tutto il mondo, a causa della situazione attuale con il COVID-19, stanno facendo sforzi per trasferire i propri dipendenti a modalità di lavoro remoto. A causa della massiccia transizione al lavoro a distanza, la pressione sui gateway VPN esistenti delle aziende aumenta drasticamente e si richiede una possibilità di scalabilità molto rapida. D'altro canto, molte aziende sono costrette a imparare in fretta il concetto di lavoro remoto.

Per aiutare le aziende a implementare nel minor tempo possibile un accesso VPN comodo, sicuro e scalabile per i dipendenti, Cisco offre licenze per il client SSL-VPN multifunzionale AnyConnect per un periodo di fino a 13 settimane. È anche possibile testare l'ASAv (Virtual ASA per hypervisor VMWare/Hyper-V/KVM e piattaforme cloud AWS/Azure) tramite partner autorizzati o contattando i rappresentanti Cisco che collaborano con voi..

La procedura per l'emissione delle licenze AnyConnect COVID-19 è descritta qui.

Ho preparato una guida passo passo per un'opzione semplice di distribuzione di un cluster VPN Load-Balancing come tecnologia VPN altamente scalabile.

L'esempio sottostante sarà piuttosto semplice in termini di algoritmi di autenticazione e autorizzazione impiegati, ma rappresenta una buona opzione per un avvio rapido (cosa che attualmente manca a molti) con la possibilità di un'adattamento approfondito alle proprie esigenze durante il processo di distribuzione.

Informazioni generali: La tecnologia del Cluster VPN Load Balancing non è failover né una funzione di clustering nel suo significato nativo; questa tecnologia permette di combinare modelli ASA completamente diversi (con alcune limitazioni) per bilanciare il carico delle connessioni VPN di accesso remoto. La sincronizzazione delle sessioni e delle configurazioni tra i nodi di tale cluster è assente, ma è possibile un bilanciamento automatico del carico delle connessioni VPN e garantire la resilienza delle connessioni VPN finché c'è almeno un nodo attivo nel cluster. Il carico nel cluster viene bilanciato automaticamente in base al numero di sessioni VPN attive sui nodi.

Per garantire la tolleranza ai guasti per nodi specifici del cluster (se necessario) è possibile utilizzare un file server, in questo modo la connessione attiva sarà gestita dal nodo primario del file server. Il file server non è un requisito necessario per garantire la tolleranza ai guasti all'interno di un cluster di Load-Balancing; il cluster stesso, in caso di guasto di un nodo, trasferirà la sessione utente su un altro nodo attivo, ma senza mantenere lo stato della connessione, cosa che viene garantita dal file server. Pertanto, è possibile combinare queste due tecnologie se necessario.

Un cluster VPN Load-Balancing può contenere più di due nodi.

Il cluster VPN Load-Balancing è supportato su ASA 5512-X e superiore.

Poiché ogni ASA all'interno del cluster VPN Load-Balancing è un'unità indipendente per quanto riguarda le impostazioni effettuate, tutte le fasi di configurazione vengono eseguite individualmente su ciascun dispositivo.

Dettagli sulla tecnologia qui

La topologia logica dell'esempio fornito:

Distribuzione di un cluster di bilanciamento del carico ASA VPN

Distribuzione iniziale:

  1. Distribuiamo le istanze ASAv dai template di cui abbiamo bisogno (ASAv5/10/30/50).

  2. Assegniamo le interfacce INSIDE/OUTSIDE agli stessi VLAN (Outside nel proprio VLAN, INSIDE nel proprio, ma comune all'interno del cluster, vedere la topologia), è importante che le interfacce dello stesso tipo si trovino nello stesso segmento L2.

  3. Licenze:

    • Al momento dell'installazione, l'ASAv non avrà alcuna licenza e sarà limitata a una performance di 100 kbit/sec.
    • Per installare la licenza, è necessario generare un token nel proprio Smart Account: https://software.cisco.com/ -> Smart Software Licensing
    • Nella finestra che si apre, cliccare sul pulsante New Token

    Distribuzione di un cluster di bilanciamento del carico ASA VPN

    • Assicurati che nella finestra aperta ci sia il campo attivo e che sia selezionata l'opzione Allow export-controlled functionality… Senza questo campo attivo non sarà possibile utilizzare le funzionalità di crittografia avanzata e, di conseguenza, VPN. Se questo campo non è attivo, ti preghiamo di contattare il tuo team account per attivarlo.

    Distribuzione di un cluster di bilanciamento del carico ASA VPN

    • Dopo aver premuto il pulsante Crea token, verrà creato un token che useremo per ottenere la licenza per ASAv, copiamolo:

    Distribuzione di un cluster di bilanciamento del carico ASA VPN

    • Ripetiamo i passi C, D, E per ogni ASAv distribuita.
    • Per semplificare la copia del token, abilitiamo temporaneamente telnet. Configuriamo ogni ASA (l'esempio qui sotto illustra le impostazioni su ASA-1). Il telnet su outside non funziona, se necessario, cambia il livello di sicurezza a 100 su outside, poi riportalo indietro.

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

    • Per registrare il token nel cloud Smart-Account è necessario fornire accesso a Internet per l'ASA. dettagli qui.

    In breve, l'ASA è necessario:

    • accesso HTTPS a Internet;
    • synchronizzazione dell'orario (preferibilmente tramite NTP);
    • server DNS configurato;
      • Accediamo tramite telnet ai nostri ASA e configuriamo le impostazioni per attivare la licenza tramite 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 
    !
    ! Verifichiamo il funzionamento del 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:
    !!!!!
    !
    ! Verifichiamo la sincronizzazione 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 (sincronizzato), # master (non sincronizzato), + selezionato, - candidato, ~ configurato
    !
    ! Configuriamo la nostra ASAv per Smart-Licensing (secondo il tuo profilo, nel mio caso 100M per esempio)
    !
    ciscoasa(config)# license smart
    ciscoasa(config-smart-lic)# feature tier standard
    ciscoasa(config-smart-lic)# throughput level 100M
    !
    ! Se necessario, puoi configurare l'accesso a Internet tramite proxy utilizzando il seguente blocco di comandi:
    !call-home
    !  http-proxy ip_address port port
    !
    ! Successivamente, inseriamo il token copiato dal portale Smart-Account (<token>) e registriamo la licenza
    !
    ciscoasa(config)# end
    ciscoasa# license smart register idtoken <token>

    • Verifichiamo che il dispositivo abbia registrato con successo la licenza e che le opzioni di crittografia siano disponibili:

    Distribuzione di un cluster di bilanciamento del carico ASA VPN

    Distribuzione di un cluster di bilanciamento del carico ASA VPN

  4. Configuriamo un SSL-VPN di base su ciascun gateway.

    • Successivamente, configuriamo l'accesso tramite SSH e 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
    !
    ! Configuriamo il server HTTPS per ASDM sulla porta 445 per non sovrapporsi al portale SSL-VPN
    !
    vpn-demo-1(config)# http server enable 445 
    !

    • Per utilizzare ASDM è necessario prima scaricarlo dal sito cisco.com, nel mio caso si tratta del seguente file:

    Distribuzione di un cluster di bilanciamento del carico ASA VPN

    • Per il funzionamento del client AnyConnect è necessario caricare su ogni ASA l'immagine per ciascun sistema operativo desktop del client (previsto per Linux/Windows/MAC) sarà necessario un file con Pacchetto di distribuzione Headend nel nome:

    Distribuzione di un cluster di bilanciamento del carico ASA VPN

    • I file scaricati possono essere caricati, ad esempio, su un server FTP e caricati su ogni singola ASA:

    Distribuzione di un cluster di bilanciamento del carico ASA VPN

    • Configuriamo ASDM e il certificato self-signed per SSL-VPN (in produzione si consiglia di utilizzare un certificato attendibile). Il FQDN installato dell'indirizzo virtuale del cluster (vpn-demo.ashes.cc), insieme a ogni FQDN associato all'indirizzo esterno di ogni nodo del cluster, deve risolversi nella zona DNS esterna all'indirizzo IP dell'interfaccia OUTSIDE (o all'indirizzo mappato, se viene utilizzata la port forwarding udp/443 (DTLS) e tcp/443 (TLS)). Ulteriori informazioni sui requisiti per il certificato sono disponibili nella sezione Verifica del certificato documentazione.

    !
    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=it
    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
    % Il nome di dominio completamente qualificato nel certificato sarà: vpn-demo.ashes.cc
    Generare certificato auto-firmato? [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=it
    Subject Name:
    serialNumber=9A439T02F95
    hostname=vpn-demo.ashes.cc
    cn=*.ashes.cc
    ou=ashes-lab
    o=ashes
    c=it
    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               

    • Per verificare il funzionamento dell'ASDM, ricordate di specificare la porta, ad esempio:

    Distribuzione di un cluster di bilanciamento del carico ASA VPN

    • Procederemo con le configurazioni base del tunnel:
    • Rendere accessibile la rete aziendale tramite un tunnel, mentre l'accesso a Internet avviene direttamente (non è il metodo più sicuro in assenza di misure di protezione sul host connesso, c'è il rischio di infiltrazione tramite un host infetto e di esposizione dei dati aziendali, opzione split-tunnel-policy tunnelall invierà tutto il traffico dell'host nel tunnel. Tuttavia, Split-Tunnel consente di alleggerire il gateway VPN e di non elaborare il traffico Internet dell'host)
    • Assegneremo agli host nel tunnel indirizzi dalla sottorete 192.168.20.0/24 (pool dagli indirizzi 10 al 30 (per il nodo #1)). Ogni nodo del cluster VPN deve avere il proprio pool.
    • Effettueremo un'autenticazione di base tramite un utente creato localmente su ASA (questo metodo non è raccomandato, è il più semplice), è meglio autenticarsi tramite LDAP/RADIUS, e ancor meglio legare l'Autenticazione a Fattore Multiplo (MFA), ad esempio 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
    !

    • (OPZIONALE): Nell'esempio sopra, abbiamo utilizzato un utente locale su Cisco Identity Services Engine per autenticare gli utenti remoti, il che, ovviamente, è poco praticabile al di fuori di un laboratorio. Mostrerò un esempio di come adattare rapidamente la configurazione per l'autenticazione su RADIUS un server, utilizzando 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 
    !

    Questa integrazione ha reso possibile non solo un'integrazione rapida della procedura di autenticazione con il servizio directory AD, ma anche la distinzione dell'appartenenza del computer connesso all'AD, comprendendo se si tratta di un dispositivo aziendale o personale e valutando lo stato del dispositivo collegato.

    Distribuzione di un cluster di bilanciamento del carico ASA VPN

    Distribuzione di un cluster di bilanciamento del carico ASA VPN

    • Configuriamo il Transparent NAT affinché il traffico tra il cliente e le risorse della rete aziendale non venga NATtato:

    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

    • (OPZIONALE): Per consentire ai nostri clienti di accedere a Internet tramite ASA (utilizzando tunnelall opzioni) utilizzando PAT, e uscire attraverso lo stesso interfaccia OUTSIDE da cui si connettono, è necessario apportare le seguenti configurazioni:

    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 
    !

    • È estremamente importante, quando si utilizza un cluster, consentire alla rete interna di comprendere verso quale ASA instradare il traffico di ritorno agli utenti; è necessario effettuare una ridistribuzione delle rotte /32 assegnate ai clienti.
      Attualmente non abbiamo ancora configurato il cluster, ma abbiamo già gateway VPN funzionanti a cui è possibile connettersi individualmente tramite FQDN o IP.

    Distribuzione di un cluster di bilanciamento del carico ASA VPN

    Possiamo vedere il cliente connesso nella tabella di routing della prima ASA:

    Distribuzione di un cluster di bilanciamento del carico ASA VPN

    Affinché l'intero cluster VPN e l'intera rete aziendale conoscano il percorso verso il nostro cliente, eseguiremo la ridistribuzione del prefisso clienti nel protocollo di routing dinamico, ad esempio 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

    Ora abbiamo un percorso verso il cliente dal secondo gateway ASA-2 e gli utenti connessi a diversi gateway VPN all'interno del cluster possono, ad esempio, comunicare tramite il softphone aziendale direttamente, così come il traffico di ritorno delle risorse richieste dall'utente arriverà al gateway VPN corretto:

    Distribuzione di un cluster di bilanciamento del carico ASA VPN

  5. Passiamo alla configurazione del cluster di bilanciamento del carico.

    L'indirizzo 192.168.31.40 verrà utilizzato come IP Virtuale (VIP — a cui si connetteranno inizialmente tutti i client VPN), da questo indirizzo il Master del cluster eseguirà un REDIRECT verso il nodo del cluster meno carico. Non dimenticare di definire la registrazione DNS diretta e inversa sia per ogni indirizzo esterno/FQDN di ciascun nodo del cluster, che per il 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)#

    • Verifichiamo il funzionamento del cluster con due client connessi:

    Distribuzione di un cluster di bilanciamento del carico ASA VPN

    • Rendere l'esperienza del cliente più comoda con il profilo AnyConnect caricato automaticamente tramite ASDM.

    Distribuzione di un cluster di bilanciamento del carico ASA VPN

    Nominiamo il profilo in modo conveniente e associamo la nostra politica di gruppo ad esso:

    Distribuzione di un cluster di bilanciamento del carico ASA VPN

    Dopo la prossima connessione del cliente, questo profilo verrà automaticamente scaricato e installato nel client AnyConnect, permettendo di sceglierlo facilmente dalla lista se necessario:

    Distribuzione di un cluster di bilanciamento del carico ASA VPN

    Poiché, utilizzando ASDM, abbiamo creato questo profilo solo su un'ASA, non dimenticare di ripetere l'operazione sulle altre ASA del cluster.

Risultato: In questo modo, abbiamo implementato rapidamente un cluster di più gateway VPN con bilanciamento del carico automatico. Aggiungere nuove nodi al cluster è semplice, ottenendo una scalabilità orizzontale tramite il deployment di nuove macchine virtuali ASAv o l'uso di ASA hardware. Il versatile client AnyConnect può ampliare notevolmente le possibilità di connessione remota sicura utilizzando la funzionalità Posture (valutazione dello stato), particolarmente efficace se utilizzata insieme al sistema di controllo centralizzato e gestione degli accessi Identity Services Engine.

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster