Configurazione di freeradius per l`Aula Taliercio

Configurazione di freeradius per l’Aula Taliercio
Nerio Da Canal
4 agosto 2006
2
1 Introduzione
Nerio Ver. beta1 10/07/2006
Nerio Ver. beta2 02/08/2006
1
Introduzione
Client ......... : Windows XP
NAS ............ : 3Com Switch 4400
Radius Server... : Freeradius 1.0.4
Postgresql...... : DBMS per la gestione degli account radius
Pacchetti installati attualmente sul server:
Ù freeradius-postgresql-1.0.4-1.FC4.1
Ù freeradius-1.0.4-1.FC4.1
Il nostro scopo è di far autenticare dei client windowsXP (prossimamente anche dei client LinuX Xsupplicant già in esame) ad un Server Radius tramite
un NAS (switch 3Com 4400).
client ←→ NAS ←→ Server Radius
Serve quindi che lo switch blocchi direttamente a livello 2 i pacchetti di
chi non si è autenticato o non è stato autenticato con successo dal Server
Radius. Chi si autentica deve poi ricevere un indirizzo IP un GATEWAY ed un
DNS. Questi parametri possono essere passati dal Server Radius, ma dipendono
molto da come il NAS interpreta i dati che gli arrivano in risposta dal Server
Radius. Dipendono cioè dal cosiddetto dictionary supportato dal singolo NAS.
Ed ogni casa madre ed ogni modello ha il suo e per la 3Com la documentazione
è molto scarna.(file dizionario in share/dictionary.*) Perciò al momento questa
funzione è meglio che la svolga un server DHCP. Abbiamo l’esigenza di poter
gestire molti utenti e per ogni utente ci occorrono più informazioni oltre a
login e password dunque si presenta la necessità di gestire gli account tramite
database.
Ogni porta che ha un client attaccato è configurata nella VLAN 2 in modo
da separare la rete degli utenti dalla rete di amministrazione (VLAN 1). La
security per ogni porta associata ad un client è stata impostata a Network
Login (vedi manuali 3com nel CD allegato). È necessario impostare nello switch
l’IP del Server Radius e le porte relative al servizio.
2.0 I file di configurazione
2
3
I file di configurazione
I File di configurazione di freeradius si trovano nella directory etc/raddb. Nel
nostro caso i file da modificare sono :
Ô clients.conf
Ô users
Ô radiusd.conf
Ô eap.conf
Ô postgresql.conf
Ô sqlcounter.conf
2.1
clients.conf
Definisce quali sono gli IP abilitati ad interrogare il server ovvero l’IP dei NAS.
Nel nostro caso aggiungeremo una entry del genere:
client 169.254.100.98/32
secret
=
nastype
=
shortname
=
}
{
testing123
other
switch3com
dove 169.254.100.98 e’ l’IP dello switch.
2.2
users
Serve a definire le utenze Radius in maniera più veloce rispetto ad esempio al
database. Una entry che fa al caso nostro potrebbe essere ad esempio:
ciccio
Auth-Type := EAP, User-Password == "pasticcio"
Fall-Through = Yes
L’utente ciccio viene autenticato con password pasticcio se e solo se usa
un client che supporta il protocollo EAP (Extensible Authentication Protocol).
4
2 I file di configurazione
2.3
radiusd.conf
È il file di configurazione principale di Radius. Al momento quello che ci interessa è che il client venga autenticato e quindi lo switch gli permetta di
uscire.
Nella sezione dei moduli includere il file di configurazione del postgresql e
commentare la entry di default, inoltre includere il file di configurazione per il
modulo sqlcounter:
#
$INCLUDE
$INCLUDE
$INCLUDE
${confdir}/sql.conf
${confdir}/postgresql.conf
${confdir}/sqlcounter.conf
Sezioni che si trovano alla fine del file e che determinano il comportamento
del Server Radius:
Nella sezione authorize questi sono i moduli da attivare e gli altri possono
essere commentati (idem per le altre sezioni sotto riportate):
authorize {
preprocess
eap
files
sql
dailycounter
}
Sezione authenticate:
authenticate {
eap
}
Sezione accounting:
accounting {
detail
radutmp
sql
}
2.4
eap.conf
Verificare che ci siano le seguenti indicazioni perche’ useremo le password
criptate con l’md5
default_eap_type = md5
2.5
postgresql.conf
5
md5 {
}
2.5
postgresql.conf
Inserire le informazioni necessarie al server radius per interagire con il DB sia
per leggere che per scrivere (tabella radacct tiene traccia dei login):
server = "localhost"
login = "radius"
password = "radius"
radius_db = "radius"
Modificare la query accounting stop query nella sezione accounting e
togliere dalla condizione where il controllo sull’attributo username, che non
viene passato indietro in risposta al Server Radius dal nostro switch 3Com
4400. Senza modifiche si vengono a creare delle entry doppie nella tabella
radacct con dei campi mancanti per cui poi non funziona piu’ il computo del
tempo di sessione.
La query sarà quindi del tipo
UPDATE tabella SET campox=x,campoy=y
WHERE AcctSessionId = ’%{Acct-Session-Id}’ \
AND NASIPAddress = ’%{NAS-IP-Address}’ AND AcctStopTime IS NULL"
2.6
sqlcounter.conf
Questo file serve per configurare il contatore per ogni utente. Se non c’è lo si
crea e se c’è gli si aggiungono le seguenti righe
sqlcounter dailycounter {
driver = "rlm_sqlcounter"
counter-name = Daily-Session-Time
check-name = Max-Daily-Session
sqlmod-inst = sql
key = User-Name
reset = daily
#
#
#
#
modified by Nerio 19/07/2006
convertita la query per mysql in una query per postgresql.
anziche’ convertire la data unix in timestamp postgres
come nell’originale, faccio il contrario ovvero converto
6
3 Il database
# il timestamp di postrges nel formato unix
# (numero di secondi trascorsi dal 01/01/1970)
query = "SELECT SUM(AcctSessionTime) FROM radacct WHERE \
UserName=’%{%k}’ AND \
(SELECT EXTRACT(EPOCH FROM acctstarttime)) > ’%b’ "
#query = "SELECT SUM(AcctSessionTime) FROM radacct WHERE \
#
UserName=’%{%k}’ AND \
#
AcctStartTime > FROM_UNIXTIME(’%b’)"
}
sqlcounter: questo modulo implementa un contatore per ogni utente radius attualmente autenticato. Tale counter con questa configurazione, allo scadere del tempo totale di connessione giornaliero concesso ad un utente (MaxDaily-Session), fa si che questo venga disconnesso dal Server Radius. Per la
precisione è il server Radius che invia le istruzioni al Nas affinchè questo blocchi la connessione dell’utente a livello 2. E quindi se questo provasse comunque
a riautenticarsi il server Radius gli negherebbe l’accesso alla rete per tutto il
resto della giornata. Purtroppo il pacchetto rpm per fedora non contiene tale
modulo che si è dovuto provvedere a compilare dai sorgenti e poi farlo caricare
dal server. Vediamo come:
• si scarica il progetto dal sito www.freeradius.org, lo si compila e si prende il modulo src/modules/lib/rlm sqlcounter.so e lo si copia nella
directory /usr/lib/.
• si aggiunge al dizionario l’attributo Max-Daily-Session se non c’è già. Basta aggiungere la riga seguente in fondo al file /usr/share/freeradius/dictionary
ATTRIBUTE
Max-Daily-Session
4000
integer
Per tutto quello che non è indicato possono essere lasciate le impostazioni
di default.
3
Il database
Gli script SQL che creano le tabelle si trovano nella directory dei sorgenti
doc/examples.
Nei sorgenti si trova anche una applicazione web sviluppata in php sotto la directory dialup admin che opportunamente configurata permette di
amministrare gli utenti radius.
Passi principali di configurazione di dialup admin:
3.1
Gestione dell’autenticazione
7
1. creazione delle tabelle secondo gli script della directory dialup admin/sql
attenzione a modificare opportunamente la sintassi che nel progetto e’
per mysql. Si tratta di creare degli indici
CREATE INDEX nomeindice ON nometabella(attributo);
al posto di
KEY(nomeattributo);
2. modifica dei file di configurazione:
• admin.conf parametri per la connessione al DB
• naslist.conf lista dei nas (nel nostro caso basta mettere l’IP dello
switch)
3.1
Gestione dell’autenticazione
Attributi che l’amministratore del server associa ad ogni utente:
(di fianco sono riportati i valori utilizzati in questo caso)
User-Name
User-Password
Auth-Type
Idle-Timeout
EAP#
120#
#
Session-Timeout
7200#
#
Simultaneous-Use
1 #
#
#
Max-Daily-Session 14400#
#
#
Specifica il modo di autenticazione
Specifica il tempo di Idle in secondi della
connessione scaduto il quale il Nas la blocca
Specifica il tempo di sessione (in secondi)
scaduto il quale il Nas blocca la connessione
Specifica il massimo numero di utenti che
possono utilizzare lo stesso account
(medesima login e password)
Specifica il tempo massimo giornaliero per
un utente scaduto il quale il server Radius
blocca la connessione
La politica più conveniente è di creare dei gruppi di utenti e associare il
maggior numero di attributi al gruppo di appartenenza di un utente piuttosto
che all’utente singolo per praticità. Per cui nel nostro caso gli attributi di
un singolo utente sono User-Name e User-Password mentre tutti gli altri li
abbiamo trattati come attributi di gruppo.
8
3.2
3.2.1
3 Il database
Tabelle del database e loro significato:
RADCHECK
contiene gli utenti e gli attributi a loro associati che servono solo al server
Radius.
radius=> select * from radcheck;
id
username
11
ciccio
14
ciccio2
16
a3Com
17 00-0A-E4-5B-2C-1B
3.2.2
attribute
User-Password
User-Password
User-Password
User-Password
op
value
:=
ciccio
:=
ciccio2
:=
a3Com
:= 00-0A-E4-5B-2C-1B
RADGROUPCHECK
radius=> select * from radgroupcheck;
id groupname
1
users
2
users
3
users
attribute
Auth-Type
Simultaneous-Use
Max-Daily-Session
op value
:= EAP
:=
1
:= 14400
Questa tabella contiene tutti gli attributi di gruppo che servono solo al
Server Radius e che non c’entrano con la comunicazione tra server e switch.
3.2.3
RADGROUPREPLY
radius=> select * from radgroupreply;
id groupname
2
users
1
users
attribute
Idle-Timeout
Session-Timeout
op value
:= 120
:= 7200
Questa tabella contiene tutti gli attributi di gruppo che devono essere inviati in risposta al NAS affinchè agisca sulla connessione dell’utente.
4.0 Note tecniche
3.2.4
9
USERGROUP
radius=> select * from usergroup;
username
ciccio
ciccio2
a3Com
00-0A-E4-5B-2C-1B
groupname
priority
users
0
users
0
administrator
0
administrator
0
Questa tabella serve a determinare associazioni fra utenti e gruppi di appartenenza.
3.2.5
RADACCT
radius=> select acctsessionid,username,nasipaddress,acctstarttime,\
acctstoptime,acctsessiontime,callingstationid from radacct;
acctsessionid username
acctstoptime
acctsessiontime
callingstationid
1.19.1e2038dd
ciccio
2006-08-02 12:25:44
140
00-03-0D-08-B7-C9
1.20.1e23fdd3
ciccio
2006-08-02 12:27:41
10
00-03-0D-08-B7-C9
Nella tabella radacct il Server Radius registra i dati relativi alle connessioni di ogni utente; in questo caso se ne riporta un esempio con una scelta dei
campi piu’ importanti. Da questa tabella riusciamo a procurarci il tempo di
connessione di un utente e il mac-address dell’host dal quale si e’ collegato. Dal
mac-address poi possiamo recuperare l’IP assegnato a tale host analizzando i
log del server DHCP.
4
Note tecniche
1. Il NAS tiene traccia per ogni porta dei seguenti parametri:
(a) Username
(b) Session-Time(tempo di connessione di un utente)
(c) Idle-Timeout
(d) byte di traffico da e verso il client.
E’ il NAS che tiene in memoria il tempo della corrente sessione di lavoro,
il session-timeout e l’Idle-Timeout che gli ha mandato il Server Radius come attributo relativo all’utente. Ed in base a questi parametri e’
il NAS che blocca la connessione a livello 2 e notifica le variazioni sullo
stato della connessione al Server Radius.
10
4 Note tecniche
2. Perche’ le password degli utenti devono essere in chiaro sul database?
Perchè il client quando si autentica manda la password criptata al Server
con una funzione one-way hashing che usa l’MD5 come algoritmo. Il
client manda ovviamente anche la chiave che ha utilizzato per criptare
la password. Non e’ più possibile quindi risalire alla password in chiaro
a partire dalla password criptata. Quello che puo’ fare il Server Radius è
criptare a sua volta la password in chiaro che c’è nel BD per quell’utente
con la stessa chiave e poi confrontare le due password criptate.
Padova, li 04/08/2006