Este important sa mentionam ca Cisco ASA (Adaptive Security Appliance) este cel mai folosit pentru implementarea Cisco Anyconnect Client oferind suport pentru o implementare user friendly marcata de simplitate si eficienta, mai ales prin functia de webdeploy sau head deploy menita sa usureze conectarea chiar si a utilizatorilor atehnici. Anyconnect este un serviciu de remote access vpn ce cuprinde functionalitati multiple si poate fi implementat pe orice sistem. Pentru CIA (Confidentiality, Integrity, Availability) putem folosi SSL sau IPsec.

Asemanarea dintre cele doua este ca Anyconnect (IKEv2 sau SSLVPN) nu foloseste un pre-shared-key sa realizeze autentificarea, ci un certificat. Profilul XML este necesar in ajutarea clientului sa foloseasca IKEv2 fata de default SSL cand se conecteaza la ASA. Diferenta este ca IKEv2 fata de SSL are mai multe optiuni pe partea de securitate a traficului, daca inginerul doreste sa opteze pentru algoritmi de criptare next-gen din motive tehnice sau legale. Astfel, pe partea de securitate este mai bun Anyconnect IKEv2, doar ca exista cateva dezavantaje in functie de locatia clientului. Unii provideri (sau locatii) au implementari care nu avantajeaza traficul IPsec si poate crea probleme.

90 % din utilizatorii Anyconnect folosesc SSL, datorita simplitatii si scalabilitatii acestuia, utilizatorii descarcand clientul si profilul automat daca este necesar. Portul folosit este 443 si nu prezinta probleme la conectare (majoritatea providerilor permitand conexiunile pe portul respectiv). Teoretic, chiar daca IPsec este mai securizat, implementand corect SSLVPN putem obtine o protectie buna, in conformitate cu standardele de securitate universal acceptate.

In acest articol am ales sa va prezint implementarea Anyconnect SSL Client si vom folosi ASDM pentru setarile necesare. Descrierea pasilor:

  1. Descarcam kit-urile Anyconnect pentru Windows, MAC si Linux pentru a le uploada in ASA.
  2. Adaugam ASA la infrastructura PKI a companiei si cream un Certificat de identitate.
  3. Configuram un pool IP pentru a asigna userilor VPN, si vom adauga o regula de NAT Exemption.
  4. Integram ASA cu Active Directory. Acest lucru va permite utilizatorilor sa nu fie nevoiti sa retina un set de credentiale separat. Prin aceasta vor avea posibilitatea sa foloseasca aceleasi credentiale destinate accesului pe calculator, mail sau alte servicii din cadrul companiei.
  5. Configuram DAP si politici de grup pentru controlul accesului.
  6. Configuram profilul de conexiune care va mentiona toate setarile, ajutand utilizatorii sa se conecteze.
  7. In final, vom verifica functionalitatea.
    Diagrama de retea folosita:

1) Urcam imaginea Anyconnect pe ASA

Vom descarca imaginile de aici cautand Anyconnect 4.803, cea mai noua imagine.
Ne intereseaza cele webdeploy pentru a fi urcate pe ASA:

Diferența dintre webdeploy si predeploy este acela ca webdeploy se instaleaza dupa conectarea la serverul vpn, iar predeploy se instaleaza local inainte de conectare. Pentru a descarca imaginile avem nevoie de un service contract obtinut prin achizitionarea de licente. Le-am descarcat si acum le vom urca pe ASA:

Pe ASA dam click pe Configuration -> Remote Access VPN -> Network Client Access -> AnyConnect Client Software -> Add -> Upload -> Browse Local Files -> Selectam pkg -> Upload file -> Astepam incarcarea -> Click OK -> Aplicare setari (Putem vedea comenzile CLI trimise de ASDM catre ASA):

2)Adaugam ASA in infrastructura PKI

Inainte de a genera certificatul trebuie sa configuram NTP pe ASA pentru a asigura ca intreaga infrastructura are acelasi timp si ca firewall-ul nu va considera ca expirat certificatul inainte de data prestabilita din cauza unei erori de timp. Astfel, ASA va valida certificatele cu precizie.
Pentru configurare NTP o sa dam click pe Device Setup -> System Time -> NTP -> Add -> Completam campurile. Intr-o retea de productie este bine sa indreptam catre un server NTP intern, care la randul lui se indreapta catre un server NTP public. Sa vedem:

Acum vom instala Root CA-ul folosit de ASA

