La necessità di fornire accesso remoto all'ambiente aziendale sta diventando sempre più frequente, sia per i propri utenti che per i partner che necessitano di accesso a determinati server nella vostra organizzazione.
A tal fine, la maggior parte delle aziende utilizza la tecnologia VPN, che si è dimostrata un modo affidabile e sicuro per fornire accesso alle risorse locali dell'organizzazione.
La mia azienda non fa eccezione, e come molte altre, utilizziamo questa tecnologia. E, come molte altre, utilizziamo, come gateway di accesso remoto - Cisco ASA 55xx.
Con l'aumento del numero di utenti remoti, sorge la necessità di semplificare la procedura di assegnazione delle credenziali. Ma allo stesso tempo è necessario farlo senza compromettere la sicurezza.
Per noi, abbiamo trovato la soluzione nell'applicazione dell'autenticazione a due fattori per la connessione tramite Cisco SSL, VPN, utilizzando password monouso. E questa pubblicazione spiegherà come organizzare una simile soluzione con un minimo dispendio di tempo e con zero costi per il software necessario (a condizione che Cisco ASA sia già presente nella vostra infrastruttura).
Il mercato è ricco di soluzioni pronte per la generazione di password monouso, offrendo una miriade di opzioni per la loro ricezione, che si tratti dell'invio della password tramite SMS o dell'uso di token, sia hardware che software (ad esempio, sul telefonino). Ma la voglia di risparmiare e di preservare fondi per il proprio datore di lavoro, in queste condizioni di crisi, mi hanno spinto a trovare un modo gratuito per implementare un servizio di generazione di password monouso. Che, pur essendo gratuito, non è molto inferiore alle soluzioni commerciali (è giusto precisare che questo prodotto ha anche una versione commerciale, ma ci siamo già accordati che le spese monetarie saranno nulle).
Quindi, avremo bisogno di:
— Un'immagine Linux con un insieme di strumenti incorporati — multiOTP, FreeRADIUS e nginx, per accedere al server tramite web (http://download.multiotp.net/ — ho utilizzato un'immagine pronta per VMware)
— Un server Active Directory
— Il Cisco ASA stesso (per comodità, utilizzo ASDM)
— Qualsiasi token software che supporta il meccanismo TOTP (Io, ad esempio, utilizzo Google Authenticator, ma va bene anche FreeOTP)
Non entrerò nei dettagli dello sviluppo dell'immagine. Alla fine otterrete Debian Linux con multiOTP e FreeRADIUS già installati, configurati per lavorare insieme e un'interfaccia web per l'amministrazione dell'OTP.
Passo 1. Iniziamo il sistema e configuriamo la rete
Di default, il sistema viene fornito con le credenziali root root. Penso che tutti abbiano intuito che sarebbe opportuno cambiare la password dell'utente root dopo il primo accesso. È anche necessario modificare le impostazioni di rete (il default è ‘192.168.1.44’ con gateway ‘192.168.1.1’). Dopodiché potete riavviare il sistema.
In Active Directory creiamo un utente otp, con la password MySuperPassword.
Passo 2. Configuriamo la connessione e importiamo gli utenti da Active Directory
Per questo abbiamo bisogno di accesso alla console e, direttamente, al file multiotp.php, utilizzando il quale configureremo le impostazioni di connessione a Active Directory.
Accediamo alla directory /usr/local/bin/multiotp/ e quindi eseguiamo i seguenti comandi:
.\/multiotp.php -config default-request-prefix-pin=0Stabilisce se è necessario un PIN aggiuntivo (permanente) durante l'inserimento del PIN monouso (0 o 1)
.\/multiotp.php -config default-request-ldap-pwd=0Stabilisce se è richiesta l'immissione della password di dominio durante l'inserimento del PIN monouso (0 o 1)
.\/multiotp.php -config ldap-server-type=1Specifica il tipo di server LDAP (0 = server LDAP normale, nel nostro caso 1 = Active Directory)
.\/multiotp.php -config ldap-cn-identifier="sAMAccountName"Specifica in quale formato rappresentare il nome utente (questo valore restituirà solo il nome, senza dominio)
.\/multiotp.php -config ldap-group-cn-identifier="sAMAccountName"Stessa cosa, ma per il gruppo
.\/multiotp.php -config ldap-group-attribute="memberOf"Specifica il metodo per determinare l'appartenenza dell'utente al gruppo
.\/multiotp.php -config ldap-ssl=1Utilizzare una connessione sicura al server LDAP (ovviamente — sì!)
.\/multiotp.php -config ldap-port=636Porta per la connessione al server LDAP
.\/multiotp.php -config ldap-domain-controllers=adSRV.domain.localIndirizzo del vostro server Active Directory
.\/multiotp.php -config ldap-base-dn="CN=Users,DC=domain,DC=local"Specifichiamo da dove iniziare la ricerca degli utenti nel dominio
.\/multiotp.php -config ldap-bind-dn="otp@domain.local"Specifichiamo l'utente che ha i diritti di ricerca in Active Directory
.\/multiotp.php -config ldap-server-password="MySuperPassword"Specifichiamo la password dell'utente per connettersi a Active Directory
.\/multiotp.php -config ldap-network-timeout=10Impostiamo il timeout per la connessione a Active Directory
.\/multiotp.php -config ldap-time-limit=30Impostiamo il limite di tempo per l'operazione di importazione degli utenti
.\/multiotp.php -config ldap-activated=1Attiviamo la configurazione della connessione a Active Directory
.\/multiotp.php -debug -display-log -ldap-users-syncImportiamo gli utenti da Active Directory
Passo 3. Generiamo il QR-code per il token
Qui è tutto molto semplice. Apriamo l'interfaccia web del server OTP nel browser, accediamo (non dimentichiamo di cambiare la password per l'amministratore, impostata di default!), e clicchiamo sul pulsante «Stampa»:

Il risultato di questa azione sarà una pagina contenente due QR-code. Ignoriamo il primo di essi (nonostante l'allettante etichetta Google Authenticator / Authenticator / 2 Steps Authenticator), e di nuovo scansioniamo il secondo codice nel token software sul telefono:

(sì, ho intenzionalmente rovinato il QR-code per renderlo illeggibile).
Dopo aver eseguito queste operazioni, nell'applicazione, ogni trenta secondi, inizierà a generarsi una password di sei cifre.
Per maggiore sicurezza, possiamo effettuare un controllo, nella stessa interfaccia:

Inserendo il nome utente e la password usa e getta dall'app sul telefono. Abbiamo ricevuto una risposta positiva? Allora procediamo oltre.
Passo 4. Configuriamo e testiamo il funzionamento di FreeRADIUS
Come ho menzionato sopra, multiOTP è già configurato per lavorare con FreeRADIUS, resta solo da condurre dei test e inserire nel file di configurazione di FreeRADIUS le informazioni sul nostro gateway VPN.
Torniamo alla console del server, nella directory /usr/local/bin/multiotp/, digitiamo:
.\/multiotp.php -config debug=1\n.\/multiotp.php -config display-log=1Attivando in tal modo un logging più dettagliato.
Nel file di configurazione dei client FreeRADIUS (/etc/freeradius/clinets.conf) commentiamo tutte le righe relative a localhost e aggiungiamo due voci:
client localhost {\n ipaddr = 127.0.0.1\n secret = testing321\n require_message_authenticator = no\n}— per il test
client 192.168.1.254\/32 {\n shortname = CiscoASA\n secret = ConnectToRADIUSSecret\n}— per il nostro gateway VPN.
Riavviamo FreeRADIUS e proviamo ad autenticarsi:
radtest username 100110 localhost 1812 testing321dove username = nome utente, 100110 = password, fornita dall'app sul telefono, localhost = indirizzo del server RADIUS, 1812 — porta del server RADIUS, testing321 — password del client del server RADIUS (che abbiamo indicato nel config).
Il risultato di questo comando sarà un output di circa questo contenuto:
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=20Ora dobbiamo assicurarci che l'utente abbia completato con successo l'autenticazione. Per fare ciò, daremo un'occhiata al log di multiotp:
tail /var/log/multiotp/multiotp.logSe l'ultima voce lì sarà:
2016-09-01 08:58:17 notice username Utente OK: L'utente username ha effettuato correttamente il login da 127.0.0.1
2016-09-01 08:58:17 debug Debug Debug: 0 OK: Token accettato da 127.0.0.1Allora tutto è andato a buon fine e possiamo procedere con
Passo 5. Configurazione di Cisco ASA
Poniamo che abbiamo già un gruppo configurato e politiche per l'accesso tramite SLL VPN, impostate in associazione con Active Directory, e dobbiamo aggiungere l'autenticazione a due fattori per questo profilo.
1. Aggiungiamo un nuovo gruppo server AAA:

2. Aggiungiamo al gruppo il nostro server multiOTP:

3. Modifichiamo il profilo di connessione, impostando come server di autenticazione principale il gruppo di server di Active Directory:

4. Nella scheda Avanzate -> Autenticazione selezioniamo anche il gruppo di server di Active Directory:

5. Nella scheda Avanzate -> Secondaria nell'autenticazione selezioniamo il gruppo di server creato, in cui è registrato il server multiOTP. Si noti che il Session username è ereditato dal gruppo primario di server AAA:

Applichiamo le impostazioni e
Passo 6, l'ultimo
Verifichiamo se l'autenticazione a due fattori funziona per SLL VPN:

Ecco! Quando ci si connette tramite Cisco AnyConnect VPN Client verrà richiesta anche la seconda password, quella usa e getta.
Spero che questo articolo possa essere utile a qualcuno e che dia spunti di riflessione su come utilizzare questo gratuito server OTP, per altri scopi. Condividete nei commenti se avete voglia.
Fonte: habr.com
