Розгортання ASA VPN Load-Balancing кластера

У цій статті я хотів би навести покрокову інструкцію того, як можна швидко розгорнути схему, що наразі масштабується. Remote-Access VPN доступу на базі AnyConnect та Cisco ASA - VPN Load Balancing Cluster.

Вступ: Багато компаній у всьому світі через поточну обстановку з COVID-19 роблять зусилля з переведення своїх співробітників на віддалений режим роботи. Зважаючи на масовість переходу на віддалену роботу, критичним чином зростає навантаження на наявні VPN шлюзи компаній і потрібна дуже швидка можливість їх масштабування. З іншого боку, багато компаній змушені поспіхом освоювати з нуля таке поняття як віддалена робота.

Для того, щоб допомогти бізнесу реалізувати в найкоротший термін зручний, безпечний і масштабований доступ VPN для співробітників, компанія Cisco надає на строк до 13 тижнів ліцензії на багатофункціональний SSL-VPN клієнт AnyConnect. Також можна взяти ASAv на тест (Віртуальна ASA для гіпервізорів VMWare/Hyper-V/KVM та хмарних платформ AWS/Azure) у авторизованих партнерів або звернувшись до представників Cisco, які працюють з Вами.

Процедура виписки ліцензій AnyConnect COVID-19 описана тут.

Я підготував покрокову інструкцію простого варіанта розгортання VPN Load-Balancing кластера як технології VPN, що найбільш масштабується.

Нижченаведений приклад буде досить простим з точки зору застосовуваних алгоритмів аутентифікації та авторизації, але буде гарним варіантом для швидкого старту (чого зараз дуже багатьом не вистачає) з можливістю поглибленої адаптації під свої потреби в процесі розгортання.

Короткі відомості: Технологія VPN Load Balancing Cluster – це не failover і не функція кластеризації в її нативному розумінні, даною технологією можна поєднувати зовсім різні моделі ASA (з певними обмеженнями) з метою балансування навантаження Remote-Access VPN з'єднань. Cинхронізація сесій та конфігурацій між нодами такого кластера відсутня, зате можливе автоматичне балансування навантаження VPN з'єднань та забезпечення відмовостійкості з'єднань VPN доки не залишиться хоча б однієї активної ноди в кластері. Навантаження у кластері балансується автоматично залежно від завантаженості нод за кількістю VPN сесій.

Для стійкості до відмов конкретних нод кластера (якщо це потрібно) можна застосовувати файловер, таким чином, активне з'єднання буде оброблятися Primary нодою файловера. Файловер не є необхідною умовою забезпечення відмовостійкості всередині Load-Balancing кластера, сам кластер у разі відмови ноди переведе сесію користувача на іншу живу ноду, однак без збереження статусу з'єднання, що забезпечується файловером. Відповідно можна за необхідності комбінувати ці дві технології.

VPN Load-Balancing кластер може містити більше двох нод.

VPN Load-Balancing кластер підтримується на ASA 5512-X та вище.

Оскільки кожна ASA в рамках VPN Load-Balancing кластера є незалежною одиницею з точки зору налаштувань, то всі етапи конфігурації ми проводимо індивідуально на кожному окремому пристрої.

Подробиці технології тут

Логічна топологія наведеного прикладу:

Розгортання ASA VPN Load-Balancing кластера

Первинне розгортання:

  1. Розгортаємо з образу екземпляри ASAv потрібних нам шаблонів (ASAv5/10/30/50).

  2. Призначаємо інтерфейси INSIDE/OUTSIDE на однакові VLAN (Outside у своєму VLAN, INSIDE у своєму, але загальному в рамках кластера див. Топологію), важливому щоб інтерфейси одного типу знаходилися в одному L2 сегменті.

  3. Ліцензії:

    • На момент встановлення ASAv не матиме жодних ліцензій і буде обмежено продуктивністю 100кбіт/сек.
    • Для встановлення ліцензії Вам необхідно згенерувати токен у Вашому кабінеті Smart-Account: https://software.cisco.com/ -> Smart Software Licensing
    • У вікні після натисніть кнопку Новий маркер

    Розгортання ASA VPN Load-Balancing кластера

    • Переконайтеся, що у вікні є активно поле і встановлена ​​галочка Allow export-controlled функціональність… Без цього поля активного Ви не зможете використовувати функції сильного шифрування і VPN відповідно. Якщо це поле не активне, будь ласка, зверніться до Вашої облікової команди з запитом активації.

    Розгортання ASA VPN Load-Balancing кластера

    • Після натискання кнопки Створити маркер, буде створено токен, який ми будемо використовувати для отримання ліцензії на ASAv, скопіюємо його:

    Розгортання ASA VPN Load-Balancing кластера

    • Повторимо кроки C,D,E кожної розгорнутої ASAv.
    • Для того, щоб було простіше копіювати токен, дозволимо тимчасово telnet. Налаштуємо кожну ASA (приклад нижче ілюструє налаштування ASA-1). telnet з outside не працює, якщо дуже треба, змініть security-level на 100 на outside, потім поверніть назад.

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

    • Для реєстрації токена у хмарі Smart-Account необхідно надати доступ в Інтернет для ASA, деталі тут.

    Якщо коротко, то ASA потрібен:

    • доступ по HTTPS до Інтернету;
    • синхронізація часу (коректніше за NTP);
    • прописаний сервер DNS;
      • Заходимо telnet на наші ASA і проводимо налаштування для активації ліцензії через 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>

    • Перевіряємо, що пристрій успішно зареєстрував ліцензію та опції шифрування доступні:

    Розгортання ASA VPN Load-Balancing кластера

    Розгортання ASA VPN Load-Balancing кластера

  4. Налаштовуємо базовий SSL-VPN на кожному шлюзі

    • Далі налаштовуємо доступ через SSH та 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 
    !

    • Для роботи ASDM треба спочатку завантажити його з сайту cisco.com, у моєму випадку це наступний файл:

    Розгортання ASA VPN Load-Balancing кластера

    • Для роботи AnyConnect клієнта треба завантажити на кожну ASA образ для кожної використовуваної десктопної ОС клієнта (планованої до використання Linux/Windows/MAC), потрібен буде файл з Headend Deployment Package у назві:

    Розгортання ASA VPN Load-Balancing кластера

    • Завантажені файли можна викласти, наприклад, на FTP сервер і завантажити на кожну окрему ASA:

    Розгортання ASA VPN Load-Balancing кластера

    • Налаштовуємо ASDM та Self-Signed сертифікат для SSL-VPN (у продуктиві сертифікат рекомендується використовувати довірений). Встановлений FQDN Віртуальної адреси кластера (vpn-demo.ashes.cc), а також кожен FQDN асоційований із зовнішньою адресою кожної ноди кластера повинен дозволятися в зовнішній зоні DNS на IP-адресу інтерфейсу OUTSIDE (або на mapped адресу, якщо використовується прокидання порту udp/443 (DTLS) та tcp/443(TLS)). Детальна інформація щодо вимог до сертифікату вказана в розділі Перевірка сертифіката документації.

    !
    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               

    • Для перевірки роботи ASDM не забувайте вказувати порт, наприклад:

    Розгортання ASA VPN Load-Balancing кластера

    • Проведемо базові налаштування тунелю:
    • Зробимо доступним через тунель корпоративну мережу, а інтернет пустимо безпосередньо (не найбезпечніший метод за відсутності засобів захисту на хості, що підключається, можливе проникнення через заражений хост і виведення корп. даних, опція split-tunnel-policy tunnelall пустить весь трафік хоста у тунель. Проте Split-Tunnel дає можливість розвантажити шлюз VPN і не обробляти трафік Інтернету хоста)
    • Видамо хостам у тунель адреси з підмережі 192.168.20.0/24 (пул з 10 до 30 адрес (для ноди #1)). На кожній ноді кластера VPN пул має бути свій.
    • Проведемо базову аутентифікацію локально створеним користувачем на ASA (Так робити не рекомендується, це найпростіший метод), краще робити аутентифікацію через LDAP/RADIUS, а ще краще прив'язати Багатофакторна автентифікація (MFA), Наприклад 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
    !

    • (ОПЦІОНАЛЬНО): У наведеному вище прикладі ми використовували локального користувача на МСЕ для автентифікації віддалених користувачів, що звичайно, крім як в лабораторії слабо застосовно. Я наведу приклад того, як швидко адаптувати налаштування для автентифікації на RADIUS сервер, для прикладу використаний Движок Cisco Identity Services:

    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 
    !

    Дана інтеграція дала можливість не тільки швидко інтегрувати процедуру аутентифікації з сервісом каталогів AD, але і розрізняти належність комп'ютера до AD, що підключається, розуміти корпоративний цей пристрій або особисте і проводити оцінку стану пристрою, що підключається.

    Розгортання ASA VPN Load-Balancing кластера

    Розгортання ASA VPN Load-Balancing кластера

    • Зробимо налаштування Transparent NAT щоб трафік між клієнтом та ресурсами мережі корпоративної мережі не натувався:

    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

    • (ОПЦІОНАЛЬНО): Щоб випустити наших клієнтів в Інтернет через ASA (при використанні tunnelall опції) з використанням PAT, а також виходити через той самий інтерфейс OUTSIDE, звідки вони з'єднуються потрібно зробити наступні настройки

    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 
    !

    • Вкрай важливо при використанні кластера дати можливість внутрішньої мережі зрозуміти на яку ASA маршрутизувати зворотний трафік до користувачів, для цього необхідно зробити редистрибуцію маршрутів /32 адрес, що видаються клієнтам.
      На даний момент кластер ми ще не налаштовували, але ми вже маємо працюючі VPN шлюзи, до яких можна індивідуально підключитися за FQDN або IP.

    Розгортання ASA VPN Load-Balancing кластера

    Ми бачимо підключеного клієнта у таблиці маршрутизації першої ASA:

    Розгортання ASA VPN Load-Balancing кластера

    Щоб весь наш VPN кластер і вся корпоративна мережа знала маршрут до нашого клієнта, проведемо редистрибуцію префіксу клієнта в протокол динамічної маршрутизації, наприклад 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

    Тепер у нас є маршрут до клієнта з другого шлюзу ASA-2 і користувачі, підключені до різних VPN шлюзів в рамках кластера, можуть, наприклад, спілкуватися через корпоративний софтфон безпосередньо, також як і зворотний трафік від ресурсів, що запитують користувач, буде приходити на потрібний VPN шлюз:

    Розгортання ASA VPN Load-Balancing кластера

  5. Переходимо до налаштування Load-Balancing кластера.

    Адреса 192.168.31.40 буде використовуватися як Virtual IP (VIP - до нього будуть первинно з'єднуватися всі VPN клієнти), з цієї адреси Master кластера буде робити REDIRECT на менш завантажену ноду кластера. Не забудьте прописати прямий та зворотний DNS запис як кожної зовнішньої адреси/FQDN кожної ноди кластера, так 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)#

    • Перевіряємо роботу кластера з двома підключеними клієнтами:

    Розгортання ASA VPN Load-Balancing кластера

    • Зробимо досвід роботи клієнта зручнішим з автоматичним завантаженням профілем AnyConnect через ASDM.

    Розгортання ASA VPN Load-Balancing кластера

    Називаємо профіль зручним чином та асоціюємо нашу групову політику з ним:

    Розгортання ASA VPN Load-Balancing кластера

    Після наступного підключення клієнта цей профіль буде автоматично завантажений і встановлений у AnyConnect клієнт, таким чином залишиться за необхідності підключення просто вибрати його зі списку:

    Розгортання ASA VPN Load-Balancing кластера

    Оскільки, використовуючи ASDM, ми створили цей профіль тільки на одній ASA, не забудьте повторити дії на інших ASA кластерах.

Висновок: Таким чином, ми швидко розгорнули кластер з кількох VPN шлюзів з автоматичним балансуванням навантаження. Додати нові ноди до кластера не важко, отримавши просте горизонтальне масштабування шляхом розгортання нових віртуальних машин ASAv або використання апаратних ASA. Багатофункціональний клієнт AnyConnect може розширити можливості безпечного віддаленого підключення з використанням функції Posture (оцінки стану), що найбільш ефективно застосовується спільно з системою централізованого контролю та обліку доступу Identity Services Engine.

Джерело: habr.com

Додати коментар або відгук