Installare FreeRADIUS + MOTP per l’autenticazione in CentOS 5.x

radius1

Effettuare l’autenticazione utilizzando password statiche nasconde alcune insidie: può essere dimenticata, violata, persa. Per aumentare il fattore sicurezza, esiste un tipo di autenticazione basata sull’utilizzo di password dinamiche generate da dispositivi chiamati “token” valide per un solo utilizzo: le one time password. Questo sistema è molto usato per accedere, ad esempio, al conto online della propria banca.

Lo stesso concetto è possibile applicarlo per l’autenticazione degli utenti durante, ad esempio, una sessione VPN. Per effettuare l’autenticazione tramite MOTP (Mobile One Time Password), si abbina la procedura nel progetto MOTP al sito http://motp.sourceforge.net.

 

Prerequisiti

Per installare il sistema, sono richiesti i seguenti componenti:

 

Procedura

Iniziare con l’installazione di FreeRADIUS. Tramite il comando yum, installare i package richiesti per il funzionamento.

# yum install freeradius2 freeradius2-utils freeradius2-ldap

radius2

Rendere il servizio radiusd attivo anche al riavvio del sistema tramite il comando chkconfig.

# chkconfig radiusd on

Scaricare dal sito Mobile-OTP il file otpverify.sh, renderlo eseguibile ed assegnare l’ownership all’utente/gruppo radiusd utilizzati da FreeRADIUS.

# cd /usr/local/bin
# wget http://motp.sourceforge.net/otpverify.sh
# chmod +x otpverify.sh
#  chown radiusd:radiusd otpverify.sh

radius3

Scaricare dal sito motp il file dictionary.motp nella directory /etc/raddb/.

# wget http://motp.sourceforge.net/dictionary.motp
# chown root:radiusd dictionary.motp

radius4

Editare il file /etc/raddb/dictionary ed aggiungere l’INCLUDE per il file appena scaricato.

# vi /etc/raddb/dictionary

radius5

Creare le seguenti directory in /var ed assegnare l’ownership a radiusd.

# mkdir /var/motp
# mkdir /var/motp/cache
# mkdir /var/motp/users
# chown -R radiusd:radiusd /var/motp

radius6

Editare il file /etc/raddb/radiusd.conf ed aggiungere le seguenti istruzioni nella sezione modules:

exec MOTP {
wait = yes
program = "/usr/local/bin/otpverify.sh %{User-Name} %{User-Password} %{reply:Secret} %{reply:Pin} %{reply:Offset}"
input_pairs = request
output_pairs = reply
}

radius7

Creare un file identificativo (nell’esempio radius.nolabnoparty.com) nella directory /etc/raddb/sites-enabled/.

# touch /etc/raddb/sites-enabled/radius.nolabnoparty.com

Editare il file creato inserendo la seguente configurazione:

authorize {
preprocess
chap
suffix
files
expiration
logintime
pap
}

authenticate {
Auth-Type PAP {
pap
}
Auth-Type CHAP {
chap
}
Auth-Type External {
MOTP
}
unix
}

preacct {
preprocess
acct_unique
suffix
files
}

accounting {
detail
unix
radutmp
attr_filter.accounting_response
}

session {
radutmp
}

post-auth {
Post-Auth-Type REJECT {
attr_filter.access_reject
}
}

pre-proxy {
}

post-proxy {
}

radius8

Editare il file /etc/raddb/sites-enabled/inner-tunnel ed aggiungere nella sezione authenticate l’istruzione:

Auth-Type External {
    MOTP
}

radius9

Editare il file /etc/raddb/clients.conf ed impostare il valore del parametro secret che sarà utilizzato dal server e dal client per la comunicazione.

# /etc/raddb/clients.conf

radius10

 

Installazione del client (token)

Il dispositivo utilizzato come token può essere un comunissimo Smartphone (iPhone, Android, Nokia) su cui viene installato il software che genera l’OTP.

Qui sono elencati alcuni software utilizzabili:

AndroidDroidOTP, mobile-OTP        (presenti nel Market)
iPhone:    mOTP , iOTP                             (presenti in iTunes)
Nokia:      mobileOTP                                (applicazione Java)

Installato il software sullo Smartphone, generare il valore del parametro Secret* ed annotarlo. Editare il file /etc/raddb/users ed inserire la seguente configurazione:

DEFAULT Auth-Type = External
Exec-Program-Wait = "/etc/raddb/otpverify.sh '%{User-Name}' '%{User-Password}' '%{reply:Secret}' '%{reply:Pin}' '%{reply:Offset}'",
Fall-Through = Yes

user_nolabnoparty            # username
Secret = 7176f617a1a6ae52,   # *prelevato dal dispositivo token
PIN = 1234,                  # pin utilizzato per generare l’OTP
Offset = 0                   # differenza “Epoch-Time” tra client e server

radius11

 

Verifica della configurazione

Per testare lo script otpverify.sh, generare una password tramite il token ed eseguire l’istruzione:

otpverify.sh username token Init-Secret PIN Offset

# /usr/local/bin/otpverify.sh user_nolabnoparty 536d46 7176f617a1a6ae52 1111 0

radius12

Lo script dovrebbe riportare ACCEPT.  Rilanciando il comando lo script dovrebbe rispondere con FAIL.

Per verificare che la configurazione di FreeRADIUS sia corretta, lanciare il daemon radiusd in modalità debug.

# radiusd -X

radius13

Se la configurazione non presenta errori, il sistema visualizza il messaggio Ready to process requests.

 

Testare l'autenticazione tramite MOTP

L’installazione e configurazione del sistema è terminata. Non rimane che testare la funzionalità del sistema.

Lanciare FreeRADIUS in modalità debug.

# radiusd -X

Dal token generare una password. Aprire un’altra sessione di FreeRADIUS e digitare il comando:

radtest username token IP_FreeRADIUS Offset FreeRADIUS_Secret

# radtest user_nolabnoparty 127.0.0.1 0 secret1234

radius14

Visualizzando il messaggio Access-Accept, il sistema ha autenticato l’utente con la password OTP generata dallo Smartphone. Il sistema è adesso pronto per essere utilizzato.

 

Troubleshooting

Nel caso l’autenticazione fallisse sistematicamente con il messaggio Access-Rejected, verificare che la configurazione sia corretta.

radius15

  1. Verificare che i permessi e l’ownershipsia corretta nei seguenti file/directory:
    • otpverify.sh
    • /var/motp
    • /var/motp/cache
    • /var/motp/users
  2. Verificare che l’Epoch-Time sia in sync tra server e client seguendo la procedura nel sito Mobile-OTP.
  3. Verificare che il parametro Secret del token sia correttamente riportato nella configurazione dell’utente nel file /etc/raddb/users.

1

One Response

  1. Simone 11/01/2012