Vom intra la Remote Access VPN -> Certificate Management -> CA Certificate -> Completam manual certificatul in format PEM, il instalam direct dintr-un fisier sau urcam in format SCEP permitand ASA-ului sa isi preia propriul certificat -> In cazul nostru luam certificatul dintr-un fisier -> Browse -> Install:

Comanda arata asa:

Acum trebuie sa generam CSR-ul si sa instalam certificatul primit inapoi de la CA.
Intram la Identity Certificates -> Add -> Completam (Trustpoint, Certificate subject DN) -> Generam o pereche noua de chei -> Folosim modulus 2048 si introducem un nume pentru perechea de chei -> Generate now -> Selectam perechea de chei -> Dam click pe advanced pentru a specifica FQDN-ul -> Introducem FQDN-ul -> Specificam Enrollment Mode -> Lasam selectat pe manual -> OK -> Add certificate -> Send -> Salvam CSR-ul intr-un fisier local:

Acum cerem un certificat folosind CSR-ul generat conform metodelor aflate la indemana fiecaruia (noi vom folosi aici Microsoft Active Directory Certificate Services) -> Advanced certificate request -> Copiem csr-ul la Saved Request folosind template -> Submit -> Download certificate ca Base64 encoded:

Ne intoarcem la ASDM si dam click pe install la CSR-ul aflat in pending -> Si din nou, putem copia continutul certificatului, dar dam click pe Browse selectand certificatul -> Install Certificate -> Send:

Urmatorul lucru pe care il vom face este sa aplicam certificatul pe interfata OUTSIDE: Dam click pe Advanced -> SSL Settings -> Selectam versiunea minima de SSL la TLS V1.2 -> Alegem o varianta de grup DH mai securizata de ex Group 14 -> Pe interfaaa OUTSIDE editam si selectam la Primary Enrolled Certificate pe acela creat de noi -> Ok -> Apply -> Send:

3) IP pool și NAT Exempt

In aceasta sectiune o sa va arat cum setam un pool de adrese IP pe care le vom asigna utilizatorilor ce se conecteaza prin VPN si cum facem exceptie in regulile de NAT pentru traficul generat de acestia catre destinatiile companiei. Range-ul ales va fi in conformitate cu numarul de useri suportat de licenta Anyconnect achizitionat. O lista a tipurilor de licente o gasiti aici.
Pentru IP pool intram la Configuration -> Remote Access VPN -> Network (Client) Access -> Address Assignment -> Address Pools -> Add -> Completam Numele, range-ul, masca si Ok -> Apply:

SNAT este folosit pentru a masca ip-ul sursa al pachetului IP (de obicei o adresa ip privata) cu ip-ul public de pe interfata WAN/OUTSIDE. NAT-Exempt sau no-NAT este o regula ce face exceptie de la NAT pentru unul sau mai multe subneturi atunci cand au o anumita destinatie.
Pentru no-NAT pasii sunt acestia: Configuration -> Firewall -> NAT Rules -> Add –> Modificam interfata sursa cu Inside –> Interfata destinatie cu Outside -> Adresa sursa o lasam any -> Adresa destinatie selectam sa fie pool-ul VPN creat -> La Action: Translated Packet lasam totul default, deoarece nu dorim sa fie modificat nimic cu privire la ip-ul sursa sau destinatie -> La optiuni dezactivam proxy-arp si activam lookup route table -> Ok -> Apply:

4) Integrare ASA cu AD

Scopul este acela de a folosi userii de domeniu din cadrul companiei pentru autentificare si autorizare in Anyconnect. Desi putem configura useri locali nu este scalabil intr-o organizatie cu multi utilizatori.
Configuration -> Remote Access VPN -> AAA/Local Users -> AAA Server Groups -> Add -> Completam numele grupului -> Protocol LDAP -> Realm-id 0 -> Restul ramane default:

Selectam grupul creat si adaugam un server in cadrul acestuia. Add -> Definim interfata sursa folosita de ASA pentru a ajunge la serverul LDAP -> completam ip-ul AD-ului (de obicei intr-un mediu de productie este folosit un FQDN) -> Lasam nebifat LDAP over SSL, deoarece in cazul meu nu am SSL configurat pe LDAP -> La Server Type selectam Microsoft -> La Base DN trecem domeniul in care gasim utilizatorii (dc=domeniu,dc=ro/com/orc etc, dc venind de la domain controller) -> La Scope trecem ”All levels beneath the Base DN”, adica grupurile de utilizatori din domeniu (imaginați-va domeniul ca fiind un folder root, iar grupurile fiind documente in acest folder. Prin aceasta optiune specificam ca dorim ca ASA sa primeasca informatii din domeniu) -> La Login DN specificăm contul de administrator (putem crea unul special pentru Anyconnect sub forma cn=common_name, cn=organisational_unit, dc=domain_controller, dc=domain_extension_category) -> Login Password pentru contul de administrator -> Ok -> Apply:

Si acum trebuie sa testam pentru a vedea daca integrarea functioneaza corespunzator:

Daca arata asa inseamna ca este OK:

5) Ierarhia politicilor și Dynamic Access Policy

In aceasta sectiune o sa vorbim despre ierarhia modului in care setarile sunt impinse catre clientul vpn si configurarea politicilor de access dinamice, unul din modurile in care putem specifica ce setari un user va primi cand se logheaza. Cum stie ASA ce setari sa impinga catre user? Printr-un VPN Connection Profile, iar in acest profil ordinea prioritatii este aceasta: DAP (1), User Profile Policy (2) sau Group Policy (3).
Vpn Connection Profile este selctat de user, iar in functie de ce setari sunt definite in profile acestea vor fi aplicate. Un DAP foloseste expresii IF/AND pentru a specifica criterii de care se va tine cont cand userul se logheaza si gaseste un match. User Profile Policy sunt setari aplicate doar pentru un set specific de utilizatori. Un Group Policy este aplicat numai daca este specificat in profilul vpn si poate fi definit in User Profile, Connection Profile sau daca nu este definit nicaieri va fi luat in considerare cel default:

Configurarea DAP se face in felul urmator: Configuration -> Remote Access VPN -> Dynamic Access Policy (Aici avem deja o regula default aplicata la toti utlizatorii in cazul in care nu configuram reguli) -> Add:

Vom face match pe useri tinand cont de grupul de AD din care fac parte si sa folosim un ACL pentru a permite sau bloca traficul catre destinatiile companiei. Completam numele regulei la Policy Name -> ACL Priority, in cazul nostru 0, deoarece va fi singura regula pe langa cea default si dorim sa aiba prioritate -> La Selection Criteria definim atribute AAA dupa care vor fi identificati userii carora li se aplica regula -> Putem mentiona sa aiba toate, oricare sau niciunul dintre atribute -> Add -> Aici avem cateva atribute cum ar fi username-ul, adresa ip, profilul de conexiune etc. dar pe noi ne intereseaza atributele LDAP -> memberOf (adica membru din grupul specificat) -> scanam grupurile existente si selectăm pe acela de care sa tinem cont in regula -> completam la memberOf -> in cazul nostru nu o sa punem egal, ci diferit !=, deoarece dorim sa facem exceptie pentru administratorii bazei de date -> OK -> Putem specifica Endpoint attributes, dar vom avea nevoie de hostscan (de instalat la client de aici) -> Definim un ACL la Network ACL Filters -> Manage -> Add ACL/ACE -> Ok -> Selectam ACL-ul si il adaugam apoi Ok și Apply:

Acestea ar fi atributele endpoint, dar pentru ca nu avem hostscan nu le vom configura:

Continuam:

6) Group policy

Este un alt mod in care setarile sunt aplicate atunci cand un user se conecteaza la VPN. Acesta poate fi specificat in User Policy, Connection Policy sau Default. Pentru a configura un User Policy trebuie sa intram la Remote Access VPN -> AAA/Local Users -> Local Users -> Add -> O sa ne uitam la un exemplu de utilizator:

Acestea sunt toate atributele pe care le putem specifica:

De retinut ca putem configura un Group Policy si prin politici si atribute LDAP folosind LDAP Attribute map, dar nu vom intra in detalii in acest articol.
Configurarea unui Group Policy se face in felul urmator: Configuration -> Remote Access VPN -> Network (Client) Access -> Group Policies -> Add:

Avem posibilitatea la General sa completam un nume custom si sa editam un Banner care sa apara la conectare. La More Options putem specifica intervalul orar in care userul se poate conecta, protocoalele de tunelare permise, timpul maxim de conectare, numarul de conexiuni simultane etc. La Servers putem specifica serverele DNS, iar la Advanced vom adauga o politica de Split Tunnel. Facem un Standard ACL pentru a specifica rutele ce vor fi anuntate clientilor prin VPN si-l selectam la Network List. Sa vedem:

De retinut este faptul ca acolo unde este bifat Inherit, ASA se uita la urmatoarea politica conform ordinii prioritatilor discutate la punctul 5. Unele lucruri nu le-am configurat în group policy, deoarece le vom configura in Connection Profile, punctul 7.

7) Connection Profile

Tot ce am configurat panăa acum vom lega acum la un loc intr-un profil destinat conexiunii VPN. Pentru a face acest lucru intram la AnyConnect Connection Profile -> Add:

Putem crea mai multe profile destinat pentru cate un departament din cadrul companiei, dar in cazul de fata o sa configuram doar unul. Vom completa numele profilului -> Putem specifica un alias in cadrul Aliases reprezentand numele profilului pe care il va observa clientul cand se conecteaza -> Metoda de conectare va fi AAA -> La server group specificam grupul creat pentru LDAP -> Specificam pool-ul IP -> Selectam politica de grup configurata si va aparea automat ce a fost deja configurat cum ar fi un server DNS -> OK -> Activam SSL -> Apply:

Alte optiuni existente cum ar fi Password Management, Secondary Authentication sau definirea unui server de Accounting pot fi configurate la Advanced, dar in cazul de fata le vom lasa default.

Activam SSL si aplicam configuratia:

Doream sa stiti ca ASDM contine si un Wizard pentru Anyconnect, dar in felul acesta putem sti componentele configuratiei si cum le aducem la un loc pentru functionalitatea VPN AnyConnect Client. Wizardul poate fi accesat in felul următor:

Iar pasii sunt aceeași numai că sunt prezentați într-un format Next/Next pentru cei incepatori in meniul ASDM.
Acum sa testam daca functioneaza totul conform asteptarilor.

8) Verificare Anyconnect

Accesam browserul pentru a descarca clientul introducand FQDN-ul ASA si selectand profilul creat, iar dupa ce introducem userul si parola descarcam clientul. Cu ajutorul sesiunii SSL sistemul de operare al clientului este detectat automat.

Avem si instructiuni de instalare in josul paginii utile si pentru noi acum:

Dupa ce finalizam instalarea o sa ne conectam. Dupa cum se poate observa, deoarece am preluat clientul prin webdeploy si profilul este populat automat.
Dupa cum se poate observa in prima imaginea din dreapta, una din problemele cele mai des intalnite este de rezolvare a numelui DNS. Posibile cauze:
-Coincidenta coincidentelor, am o problema cu dns-ul configurat local. Pot incerca altul.
-Daca FQDN-ul l-am aplicat recent in serverul dns al companiei este posibil sa nu se fi propagat inca, mai astept sau fac un flush dns.
Dupa ce rezolvam problema ne conectam.

Putem deschide clientul si sa ne uitam la cateva detalii (dam click pe setari).
Putem observa detalii precum adresa ip primita, serverul VPN (ASA), durata sesiunii si tunnel mode Split Include (sugerand prezenta unui split tunnel). La Route Details vedem rutele primite conform politicii de Split Tunnel, dar si serverul dns ca un /32, deoarece este specificat explicit in Split Tunnel. Non-Secured Routes are any sugerand ca orice alt trafic se duce prin reteaua locala a clientului.

Cu ipconfig vedem adresarea VPN:
Ping in reteaua interna a companiei functioneaza, ajungand cum ne asteptam prin VPN.

Din ASDM putem analiza la Monitoring -> VPN -> Filter by All remote Access:
A doua sesiune este cea prin care am descarcat clientul de pe ASA. Pe noi ne intereseaza prima. Dupa cum se vede la Protocol Encryption apare AnyConnect ca proprietar al tunelului SSL.

Si daca dam detalii:
La Other avem informatii cu privire la ID-ul tunelului, ip-ul public al clientului, porturile folosite si alte detalii importante in troubleshooting. La ACL putem observa restrictiile si permisiunile guvernate de DAP.
Mai exista o comanda foarte utila in CLI care ne ofera rapid toate informatiile necesare, cum ar fi group policy folosit, connection profile, protocoalele de criptare, adresa ip asignata etc:

Asta a fost tot, sper ca vi s-a parut interesant acest articol si sa fie util atunci cand doriti sa aveti o referinta sau configurati pe viitor la dvs.

Articol scris de Bogdan Curduban – Network Engineer