Implementação de um cluster ASA VPN com balanceamento de carga

Neste artigo, gostaria de apresentar um guia passo a passo sobre como implantar rapidamente a arquitetura mais escalável até o momento. VPN de Acesso Remoto de acesso baseado em AnyConnect e Cisco ASA – Cluster de Balanceamento de Carga VPN.

Introdução: Muitas empresas em todo o mundo, devido à atual situação com a COVID-19, estão fazendo esforços para transferir seus funcionários para o trabalho remoto. Devido à grande quantidade de transições para o trabalho remoto, a carga sobre os gateways VPN existentes das empresas aumenta significativamente, sendo necessária uma escalabilidade rápida. Por outro lado, muitas empresas se veem forçadas a aprender às pressas um conceito como o trabalho remoto.

Para ajudar as empresas a implementar rapidamente uma solução de acesso VPN conveniente, segura e escalável para seus funcionários, a Cisco oferece licenças por até 13 semanas para o cliente multifuncional SSL-VPN AnyConnect. Também é possível obter o ASAv para teste (ASA Virtual para hipervisores VMWare/Hyper-V/KVM e plataformas em nuvem AWS/Azure) através de parceiros autorizados ou contactando os representantes da Cisco que trabalham com você..

O procedimento para a emissão de licenças AnyConnect COVID-19 está descrito aqui..

Preparei um guia passo a passo para uma opção simples de implantação de um cluster de balanceamento de carga VPN como a tecnologia de VPN mais escalável.

O exemplo abaixo será bastante simples em termos dos algoritmos de autenticação e autorização aplicados, mas será uma boa opção para um rápido início (do que muitos estão precisando atualmente), com a possibilidade de ajustes mais profundos conforme necessário durante a implantação.

Resumo: A tecnologia Cluster de Balanceamento de Carga VPN não é failover nem uma função de clusterização em seu entendimento nativo; essa tecnologia pode combinar modelos totalmente diferentes de ASA (com certas limitações) para balancear a carga de conexões VPN de Acesso Remoto. A sincronização de sessões e configurações entre os nós desse cluster não existe, mas é possível realizar o balanceamento automático da carga de conexões VPN e garantir a continuidade das conexões VPN enquanto pelo menos um nó ativo permanecer no cluster. A carga no cluster é balanceada automaticamente com base na utilização dos nós pelo número de sessões VPN.

Para a alta disponibilidade de nós específicos do cluster (se necessário), pode-se utilizar um file server, assim, a conexão ativa será processada pelo nó primário do file server. O file server não é um requisito necessário para garantir a alta disponibilidade dentro do cluster de balanceamento de carga, pois o próprio cluster, em caso de falha de um nó, transferirá a sessão do usuário para outro nó ativo, no entanto, sem manter o status da conexão, que é precisamente garantido pelo file server. Assim, é possível combinar essas duas tecnologias, se necessário.

Um cluster de VPN Load-Balancing pode conter mais de dois nós.

O cluster de VPN Load-Balancing é suportado em ASA 5512-X e superiores.

Uma vez que cada ASA dentro do cluster de VPN Load-Balancing é uma unidade independente em termos de configurações realizadas, todos os passos de configuração serão realizados individualmente em cada dispositivo.

Detalhes da tecnologia aqui

Topologia lógica do exemplo fornecido:

Implementação de um cluster ASA VPN com balanceamento de carga

