Accesați 2FA (Autentificare dublă pentru ASA SSL VPN)

Necesitatea de a oferi acces de la distanță la medii corporative devine din ce în ce mai frecventă, indiferent dacă sunt utilizatori proprii sau parteneri care au nevoie de acces la anumite servere din organizația dumneavoastră.

Pentru aceste scopuri, majoritatea companiilor folosesc tehnologia VPN, recunoscută ca o modalitate de acces bine securizată la resursele locale ale organizației.

Compania mea nu a fost o excepție și utilizăm, la fel ca multe altele, această tehnologie. Și, ca mulți alții, folosim ca poartă de acces de la distanță Cisco ASA 55xx.

Odată cu creșterea numărului de utilizatori de la distanță, apare necesitatea de a simplifica procedura de emitere a credentialelor. Dar, în același timp, trebuie să facem acest lucru fără a compromite securitatea.

Pentru noi, am găsit o soluție în aplicarea autentificării în două etape pentru conexiunea prin Cisco SSL VPN, utilizând parole de unică folosință. Și această publicație va explica cum să organizați o astfel de soluție cu un minim de consum de timp și cu costuri zero pentru software-ul necesar (sub condiția că Cisco ASA este deja în infrastructura dumneavoastră).

Piața este plină de soluții standard pentru generarea parolelor de unică folosință, oferind o mulțime de opțiuni pentru obținerea acestora, fie că este vorba de trimiterea parolei prin SMS sau utilizarea token-urilor, fie ele hardware sau software (de exemplu, pe telefonul mobil). Însă dorința de economisire și de a salva bani pentru angajatorul meu, în condițiile actualei crize, m-a determinat să găsesc o modalitate gratuită de a implementa un serviciu pentru generarea parolelor de unică folosință. Care, având în vedere gratuitatea sa, se compară bine cu soluțiile comerciale (este de menționat că acest produs are și o versiune comercială, dar am convenit că cheltuielile, în bani, vor fi nule).

Așadar, avem nevoie de:

— O imagine Linux cu un set de instrumente încorporat — multiOTP, FreeRADIUS și nginx, pentru accesul la server prin web (http://download.multiotp.net/ — am folosit o imagine gata făcută pentru VMware)
— Un server Active Directory
— Cisco ASA, (eu, pentru comoditate, folosesc ASDM)
— Orice token software care suportă mecanismul TOTP (Eu, de exemplu, folosesc Google Authenticator, dar FreeOTP este de asemenea potrivit)

Nu voi detalia procesul de desfășurare a imaginii. La final veți obține Debian Linux cu multiOTP și FreeRADIUS deja instalate, configurate pentru a funcționa împreună și o interfață web pentru administrarea OTP.

Pasul 1. Inițiem sistemul și îl configurăm pentru rețeaua noastră
Din start, sistemul vine cu acreditivele root root. Cred că toată lumea a realizat că ar fi bine să schimbe parola utilizatorului root după prima autentificare. De asemenea, este necesar să modificăm setările rețelei (din start aceasta este '192.168.1.44' cu gateway '192.168.1.1'). După aceasta, putem reporni sistemul.

În Active Directory vom crea un utilizator otp, cu parola MySuperPassword.

Pasul 2. Configurăm conexiunea și importăm utilizatorii din Active Directory
Pentru aceasta, avem nevoie de acces la consolă și, în mod direct, de fișierul multiotp.php, folosind care vom configura parametrii de conectare la Active Directory.

Trecem în directorul /usr/local/bin/multiotp/ și executăm următoarele comenzi pe rând:

.\/multiotp.php -config default-request-prefix-pin=0

Definirea necesității unui PIN suplimentar (permanent) la introducerea PIN-ului unic (0 sau 1)

.\/multiotp.php -config default-request-ldap-pwd=0

Definirea necesității introducerii parolei de domeniu la introducerea PIN-ului unic (0 sau 1)

.\/multiotp.php -config ldap-server-type=1

Definirea tipului de server LDAP (0 = server LDAP obișnuit, în cazul nostru 1 = Active Directory)

.\/multiotp.php -config ldap-cn-identifier="sAMAccountName"

Definirea formatului în care se va reprezenta numele utilizatorului (această valoare va afișa doar numele, fără domeniu)

.\/multiotp.php -config ldap-group-cn-identifier="sAMAccountName"

Același lucru, dar pentru grup

.\/multiotp.php -config ldap-group-attribute="memberOf"

Definirea metodei de determinare a apartenenței utilizatorului la grup

.\/multiotp.php -config ldap-ssl=1

Folosirea unei conexiuni securizate la serverul LDAP (cu siguranță — da!)

.\/multiotp.php -config ldap-port=636

Portul pentru conectarea la serverul LDAP

.\/multiotp.php -config ldap-domain-controllers=adSRV.domain.local

Adresa serverului dumneavoastră Active Directory

.\/multiotp.php -config ldap-base-dn="CN=Users,DC=domain,DC=local"

Definirea punctului de unde să începem căutarea utilizatorilor în domeniu

.\/multiotp.php -config ldap-bind-dn="otp@domain.local"

Definirea utilizatorului care are drepturi de căutare în Active Directory

.\/multiotp.php -config ldap-server-password="MySuperPassword"

Definirea parolei utilizatorului pentru conectarea la Active Directory

.\/multiotp.php -config ldap-network-timeout=10

Stabilirea timeout-ului pentru conectarea la Active Directory

.\/multiotp.php -config ldap-time-limit=30

Stabilirea limitei de timp pentru operațiunea de import a utilizatorilor

.\/multiotp.php -config ldap-activated=1

Activăm configurația de conectare la Active Directory

.\/multiotp.php -debug -display-log -ldap-users-sync

Importăm utilizatorii din Active Directory

Pasul 3. Generăm codul QR pentru token
Aici totul este extrem de simplu. Deschidem interfața web a serverului OTP în browser, ne autentificăm (nu uitați să schimbați parola pentru admin, setată implicit!), și apăsăm pe butonul „Print”:

Accesați 2FA (Autentificare dublă pentru ASA SSL VPN)
Rezultatul acestei acțiuni va fi o pagină care conține două coduri QR. Putem ignora primul dintre ele (în ciuda mesajului atrăgător Google Authenticator \/ Authenticator \/ 2 Steps Authenticator), și, din nou, putem scana al doilea cod în tokenul software de pe telefon:

Accesați 2FA (Autentificare dublă pentru ASA SSL VPN)
(da, am stricat intenționat codul QR pentru a-l face ilizibil).

După ce ați finalizat aceste acțiuni, aplicația dumneavoastră va genera un cod de șase cifre la fiecare treizeci de secunde.

Pentru siguranță, putem efectua o verificare, în aceeași interfață:

Accesați 2FA (Autentificare dublă pentru ASA SSL VPN)
Introducând numele utilizatorului și codul unic din aplicația de pe telefon. Am primit un răspuns pozitiv? Atunci continuăm.

Pasul 4. Finalizăm și testăm funcționarea FreeRADIUS
Așa cum am menționat mai sus — multiOTP este deja configurat pentru a funcționa cu FreeRADIUS, rămâne să facem teste și să introducem în fișierul de configurare FreeRADIUS informațiile despre gateway-ul nostru VPN.

Ne întoarcem la consola serverului, în directorul /usr/local/bin/multiotp/, introducem:

.\/multiotp.php -config debug=1\n.\/multiotp.php -config display-log=1

Activând astfel o jurnalizare mai detaliată.

În fișierul de configurare al clienților FreeRADIUS (/etc/freeradius/clinets.conf) comentăm toate liniile referitoare la localhost și adăugăm două înregistrări:

client localhost {\n        ipaddr = 127.0.0.1\n        secret          = testing321\n        require_message_authenticator = no\n}

— pentru test

client 192.168.1.254\/32 {\n        shortname =     CiscoASA\n        secret =        ConnectToRADIUSSecret\n}

— pentru gateway-ul nostru VPN.

Repornim FreeRADIUS și încercăm să ne autorizăm:

radtest username 100110 localhost 1812 testing321

unde username = numele utilizatorului, 100110 = parola, oferită de aplicația de pe telefon, localhost = adresa serverului RADIUS, 1812 — portul serverului RADIUS, testing321 — parola clientului serverului RADIUS (pe care am specificat-o în config).

Rezultatul acestei comenzi va fi un output de aproximativ următorul conținut:

Sending Access-Request of id 44 to 127.0.0.1 port 1812\n        User-Name = "username"\n        User-Password = "100110"\n        NAS-IP-Address = 127.0.1.1\n        NAS-Port = 1812\n        Message-Authenticator = 0x00000000000000000000000000000000\nrad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=44, length=20

Acum trebuie să ne asigurăm că utilizatorul a trecut cu succes de autentificare. Pentru aceasta, vom verifica logul multiotp:

tail /var/log/multiotp/multiotp.log

Și dacă ultima înregistrare de acolo va fi:

2016-09-01 08:58:17     notice  username  User    OK: Utilizatorul username s-a autentificat cu succes din 127.0.0.1
2016-09-01 08:58:17     debug           Debug   Debug: 0 OK: Token acceptat din 127.0.0.1

Atunci totul a decurs cu succes și putem continua cu

Pasul 5. Configurarea Cisco ASA
Să presupunem că avem deja un grup și politici configurate pentru accesul prin SLL VPN, setate în legătură cu Active Directory, și trebuie să adăugăm autentificarea cu doi factori pentru acest profil.

1. Adăugăm un nou grup servere AAA:

Accesați 2FA (Autentificare dublă pentru ASA SSL VPN)
2. Adăugăm serverul nostru multiOTP în grup:

Accesați 2FA (Autentificare dublă pentru ASA SSL VPN)
3. Corectăm profilul de conectare, stabilind ca server principal de autentificare grupul de servere Active Directory:

Accesați 2FA (Autentificare dublă pentru ASA SSL VPN)
4. Pe tab-ul Advanced -> Authentification de asemenea, alegem grupul de servere Active Directory:

Accesați 2FA (Autentificare dublă pentru ASA SSL VPN)
5. Pe tab-ul Advanced -> Secondary pentru autentificare alegem grupul de servere creat, în care este inclus serverul multiOTP. Menționăm că Session username este derivate din grupul principal de servere AAA:

Accesați 2FA (Autentificare dublă pentru ASA SSL VPN)
Aplicăm setările și

Pasul 6, ultimul
Verificăm dacă autentificarea cu doi factori funcționează pentru SLL VPN:

Accesați 2FA (Autentificare dublă pentru ASA SSL VPN)
Voila! Atunci când ne conectăm prin Cisco AnyConnect VPN Client, va fi solicitată și a doua parolă, unică.

Sper că acest articol va ajuta pe cineva și că va oferi cuiva inspirație despre cum poate fi utilizat acest gratuit server OTP pentru alte sarcini. Vă rugăm să împărtășiți în comentarii dacă doriți.

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster