pfSense e la 2FA
Inutile dire che l'autenticazione basata solo su username e password è sempre più insicura, da una parte gli utenti si ostinano ad utilizzare password insicure dall'altra i metodi per carpire credenziali sono sempre più avanzati. A tutto questo si unisce il fatto che tutte le credenziali rubate finiscono prima o poi in vendita sul dark web in veri e propri ecommerce.
Per migliorare la situazione la cosa più semplice è ricorrere all'autenticazione a due o più fattori.
Avevamo già trattato l'argomento nell'articolo One-time password ed autenticazione forte in pfSense, oggi torneremo sull'argomento per vedere come sia possibile sfruttare l'app Google Authenticator per gestire la 2FA in pfSense per l'accesso all'interfaccia web di amministrazione e/o tutti i servizi per cui è richiesta un autenticazione.
Identificazione ed Autenticazione
Prima di cominciare occorre chiarire alcuni concetti di base legati all'accesso sicuro a sistemi elettronici.
L'identità di un utente remoto è generalmente verificata attraverso due funzionalità di sicurezza principali: l'identificazione e l'autenticazione.
L'identificazione è basata tipicamente su una username mentre per l'autenticazione abbiamo essenzialmente su tre fattori:
- Una cosa che conosci, per esempio una password o il PIN;
- Una cosa che hai, come un telefono cellulare, una carta di credito o un oggetto fisico come un token;
- Una cosa che sei, come l'impronta digitale, il timbro vocale, la retina o l'iride, o altre caratteristiche di riconoscimento attraverso caratteristiche uniche del corpo umano (biometria).
Come fare ad ottenere un sistema di sicurezza ad autenticazione forte?
Il modo più semplice è unire due o più fattori ed ottenere così un metodo di autenticazione a n fattori.
Anche in pfSense possiamo configurare un sistema di autenticazione a due fattori utilizzando freeradius come sistema di identificazione ed autenticazione e un app per smartphone come generatore di One-Time Password.
FreeRadius
Per prima cosa installiamo FreeRadius tramite il Package Manager
System > Package Manager > Available Packages > FreeRadius3
Terminata l'installazione procediamo con la configurazione accedendo a
Services > Freeradius > Interfaces e cliccando su Add
Compiliamo i campi come segue
Interface IP Adressess: 127.0.0.1
Port: 1812
Interface Type: Authentication
IP Version: IPv4
Description: Authentication
Clicchiamo su Save
Ora definiamo il client che dovrà effettuare richieste al radius, accediamo al tab NAS / Clients e clicchiamo su Add
Nella sezione General Configurations definiamo i campi come segue
Client IP Address: 127.0.0.1
Client IP Version: IPv4
Client Shortname: [Nome del vostro firewall]
Client Shared Secret: una password di 31 caratteri generata in modo casuale.
Clicchiamo su Save
Per la generazione della password è possibile utilizzare uno dei tanti generatori disponibili online.
Server di autenticazione
Dopo aver configurato il server RADIUS procediamo con la configurazione di pfsense affinchè sfrutti il server per l'autenticazione
Accediamo a System > User Manager > Authentication Servers
Clicchiamo su Add
Compiliamo i campi come segue:
Descriptive Name: [Descrizione del servr radius]
Type: RADIUS
Protocol: PAP
Hostname or IP address: 127.0.0.1
Shared Secret: [Quella generata precedentemente]
Services offered: Authentication and Accounting
Authentication port: 1812
Accounting port: 1813
Authentication Timeout: 5
RADIUS NAS IP Attribute: [Selezionare l'interfaccia LAN]
Clicchiamo su Save
Ora selezioniamo System > User Manager > Settings
In Autentication Server selezioniamo il server appena creato e clicchiamo Save & Test
Quest'operazione serve per indicare che l'accesso a pfSense deve essere autenticato dal server RADIUS oltre che dal server locale.
Creazione degli utenti
Ora è venuto il momento di creare gli utenti ed attivare per ognuno di essi l'autenticazione tramite Google Authenticator.
Accediamo nuovamente al server RADIUS tramite Services > Freeradius > Users e clicchiamo su Add per aggiungere il primo utente
Compiliamo come segue
Username: [nome utente]
Password: [Lasciare vuoto]
Password Encryption: MD5-Password
One-Time Password: Yes
OTP Auth Method: Google-Autenticator
Init-Secret: [Generare tramite il pulsante Generate OTP Seecret]
PIN: [Inserire un PIN per l'utente]
Time Offset: 0
A questo punto se non l'avete fatto occorre installare l'APP Google Autenticator sul proprio smartphone aggiungere un nuovo account ed inquadrare il codice QR appena generato.
Dopo aver generato l'account sullo smartphone procediamo con l'ultimo passaggio della configurazione.
Ora dobbiamo impostare il nostro radius affinchè restituisca a pfSense l'appartenenza al gruppo degli amministratori di pfSense, per fare questa cosa utilizziamo l'attributo class che dovrà essere restituito all'esito della riuscita autenticazione
Impostiamo il campo Additional RADIUS Attributes (REPLY-ITEM) inserndo nel campo di testo Class := "admins"
Clicchiamo su Save
Admins è il gruppo di default utilizzato da pfSense, nulla vieta di utilizzare un'altro gruppo a patto di averlo creato nel nostro pfSense e di avergli attribuito i giusti permessi.
Verifica della configurazione
A questo punto non ci resta che effettuare un test per verificare che tutto stia funzionando correttamente
Accediamo a Diagnostics > Authentication
Authentication Server: [selezioniamo il nostro server RADIUS]
Username: [Nome Utente]
Password: [PIN + OTP Code]
Clicchiamo su Test e verifichiamo l'esito del test.
Se il test dovesse fallire possiamo accedere al LOG da Status > System Logs > System e verificare qual'è la causa dell'errore.
Note
Questo sistema non prevede la disabilitazione del database locale di autenticazione, pertanto l'utente admin è sempre attivo ed utilizzabile per accedere al nostro pfSense in caso di problemi con il server RADIUS.
Il consiglio è di utilizzare per quest'utente una password di almeno 16 caratteri generata in modo casuale.
Gli utenti amministrativi autenticati tramite database esterni (AD o RADIUS) non hanno il diritto di manipolare gli account locali quindi il menù System > User Manager > Users sarà inaccessibile.
L'APP Google Authenticator non consente il backup e restore delle configurazioni, in caso di cambio di smartphone sarà necessario effettuare un nuovo collegamento tra RADIUS ed APP.
La configurazione che abbiamo appena creato, può essere impiegata anche per autenticare delle sessioni OpenVPN.
5 commenti:
Ciao, ho seguito la configurazione ma eseguendo il test mi appare sempre:
Sep 15 16:36:19 radiusd 53399 (2) Login incorrect (Failed retrieving values required to evaluate condition): [fabrice] (from client pfsense1 port 0)
Sep 15 16:36:19 googleauth.py freeRADIUS: Google Authenticator - Authentication failed. User: fabrice, Reason: wrong PIN
Naturalmente il PIN è quello generato dall'AP GOOGLE Authenticator. Ho provato a creare diversi utente ed ad inserire il codice Init-Secret senza usare il QR Code ma ottengo sempre lo stesso errore.
Ciao,
il primo log che hai postato mi fa pensare che ci sia qualcosa che non va nella configurazione del radius. L'errore Wrong PIN è una causa del mancato riconoscimento/matching dell'utente.
Ciao Fabio
Ciao,
ho finalmente risolto: il problema stava nella sincronizzazione ora perché nonostante avessi impostato i server google come NTP l'ora risultava errata perché la sincronizzazione veniva sovrascritta dal virtualizzatore. Un errore di 50 secondi non faceva funzionare nulla.
Grazie comunque per la risposta e spero di aver aiutato altri.
Fabrice
Ciao Fabio, prima di tutto grazie per la guida!! Volevo dire che nel mio caso il menù System -> User Manager -> Users è accessibile anche con l'utenza autenticata tramite FreeRadius. Forse nelle versioni + recenti di pfSense hanno eliminato la limitazione di cui parlavi alla fine della guida?
Ciao, ho impostato il tutto senza problemi ma ogni 60 minuti disconnette gli utenti obligandoli a ricollegarsi con il token... è possibile allungare questo tempo a 3/4 ore ?
Posta un commento