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

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

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

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

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

Подготвил съм стъпка по стъпка инструкция за прост вариант на разгръщане на клъстер за натоварване на VPN, като най-мащабируема технология за VPN.

Примерът по-долу ще бъде доста прост от гледна точка на прилаганите алгоритми за удостоверяване и авторизация, но ще бъде добър вариант за бързо стартиране (което в момента много на хората липсва) с възможност за задълбочена адаптация спрямо техните нужди в процеса на разгръщане.

Кратки данни: Технологията на клъстер за натоварване на VPN не е отказоустойчивост и не е функция за клъстеризация в нейното нативно разбиране, с тази технология могат да се обединяват съвсем различни модели 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 клъстер

    • След натискане на бутона Създайте Токен, ще се създаде токен, който ще използваме за получаване на лицензия за 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). Необходим е файл с Пакет за разгръщане на главната точка в името:

    Разгръщане на 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
    Генерирайте самоподписан сертификат? [yes/no]: yes
    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
    Съхранение: config
    Свързани доверителни точки: 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
    Съхранение: config
    Свързани доверителни точки: _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, за да осигурим, че трафикът между клиентите и ресурсите на корпоративната мрежа не се 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