Implantação inicial:

  1. Implantamos instâncias ASAv a partir da imagem dos templates necessários (ASAv5/10/30/50).

  2. Atribuímos interfaces INSIDE/OUTSIDE a VLANs iguais (Outside em sua própria VLAN, INSIDE em sua própria VLAN, mas comum dentro do cluster – veja a topologia), sendo importante que as interfaces do mesmo tipo estejam no mesmo segmento L2.

  3. Licenças:

    • No momento da instalação, o ASAv não terá nenhuma licença e estará limitado a um desempenho de 100 kbit/s.
    • Para instalar a licença, você precisará gerar um token em sua conta Smart-Account: https://software.cisco.com/ -> Licenciamento de Software Inteligente
    • Na janela que se abrir, clique no botão Novo Token

    Implementação de um cluster ASA VPN com balanceamento de carga

    • Certifique-se de que o campo ativo e a caixa de seleção Permitir funcionalidade controlada por exportação… Sem este campo ativo, você não poderá usar as funções de criptografia forte e, consequentemente, VPN. Se este campo não estiver ativo, entre em contato com sua equipe de conta para solicitar a ativação.

    Implementação de um cluster ASA VPN com balanceamento de carga

    • Após clicar no botão Criar Token, um token será criado, que usaremos para obter a licença para o ASAv, vamos copiá-lo:

    Implementação de um cluster ASA VPN com balanceamento de carga

    • Repetiremos os passos C, D, E para cada ASAv implantado.
    • Para facilitar a cópia do token, vamos permitir temporariamente o telnet. Vamos configurar cada ASA (o exemplo abaixo ilustra as configurações na ASA-1). O telnet com o outside não funciona; se for realmente necessário, mude o nível de segurança para 100 no outside e depois retorne.

    !
    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 o token na nuvem Smart-Account, é necessário fornecer acesso à Internet para o ASA. detalhes aqui.

    Em resumo, o ASA é necessário para:

    • acesso via HTTPS à Internet;
    • sincronização de tempo (preferencialmente via NTP);
    • servidor DNS configurado;
      • Conecte-se via telnet ao nosso ASA e faça as configurações necessárias para ativar a licença através do 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 
    !
    ! Vamos verificar a funcionalidade do 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:
    !!!!!
    !
    ! Vamos verificar a sincronização 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 (sincronizado), # master (não sincronizado), + selecionado, - candidato, ~ configurado
    !
    ! Vamos configurar nosso ASAv para Smart-Licensing (de acordo com seu perfil, no meu caso 100M como exemplo)
    !
    ciscoasa(config)# license smart
    ciscoasa(config-smart-lic)# feature tier standard
    ciscoasa(config-smart-lic)# throughput level 100M
    !
    ! Se necessário, pode-se configurar o acesso à Internet através de um proxy; utilize o seguinte bloco de comandos:
    !call-home
    !  http-proxy ip_address port port
    !
    ! Em seguida, inserimos o token copiado do portal Smart-Account (<token>) e registramos a licença
    !
    ciscoasa(config)# end
    ciscoasa# license smart register idtoken <token>

    • Verificamos se o dispositivo registrou a licença com sucesso e se as opções de criptografia estão disponíveis:

    Implementação de um cluster ASA VPN com balanceamento de carga

    Implementação de um cluster ASA VPN com balanceamento de carga

  4. Configurando o SSL-VPN básico em cada gateway

    • Em seguida, configuramos o acesso via 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
    !
    ! Vamos iniciar o servidor HTTPS para ASDM na porta 445 para não haver conflito com o portal SSL-VPN
    !
    vpn-demo-1(config)# http server enable 445 
    !

    • Para usar o ASDM, primeiro é preciso baixá-lo do site cisco.com; no meu caso, este é o seguinte arquivo:

    Implementação de um cluster ASA VPN com balanceamento de carga

    • Para que o cliente AnyConnect funcione, é necessário carregar em cada ASA a imagem para cada sistema operacional de desktop a ser utilizado (Linux/Windows/MAC) e um arquivo com Pacote de Implantação do Headend no nome:

    Implementação de um cluster ASA VPN com balanceamento de carga

    • Os arquivos baixados podem ser disponibilizados, por exemplo, em um servidor FTP e transferidos para cada ASA individual:

    Implementação de um cluster ASA VPN com balanceamento de carga

    • Configuramos o ASDM e o certificado Self-Signed para SSL-VPN (em produção, é recomendável usar um certificado confiável). O FQDN configurado para o endereço virtual do cluster (vpn-demo.ashes.cc), assim como cada FQDN associado ao endereço externo de cada nó do cluster, deve ser resolvido na zona externa do DNS para o endereço IP da interface OUTSIDE (ou no endereço mapeado, se estiver utilizando a redirecionamento da porta udp/443 (DTLS) e tcp/443(TLS)). Informações detalhadas sobre os requisitos do certificado estão na seção Verificação do Certificado documentação.

    !
    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
    % O nome de domínio totalmente qualificado no certificado será: vpn-demo.ashes.cc
    Gerar Certificado Autoassinado? [yes/no]: yes
    vpn-demo-1(config)# 
    !
    vpn-demo-1(config)# sh cry ca certificates 
    Certificado
    Status: Disponível
    Número de Série do Certificado: 4d43725e
    Uso do Certificado: Uso Geral
    Tipo de Chave Pública: RSA (4096 bits)
    Algoritmo de Assinatura: SHA256 com Criptografia RSA
    Nome do Emitente: 
    serialNumber=9A439T02F95
    hostname=vpn-demo.ashes.cc
    cn=*.ashes.cc
    ou=ashes-lab
    o=ashes
    c=ru
    Nome do Assunto:
    serialNumber=9A439T02F95
    hostname=vpn-demo.ashes.cc
    cn=*.ashes.cc
    ou=ashes-lab
    o=ashes
    c=ru
    Data de Validade: 
    data de início: 00:16:17 MSK Mar 19 2020
    data de término: 00:16:17 MSK Mar 17 2030
    Armazenamento: config
    Pontos de Confiança Associados: SELF 
    
    Certificado CA
    Status: Disponível
    Número de Série do Certificado: 0509
    Uso do Certificado: Uso Geral
    Tipo de Chave Pública: RSA (4096 bits)
    Algoritmo de Assinatura: SHA1 com Criptografia RSA
    Nome do Emitente: 
    cn=QuoVadis Root CA 2
    o=QuoVadis Limited
    c=BM
    Nome do Assunto: 
    cn=QuoVadis Root CA 2
    o=QuoVadis Limited
    c=BM
    Data de Validade: 
    data de início: 21:27:00 MSK Nov 24 2006
    data de término: 21:23:33 MSK Nov 24 2031
    Armazenamento: config
    Pontos de Confiança Associados: _SmartCallHome_ServerCA               

    • Para verificar o funcionamento do ASDM, não esqueça de indicar a porta, por exemplo:

    Implementação de um cluster ASA VPN com balanceamento de carga

    • Vamos realizar as configurações básicas do túnel:
    • Tornaremos a rede corporativa acessível através do túnel, enquanto o acesso à internet será feito diretamente (não é o método mais seguro na ausência de medidas de proteção no host conectado, podendo ocorrer infiltração através de um host infectado e vazamento de dados corporativos, a opção split-tunnel-policy tunnelall irá direcionar todo o tráfego do host para o túnel. No entanto, Split-Tunnel oferece a possibilidade de aliviar o gateway VPN e não processar o tráfego da internet do host)
    • Vamos atribuir aos hosts no túnel endereços da sub-rede 192.168.20.0/24 (pool de 10 a 30 endereços (para o nó #1)). Em cada nó do cluster VPN, o pool deve ser específico.
    • Faremos autenticação básica com um usuário criado localmente no ASA (não é recomendado fazer isso, é o método mais simples), o ideal é realizar a autenticação através de LDAP/RADIUS, e ainda melhor vincular Autenticação de Múltiplos Fatores (MFA), por exemplo 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
    !

    • (OPCIONAL): No exemplo acima, utilizamos um usuário local no MCE para autenticar usuários remotos, o que, claro, tem aplicação muito limitada além de laboratórios. Vou dar um exemplo de como adaptar rapidamente a configuração para autenticação em RADIUS servidor, utilizando como exemplo 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 
    !

    Essa integração permitiu não apenas implementar rapidamente o procedimento de autenticação com o serviço de diretórios AD, mas também diferenciar se o computador conectado pertence ao AD, entendendo se é um dispositivo corporativo ou pessoal, e avaliando o estado do dispositivo conectado.

    Implementação de um cluster ASA VPN com balanceamento de carga

    Implementação de um cluster ASA VPN com balanceamento de carga

    • Faremos a configuração de NAT Transparente para que o tráfego entre o cliente e os recursos da rede corporativa não seja traduzido:

    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 liberar nossos clientes para a Internet através do ASA (usando tunnelall As opções) usando PAT e também saindo através da mesma interface OUTSIDE, da qual eles se conectam, é necessário fazer as seguintes configurações

    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
    !

    • É extremamente importante, ao usar um cluster, permitir que a rede interna entenda para qual ASA rotear o tráfego de retorno aos usuários, para isso é necessário redistribuir rotas para endereços /32 concedidos aos clientes.
      Atualmente, ainda não configuramos o cluster, mas já temos gateways VPN funcionando, aos quais podemos nos conectar individualmente por FQDN ou IP.

    Implementação de um cluster ASA VPN com balanceamento de carga

    Podemos ver o cliente conectado na tabela de roteamento do primeiro ASA:

    Implementação de um cluster ASA VPN com balanceamento de carga

    Para que todo nosso cluster VPN e toda a rede corporativa conheçam a rota até nosso cliente, faremos a redistribuição do prefixo do cliente para o protocolo de roteamento dinâmico, por exemplo, 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

    Agora temos uma rota até o cliente a partir do segundo gateway ASA-2 e os usuários conectados a diferentes gateways VPN dentro do cluster podem, por exemplo, se comunicar através do softphone corporativo diretamente, assim como o tráfego de retorno dos recursos solicitados pelos usuários chegará ao gateway VPN correto:

    Implementação de um cluster ASA VPN com balanceamento de carga

  5. Vamos para a configuração de Load-Balancing do cluster.

    O endereço 192.168.31.40 será usado como IP Virtual (VIP — todos os clientes VPN se conectarão a ele inicialmente), a partir deste endereço o Master do cluster fará o REDIRECT para o nó menos carregado do cluster. Não se esqueça de definir as entradas DNS direta e reversa tanto para cada endereço externo/FQDN de cada nó do cluster, quanto para o 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)#

    • Estamos verificando o funcionamento do cluster com dois clientes conectados:

    Implementação de um cluster ASA VPN com balanceamento de carga

    • Tornaremos a experiência do cliente mais conveniente com o perfil qualquer-connect carregado automaticamente através do ASDM.

    Implementação de um cluster ASA VPN com balanceamento de carga

    Nomeamos o perfil de maneira conveniente e associamos nossa política de grupo a ele:

    Implementação de um cluster ASA VPN com balanceamento de carga

    Após a próxima conexão do cliente, esse perfil será baixado e instalado automaticamente no cliente qualquer-connect, assim, será apenas necessário selecioná-lo na lista caso precise se conectar:

    Implementação de um cluster ASA VPN com balanceamento de carga

    Como, ao usar o ASDM, criamos esse perfil apenas em um ASA, não se esqueça de repetir as etapas nos outros ASAs do cluster.

Conclusão: Dessa forma, implantamos rapidamente um cluster de vários gateways VPN com balanceamento de carga automático. Adicionar novos nós ao cluster não é difícil, obtendo uma simples escalabilidade horizontal através da implantação de novas máquinas virtuais ASAv ou utilizando ASAs físicos. O cliente multifuncional qualquer-connect pode expandir muito as capacidades de conexão remota segura utilizando a função Postura (avaliação de estado), aplicada de forma mais eficaz em conjunto com o sistema de controle e auditoria de acesso centralizado Identity Services Engine.

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster