Разгортванне 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/ -> Разумнае ліцэнзаванне праграмнага забеспячэння
    • У якое адкрылася акне пасля націсніце кнопку Новы токен

    Разгортванне 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 (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

Дадаць каментар