La risorsa Italiana per pfSense

15 luglio 2019

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:

Fabrice ha detto...

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.

Fabio Viganò ha detto...

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

Fabrice ha detto...

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

Cris70 ha detto...

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?

Unknown ha detto...

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 ?

Nome

Email *

Messaggio *