Implementación de un clúster de equilibrio de carga VPN ASA

En este artículo, me gustaría proporcionar instrucciones paso a paso sobre cómo puede implementar rápidamente el esquema más escalable en este momento. VPN de acceso remoto basado en el acceso AnyConnect y Cisco ASAClúster de equilibrio de carga de VPN.

Introducción Muchas empresas en todo el mundo, ante la situación actual con el COVID-19, están haciendo esfuerzos para trasladar a sus empleados al trabajo remoto. Debido a la transición masiva al trabajo remoto, la carga en las puertas de enlace VPN existentes de las empresas está aumentando de manera crítica y se requiere una capacidad muy rápida para escalarlas. Por otro lado, muchas empresas se ven obligadas a dominar apresuradamente el concepto de trabajo remoto desde cero.

Para ayudar a las empresas a lograr un acceso VPN conveniente, seguro y escalable para los empleados en el menor tiempo posible, Cisco está otorgando licencias al cliente VPN SSL rico en funciones AnyConnect por hasta 13 semanas. También puede tomar ASAv para una prueba (ASA virtual para hipervisores VMWare/Hyper-V/KVM y plataformas en la nube AWS/Azure) de socios autorizados o comunicándose con los representantes de Cisco que trabajan con usted.

El procedimiento para la emisión de licencias de AnyConnect COVID-19 se describe aquí.

Preparé una guía paso a paso para una implementación sencilla del clúster de equilibrio de carga VPN como la tecnología VPN más escalable.

El ejemplo a continuación será bastante simple en cuanto a los algoritmos de autenticación y autorización utilizados, pero será una buena opción para un inicio rápido (que actualmente no es suficiente para muchos) con la posibilidad de una adaptación profunda a sus necesidades durante la implementación. proceso.

Breve información: La tecnología VPN Load Balancing Cluster no es una conmutación por error ni una función de agrupamiento en su sentido nativo, esta tecnología puede combinar modelos ASA completamente diferentes (con ciertas restricciones) para equilibrar la carga de las conexiones VPN de acceso remoto. No hay sincronización de sesiones y configuraciones entre los nodos de dicho clúster, pero es posible equilibrar automáticamente la carga de las conexiones VPN y garantizar la tolerancia a fallas de las conexiones VPN hasta que al menos un nodo activo permanezca en el clúster. La carga en el clúster se equilibra automáticamente según la carga de trabajo de los nodos por el número de sesiones de VPN.

Para la conmutación por error de nodos específicos del clúster (si es necesario), se puede usar un archivador, por lo que la conexión activa será manejada por el nodo principal del archivador. El fileover no es una condición necesaria para garantizar la tolerancia a fallas dentro del clúster de equilibrio de carga, el propio clúster, en caso de falla de un nodo, transferirá la sesión del usuario a otro nodo vivo, pero sin guardar el estado de conexión, que es precisamente proporcionada por el declarante. En consecuencia, es posible, si es necesario, combinar estas dos tecnologías.

Un clúster de equilibrio de carga de VPN puede contener más de dos nodos.

El clúster de equilibrio de carga VPN es compatible con ASA 5512-X y superior.

Dado que cada ASA dentro del clúster de equilibrio de carga VPN es una unidad independiente en términos de configuración, llevamos a cabo todos los pasos de configuración individualmente en cada dispositivo individual.

Detalles de la tecnología aquí

La topología lógica del ejemplo dado:

Implementación de un clúster de equilibrio de carga VPN ASA

