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

В настоящата статия искам да представя стъпка по стъпка ръководство как бързо да се разгърне най-мащабируемата схема в момента. Remote-Access VPN достъп на база AnyConnect и Cisco ASA – VPN Load Balancing Cluster.

Въведение: Много компании по целия свят, поради текущата ситуация с COVID-19, полагат усилия да преместят своите служители на дистанционен режим на работа. Поради масовия преход към дистанционна работа, натискът върху съществуващите VPN шлюзове на компаниите нараства критично и е необходима много бърза възможност за мащабиране. От друга страна, много компании са принудени в бързината да усвояват отначало понятието дистанционна работа.

За да помогне на бизнеса да реализира в кратки срокове удобен, безопасен и мащабируем VPN достъп за служителите, компания Cisco предлага лицензии за многофункционалния SSL-VPN клиент AnyConnect за срок до 13 седмици. Също така може да се вземе 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 сесии. Синхронизацията на сесиите и конфигурациите между възлите на такъв клъстер липсва, но възможно е автоматично балансиране на натоварването на VPN сесиите и осигуряване на отказоустойчивост на VPN връзките, докато остане поне един активен възел в клъстера. Натоварването в клъстера се балансира автоматично в зависимост от натовареността на възлите по брой VPN сесии.

За отказоустойчивост на конкретни възли на клъстера (ако е необходимо) може да се прилага файловер, така активната връзка ще бъде обработвана от основния възел на файловера. Файловерът не е задължително условие за осигуряване на отказоустойчивост в рамките на 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
    • В отвореното прозорче натиснете бутона New Token

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

    • Уверете се, че в отвореното прозорче има активно поле и е поставена отметка Allow export-controlled functionality… Без това активно поле не можете да използвате функции на силно криптиране и съответно VPN. Ако това поле не е активно, моля, свържете се с Вашия екип за подкрепа с искане за активиране.

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

    • След натискване на бутона Create Token, ще бъде създаден токен, който ще използваме за получаване на лицензия за 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 (синхронизиран), # master (несинхронизиран), + избран, - кандидат, ~ конфигуриран
    !
    ! Установяваме конфигурацията на нашата 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 в името на:

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

    • Свалените файлове могат да бъдат поставени, например, на FTP сървър и да се качат на всяка отделна ASA:

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

    • Настройваме ASDM и самоподписан сертификат за 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
    % Пълното домейн име в сертификата ще бъде: vpn-demo.ashes.cc
    Генерирано ли е самоподписан сертификат? [да/не]: да
    vpn-demo-1(config)# 
    !
    vpn-demo-1(config)# sh cry ca certificates 
    Сертификат
    Статус: Наличен
    Сертификатен сериен номер: 4d43725e
    Използване на сертификат: Общо предназначение
    Тип на публичния ключ: RSA (4096 бита)
    Алгоритъм на подписване: SHA256 с RSA криптиране
    Име на издателя: 
    serialNumber=9A439T02F95
    hostname=vpn-demo.ashes.cc
    cn=*.ashes.cc
    ou=ashes-lab
    o=ashes
    c=ru
     Име на предмет:
    serialNumber=9A439T02F95
    hostname=vpn-demo.ashes.cc
    cn=*.ashes.cc
    ou=ashes-lab
    o=ashes
    c=ru
    Дата на валидност: 
    начална дата: 00:16:17 MSK 19 март 2020
    крайна дата: 00:16:17 MSK 17 март 2030
    Съхранение: конфигурация
    Свързани доверителни точки: SELF 
    
    CA Сертификат
    Статус: Наличен
    Сертификатен сериен номер: 0509
    Използване на сертификат: Общо предназначение
    Тип на публичния ключ: RSA (4096 бита)
    Алгоритъм на подписване: SHA1 с RSA криптиране
    Име на издателя: 
    cn=QuoVadis Root CA 2
    o=QuoVadis Limited
    c=BM
    Име на предмет: 
    cn=QuoVadis Root CA 2
    o=QuoVadis Limited
    c=BM
    Дата на валидност: 
    начална дата: 21:27:00 MSK 24 ноември 2006
    крайна дата: 21:23:33 MSK 24 ноември 2031
    Съхранение: конфигурация
    Свързани доверителни точки: _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 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 
    !

    Тази интеграция дава възможност не само бързо да се интегрира процедурата по автентикация със службата за директории 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

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster