В тази статия бих искал да представя стъпка по стъпка инструкция как бързо да се разиграе най-мащабируемата в момента схема Remote-Access VPN за достъп на базата AnyConnect и Cisco ASA – Клъстер за натоварване на VPN.
Въведение: Много компании по целия свят, в светлината на настоящата ситуация с COVID-19, полагат усилия да прехвърлят служителите си на удален режим на работа. Поради масовия преход към дистанционна работа, натоварването на съществуващите VPN шлюзове на компаниите рязко нараства и е необходима много бърза възможност за мащабиране. От друга страна, много компании са принудени в крачка да усвояват понятия, като дистанционна работа.
За да помогне на бизнеса да реализира в кратки срокове удобен, безопасен и мащабируем VPN достъп за служителите, компанията Cisco предлага лицензии за многофункционалния SSL-VPN клиент AnyConnect за срок до 13 седмици. .
.
Подготвил съм стъпка по стъпка инструкция за прост вариант на разгръщане на клъстер за натоварване на 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 клъстера е независима единица по отношение на конфигурационните настройки, всички етапи на конфигурация извършваме индивидуално на всяко отделно устройство.
Логическата топология на предоставения пример:

Първично разгръщане:
Разгръщаме екземпляри ASAv от образите на нужните шаблони (ASAv5/10/30/50).
Назначаваме интерфейсите INSIDE/OUTSIDE на еднакви VLAN (Outside в своя VLAN, INSIDE в своя, но общ в рамките на клъстера, вижте топологията), важно е интерфейсите от същия тип да бъдат в един L2 сегмент.
Лицензи:
- При инсталирането ASAv няма да има никакви лицензи и ще бъде ограничен до производителност от 100 кбит/с.
- За инсталиране на лиценз трябва да генерирате токен в Вашия Smart-Account: -> Smart Software Licensing
- В отворения прозорец след това натиснете бутона New Token

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

- След натискане на бутона Създайте Токен, ще се създаде токен, който ще използваме за получаване на лицензия за ASAv, копираме го:

- Повторете стъпките 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>- Проверяваме, че устройството успешно е регистрирало лиценза и опциите за криптиране са достъпни:


Настройваме базов 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, в моя случай това е следният файл:

- За да работи клиентът AnyConnect, трябва да се изтегли образ за всяка ASA за всяка от използваните десктоп ОС (планирани за използване Linux/Windows/MAC). Необходим е файл с Пакет за разгръщане на главната точка в името:

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

- Конфигуриране на 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, не забравяйте да посочите порта, например:

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


- Ще направим настройка на 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 клъстер и цялата корпоративна мрежа маршрута до нашия клиент, ще направим редистрибуция на клиентския префикс в протокола за динамично маршрутизиране, например 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 шлюз:

Преминаваме към настройка на 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)#- Проверяваме работата на кластера с двама свързани клиенти:

- Ще направим опита на клиента да бъде по-удобен с автоматично изтегляне на профил AnyConnect чрез ASDM.

Назоваваме профила по удобен начин и асоциираме нашата групова политика с него:

След следващото свързване на клиента, този профил ще бъде автоматично изтеглен и инсталиран в клиента AnyConnect, така че при нужда да остане просто да го изберете от списъка:

Тъй като при създаването на този профил чрез ASDM го направихме само на един ASA, не забравяйте да повторите действията на останалите ASA в кластера.
Изход: По този начин бързо разгръщаме кластер от няколко VPN шлюза с автоматично натоварване. Добавянето на нови възли към кластера не е сложно, получавайки лесно хоризонтално мащабиране чрез разгръщане на нови виртуални машини ASAv или използване на хардуерни ASA. Многофункционалният клиент AnyConnect може значително да разшири възможностите за безопасно отдалечено свързване, използвайки функцията Posture (оценка на състоянието), най-ефективно прилагана заедно със системата за централизирано управление и отчет на достъпа Identity Services Engine.
Източник: habr.com


