Implementación principal:

  1. Desplegamos instancias ASAv de las plantillas que necesitamos (ASAv5/10/30/50) de la imagen.

  2. Asignamos las interfaces INSIDE/OUTSIDE a las mismas VLANs (Outside en su propia VLAN, INSIDE en la suya, pero generalmente dentro del cluster, ver la topología), es importante que las interfaces del mismo tipo estén en el mismo segmento L2.

  3. Licencias:

    • Por el momento la instalación de ASAv no tendrá licencias y estará limitada a 100kbps.
    • Para instalar una licencia, debe generar un token en su Smart-Account: https://software.cisco.com/ -> Licencias de software inteligente
    • En la ventana que se abre, haga clic en el botón Nueva ficha

    Implementación de un clúster de equilibrio de carga VPN ASA

    • Asegúrese de que en la ventana que se abre haya un campo activo y una marca de verificación esté marcada Permitir la funcionalidad controlada por exportación… Sin este campo activo, no podrá utilizar las funciones de cifrado fuerte y, en consecuencia, VPN. Si este campo no está activo, comuníquese con su equipo de cuenta con una solicitud de activación.

    Implementación de un clúster de equilibrio de carga VPN ASA

    • Después de hacer clic en el botón Crear token, se creará un token que usaremos para obtener una licencia para ASAv, cópielo:

    Implementación de un clúster de equilibrio de carga VPN ASA

    • Repita los pasos C, D, E para cada ASAv implementado.
    • Para facilitar la copia del token, permitamos telnet temporalmente. Configuremos cada ASA (el siguiente ejemplo ilustra la configuración en ASA-1). telnet no funciona con el exterior, si realmente lo necesita, cambie el nivel de seguridad a 100 para el exterior y luego devuélvalo.

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

    • Para registrar un token en la nube de Smart-Account, debe proporcionar acceso a Internet para ASA, detalles aquí.

    En resumen, se necesita ASA:

    • acceso a través de HTTPS a Internet;
    • sincronización de tiempo (más correctamente, a través de NTP);
    • servidor DNS registrado;
      • Hacemos telnet a nuestro ASA y hacemos configuraciones para activar la licencia a través de 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>

    • Comprobamos que el dispositivo haya registrado correctamente una licencia y que las opciones de cifrado estén disponibles:

    Implementación de un clúster de equilibrio de carga VPN ASA

    Implementación de un clúster de equilibrio de carga VPN ASA

  4. Configure un SSL-VPN básico en cada puerta de enlace

    • A continuación, configure el acceso a través de SSH y 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 
    !

    • Para que ASDM funcione, primero debe descargarlo del sitio web de cisco.com, en mi caso es el siguiente archivo:

    Implementación de un clúster de equilibrio de carga VPN ASA

    • Para que el cliente de AnyConnect funcione, debe cargar una imagen en cada ASA para cada sistema operativo de escritorio del cliente utilizado (planeado para usar Linux/Windows/MAC), necesitará un archivo con Paquete de implementación de cabecera en el nombre:

    Implementación de un clúster de equilibrio de carga VPN ASA

    • Los archivos descargados pueden cargarse, por ejemplo, en un servidor FTP y cargarse en cada ASA individual:

    Implementación de un clúster de equilibrio de carga VPN ASA

    • Configuramos ASDM y certificado Self-Signed para SSL-VPN (se recomienda utilizar un certificado de confianza en producción). El FQDN establecido de la dirección del clúster virtual (vpn-demo.ashes.cc), así como cada FQDN asociado con la dirección externa de cada nodo del clúster, debe resolverse en la zona DNS externa a la dirección IP de la interfaz EXTERNA (o a la dirección asignada si se utiliza el reenvío de puertos udp/443 (DTLS) y tcp/443 (TLS)). La información detallada sobre los requisitos para el certificado se especifica en la sección Verificación del certificado documentación.

    !
    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               

    • No olvide especificar el puerto para verificar que ASDM esté funcionando, por ejemplo:

    Implementación de un clúster de equilibrio de carga VPN ASA

    • Realicemos la configuración básica del túnel:
    • Hagamos que la red corporativa esté disponible a través del túnel y dejemos que Internet vaya directamente (no es el método más seguro si no hay protecciones en el host que se conecta, es posible penetrar a través de un host infectado y mostrar datos corporativos, opción política de túnel dividido tunnelall permitirá que todo el tráfico del host ingrese al túnel. Sin embargo túnel dividido hace posible descargar la puerta de enlace VPN y no procesar el tráfico de Internet del host)
    • Emitamos direcciones desde la subred 192.168.20.0/24 a hosts en el túnel (grupo de 10 a 30 direcciones (para el nodo n.° 1)). Cada nodo del clúster VPN debe tener su propio grupo.
    • Realizaremos la autenticación básica con un usuario creado localmente en el ASA (Esto no se recomienda, este es el método más fácil), es mejor hacer la autenticación a través de LDAP/RADIO, o mejor aún, empate Autenticación multifactor (MFA)ejemplo Dúo de Cisco.

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

    • (OPCIONAL): En el ejemplo anterior, usamos un usuario local en la ITU para autenticar a los usuarios remotos, lo que, por supuesto, excepto en el laboratorio, es poco aplicable. Daré un ejemplo de cómo adaptar rápidamente la configuración de autenticación para RADIO servidor, por ejemplo utilizado Motor de servicios de identidad de Cisco:

    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 
    !

    Esta integración hizo posible no solo integrar rápidamente el procedimiento de autenticación con el servicio de directorio de AD, sino también distinguir si la computadora conectada pertenece a AD, comprender si este dispositivo es corporativo o personal y evaluar el estado del dispositivo conectado. .

    Implementación de un clúster de equilibrio de carga VPN ASA

    Implementación de un clúster de equilibrio de carga VPN ASA

    • Configuremos NAT transparente para que el tráfico entre el cliente y los recursos de la red de la red corporativa no se garabatee:

    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

    • (OPCIONAL): Para exponer a nuestros clientes a Internet a través del ASA (al utilizar túnel opciones) utilizando PAT, así como salir a través de la misma interfaz EXTERIOR desde la que están conectados, debe realizar la siguiente configuración

    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 
    !

    • Cuando se usa un clúster, es extremadamente importante permitir que la red interna comprenda qué ASA debe enrutar el tráfico de retorno a los usuarios; para esto, debe redistribuir las rutas/32 direcciones emitidas a los clientes.
      Por el momento, aún no hemos configurado el clúster, pero ya tenemos puertas de enlace VPN en funcionamiento que se pueden conectar individualmente a través de FQDN o IP.

    Implementación de un clúster de equilibrio de carga VPN ASA

    Vemos al cliente conectado en la tabla de enrutamiento del primer ASA:

    Implementación de un clúster de equilibrio de carga VPN ASA

    Para que todo nuestro clúster VPN y toda la red corporativa conozcan la ruta a nuestro cliente, redistribuiremos el prefijo del cliente en un protocolo de enrutamiento dinámico, por ejemplo, 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

    Ahora tenemos una ruta al cliente desde la segunda puerta de enlace ASA-2 y los usuarios conectados a diferentes puertas de enlace VPN dentro del clúster pueden, por ejemplo, comunicarse directamente a través de un softphone corporativo, así como devolver el tráfico de los recursos solicitados por el usuario. acceda a la puerta de enlace VPN deseada:

    Implementación de un clúster de equilibrio de carga VPN ASA

  5. Pasemos a configurar el clúster de equilibrio de carga.

    La dirección 192.168.31.40 se utilizará como IP virtual (VIP: todos los clientes VPN se conectarán inicialmente a ella), desde esta dirección, el clúster maestro realizará un REDIRECT a un nodo de clúster menos cargado. no olvides escribir reenviar y revertir registro DNS tanto para cada dirección externa/FQDN de cada nodo del clúster, como para 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)#

    • Comprobamos el funcionamiento del clúster con dos clientes conectados:

    Implementación de un clúster de equilibrio de carga VPN ASA

    • Hagamos que la experiencia del cliente sea más conveniente con el perfil AnyConnect cargado automáticamente a través de ASDM.

    Implementación de un clúster de equilibrio de carga VPN ASA

    Nombramos el perfil de manera conveniente y le asociamos nuestra política de grupo:

    Implementación de un clúster de equilibrio de carga VPN ASA

    Después de la próxima conexión del cliente, este perfil se descargará e instalará automáticamente en el cliente AnyConnect, por lo que si necesita conectarse, solo necesita seleccionarlo de la lista:

    Implementación de un clúster de equilibrio de carga VPN ASA

    Dado que creamos este perfil en un solo ASA mediante ASDM, no olvide repetir los pasos en los otros ASA del clúster.

Conclusión: Por lo tanto, implementamos rápidamente un grupo de varias puertas de enlace VPN con equilibrio de carga automático. Agregar nuevos nodos al clúster es fácil, con un escalado horizontal simple mediante la implementación de nuevas máquinas virtuales ASAv o el uso de ASA de hardware. El cliente AnyConnect rico en funciones puede mejorar en gran medida la conexión remota segura mediante el uso de Postura (estado de estimaciones), utilizado con mayor eficacia junto con el sistema de control centralizado y contabilidad de acceso Motor de servicios de identidad.

Fuente: habr.com

Añadir un comentario