Autenticazione degli accessi Wireless tramite server Radius: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
m (corretto template autori (numero revisori))
Riga 10: Riga 10:
* Debian Lenny/Squeeze/Wheezy o superiori
* Debian Lenny/Squeeze/Wheezy o superiori
* Un ambiente LAMP: [[Installare un ambiente LAMP: Linux, Apache2, SSL, MySQL, PHP5]]
* Un ambiente LAMP: [[Installare un ambiente LAMP: Linux, Apache2, SSL, MySQL, PHP5]]
* ''(Solo se si intende utilizzare LDAP per archiviare le credenziali di accesso)'' Un database LDAP configurato e funzionante, come descritto ad esempio in queste guide:
* Un database LDAP configurato e funzionante, come descritto ad esempio in queste guide:
** [http://guide.debianizzati.org/index.php/Samba_e_OpenLDAP:_creare_un_controller_di_dominio_NT4_con_Debian_Wheezy#Installazione_del_server_LDAP Wheezy]
** [http://guide.debianizzati.org/index.php/Samba_e_OpenLDAP:_creare_un_controller_di_dominio_NT4_con_Debian_Wheezy#Installazione_del_server_LDAP Wheezy]
** [http://guide.debianizzati.org/index.php/Samba_e_OpenLDAP:_creare_un_controller_di_dominio_con_Debian_Squeeze#Installazione_del_server_LDAP Squeeze]
** [http://guide.debianizzati.org/index.php/Samba_e_OpenLDAP:_creare_un_controller_di_dominio_con_Debian_Squeeze#Installazione_del_server_LDAP Squeeze]
* Uno o più Access Point che supportino il protocollo WPA(2) 802.1x
* Uno o più Access Point che supportino il protocollo WPA(2) 802.1x


== ''(Opzionale)'' Riconfigurazione di OpenLDAP ==
== Riconfigurazione di OpenLDAP ==
Il server OpenLDAP va riconfigurato e modificato per potersi integrare con FreeRadius, l'implementazione LInux più comune di un server Radius.
Il server OpenLDAP va riconfigurato e modificato per potersi integrare con FreeRadius, l'implementazione LInux più comune di un server Radius.
<br/>
<br/>
Riga 100: Riga 100:
</pre>
</pre>
<pre>
<pre>
client localhost {
client 127.0.0.1 {
        ipaddr = 127.0.0.1
         secret          = chiave_segreta
         secret          = chiave_segreta  
         nastype        = other         # localhost non è un NAS
        require_message_authenticator = no
         nastype        = other  
}
}
</pre>
</pre>
Riga 125: Riga 123:


=== Autenticazione via MySQL ===
=== Autenticazione via MySQL ===
Apriamo il file di configurazione <tt>/etc/freeradius/radiusd.conf</tt> e decommentiamo la voce:
Apriamo il file di configurazione <tt>/etc/freeradius/radiusd.conf</tt> e cerchiamo al suo interno tutte le configurazioni seguenti, aggiungendo l'autenticazione <tt>sql</tt>:
<pre>
$INCLUDE sql.conf
</pre>
Poi apriamo il file <tt>/etc/freeradius/sites-available/default</tt> e cerchiamo al suo interno tutte le configurazioni seguenti, decommentando l'autenticazione <tt>sql</tt>:
<pre>
<pre>
bind_address = *
bind_address = *
Riga 135: Riga 129:
#$INCLUDE  ${confdir}/proxy.conf
#$INCLUDE  ${confdir}/proxy.conf


# Sezione authorize{}
authorize {
    # See “Authorization Queries” in sql.conf
preprocess
    sql
# auth_log
# attr_filter
chap
mschap
# digest
# IPASS
suffix
# ntdomain
eap
files
sql
# etc_smbpasswd
# ldap
# daily
# checkval
}
 
authenticate {
Auth-Type PAP {
pap
}


# Sezione accounting{}
Auth-Type CHAP {
    # See “Accounting queries” in sql.conf
chap
    sql
}


# Sezione session{}
Auth-Type MS-CHAP {
    # See “Simultaneous Use Checking Queries” in sql.conf
mschap
    sql
}


# Sezione post-auth{}
# digest
    # See “Authentication Logging Queries” in sql.conf
# pam
    sql  
# unix
 
# Auth-Type LDAP {
# ldap
# }
 
eap
}
 
preacct {
preprocess
acct_unique
# IPASS
suffix
# ntdomain
files
}
 
accounting {
detail
# daily
unix
sql
radutmp
# sradutmp
# main_pool
# pgsql-voip
}
 
session {
radutmp
sql
}
</pre>
</pre>
Aggiungiamoun nuovo utente al file <tt>/etc/freeradius/users</tt>:
Aggiungiamoun nuovo utente al file <tt>/etc/freeradius/users</tt>:
Riga 162: Riga 208:
# Fall-Through = 1
# Fall-Through = 1
</pre>
</pre>
Riavviamo FreeRADIUS e testiamo il nuovo account:
<pre>
# /etc/init.d/freeradius restart
# radtest testsql passwordsql 127.0.0.1 0 chiave_segreta
Sending Access-Request of id 44 to 127.0.0.1:1812
        User-Name = "testsql"
        User-Password = "passwordsql"
        NAS-IP-Address = 127.0.0.1
        NAS-Port = 0
rad_recv: Access-Accept packet from host 127.0.0.1:1812, id=44, length=20
</pre>
Ok, anche l'autenticazione su SQL funziona.


== Configurazione del database MySQL ==
== Configurazione del database MySQL ==
Riga 172: Riga 230:
mysql> CREATE DATABASE radius;
mysql> CREATE DATABASE radius;
mysql> quit
mysql> quit
# mysql -u root radius -p < /etc/freeradius/sql/mysql/schema.sql
# zcat /usr/share/doc/freeradius/examples/db_mysql.sql.gz | mysql -u root radius -p
# mysql -u root -p radius < /etc/freeradius/sql/mysql/nas.sql
</pre>
</pre>
Creiamo un nuovo utente <tt>radius@localhost</tt> e diamogli i privilegi di accesso corretti sul database appena creato.
Creiamo un nuovo utente <tt>radius@localhost</tt> e diamogli i privilegi di accesso corretti sul database appena creato:
* Da shell:
<pre>
<pre>
# mysql -u root -p
# mysql -u root -p
Riga 183: Riga 239:
mysql> quit;
mysql> quit;
</pre>
</pre>
* Da phpMyAdmin, inserendo un nuovo record nella tabella <tt>radcheck</tt>
L'unica cosa che resta da fare è istruire FreeRADIUS su come connettersi al database appena predisposto. Apriamo il file <tt>/etc/freeradius/sql.conf</tt> e modifichiamo le linee seguenti con le corrette credenziali di accesso:
L'unica cosa che resta da fare è istruire FreeRADIUS su come connettersi al database appena predisposto. Apriamo il file <tt>/etc/freeradius/sql.conf</tt> e modifichiamo le linee seguenti con le corrette credenziali di accesso:
<pre>
<pre>
Riga 190: Riga 245:
         login = "radius"
         login = "radius"
         password = "radiuspassword"
         password = "radiuspassword"
        readclients = yes
</pre>
</pre>
Aggiungiamo un nuovo utente di test:
Aggiungiamo un nuovo utente di test:
Riga 209: Riga 263:
rad_recv: Access-Accept packet from host 127.0.0.1:1812, id=48, length=20
rad_recv: Access-Accept packet from host 127.0.0.1:1812, id=48, length=20
</pre>
</pre>
Ok, anche l'autenticazione su SQL funziona.


== Debug ==
== Debug ==
Riga 216: Riga 269:
# /etc/init.d/freeradius stop
# /etc/init.d/freeradius stop
# freeradius -X
# freeradius -X
</pre>
== daloRadius, un'interfaccia grafica per FreeRadius ==
daloRadius è un'interfaccia grafica per facilitare l'inserimento e la gestione degli utenti Radius all'interno del database MySQL, che ci eviterà quindi di dover inserire a mano tramite query tutti i nostri utenti.
<br/>
daloRadius ha alcuni requisiti, che provvediamo a soddisfare:
<pre>
# apt-get install php5-gd php-pear php-db
</pre>
Quindi scarichiamo l'ultima versione dal sito del progetto: http://sourceforge.net/projects/daloradius/
<br/>
Infine scompattiamo l'archivio scaricato, copiamolo nella nostra directory di Apache e impostiamo i permessi corretti:
<pre>
# tar xvfz daloradius-0.9-9.tar.gz
# mv daloradius-0.9-9 daloradius
# mv daloradius /var/www
# chown www-data:www-data /var/www/daloradius -R
# chmod 644 /var/www/daloradius/library/daloradius.conf.php
</pre>
L'ultimo passo che resta da compiere è aggiungere la tabella <tt>daloradius</tt> al nostro database MySQL e impostare i corretti parametri di connessione per la nuova applicazione:
<pre>
# cd /var/www/daloradius/contrib/db
# mysql -u root -p radius < mysql-daloradius.sql
</pre>
<pre>
# nano /var/www/daloradius/library/daloradius.conf.php
</pre>
impostando correttamente la variabile:
<pre>
$configValues['CONFIG_DB_PASS'] = 'thepassword';
</pre>
A questo punto possiamo collegarci all'interfaccia: http://127.0.0.1/daloradius , utilizzando per il primo ingresso le credenziali:
<pre>
username: administrator
password: radius
</pre>
</pre>


== Conclusioni ==
== Conclusioni ==
A questo punto abbiamo un server Radius installato su Debian, in grado di gestire le richieste di autenticazione di tutti i dispositivi che supportano il protocollo di autenticazione Radius. Gli utenti saranno archiviati in un database MySQL; in ogni momento potranno essere aggiunti nuovi utenti tramite la shell <tt>mysql</tt> o tramite l'interfaccia <tt>phpMyAdmin</tt>.
A questo punto abbiamo un server Radius installato su Debian, in grado di gestire le richieste di autenticazione di tutti i dispositivi che supportano il protocollo di autenticazione Radius. Gli utenti saranno archiviati in un database MySQL; in ogni momento potranno essere aggiunti nuovi utenti tramite la shell <tt>mysql</tt> o tramite l'interfaccia <tt>phpMyAdmin</tt>.
<br/>
 
Il passo successivo è decidere come configurare i nostri Access Point Wireless. In sostanza ci troviamo di fronte due possibili strade:
# Impostare ogni Access Point per gestire le autenticazioni WPA/WPA2 Enterprise. L'Access Point rigirerà automaticamente al nostro server ogni richiesta di autenticazione sulla rete wireless; su ogni client comparirà una richiesta di inserimento di una coppia di credenziali (user/password). In questo caso nella configurazione dell'Access Point dovremo indicare:
## L'indirizzo IP del nostro server Radius
## La chiave segreta di connessione al server Radius
# Lasciare la rete wireless aperta e impostare un'autenticazione a livello di Proxy. Si veda ad esempio la seguente guida: [[Autenticare Squid Proxy Server su un server Radius]]
# Lasciare la rete wireless aperta e impostare un sistema Captive Portal per la gestione degli accessi e delle login.
<br/>
<br/>
{{Autori
{{Autori
|Autore = [[Utente:Ferdybassi|Ferdybassi]] 10:01, 1 set 2012 (CEST)
|Autore = [[Utente:Ferdybassi|Ferdybassi]] 10:01, 1 set 2012 (CEST)
|Verificata_da =
|Verificata_da =
|Numero_revisori = 1
|Numero_revisori = 0
}}
}}



Versione delle 09:44, 17 ott 2012

Debian-swirl.png Versioni Compatibili

Tutte le versioni supportate di Debian

Introduzione

Se si prevede di installare una rete wireless, è consigliabile configurarla in modo che possano accedervi solo gli utenti specificati.
I metodi di protezione più comunemente adottati sono il sistema WPA e il sistema WPA2. Questi due protocolli supportano sia l'autenticazione attraverso una chiave segreta condivisa (PSK = Pre Shared Key) e conosciuta da tutti i client della rete, sia l'autenticazione attraverso un server specifico. Wi-Fi Alliance ha introdotto i termini WPA(2)-Personal e WPA(2)-Enterprise per differenziare le due classi di sicurezza fornite dai prodotti. I WPA(2)-Personal utilizzeranno il metodo PSK a chiave condivisa mentre i WPA(2)-Enterprise utilizzeranno un server di autenticazione.
In questa guida vedremo la configurazione di un server Radius su Debian, per fornire ai protocolli WPA e WPA2 un server di autenticazione in grado di fornire una coppia di credenziali (nome utente / password) diverse per ogni utente della rete wireless.

Prerequisiti

Riconfigurazione di OpenLDAP

Il server OpenLDAP va riconfigurato e modificato per potersi integrare con FreeRadius, l'implementazione LInux più comune di un server Radius.
Occorre innanzitutto includere al file di configurazione di LDAP il file che contiene lo schema Radius:

# cp /usr/share/doc/freeradius/examples/openldap.schema /usr/share/doc/freeradius/examples/
# /etc/init.d/openldap restart

I passaggi successivi sono diversi a seconda della versione di Debian che stiamo utilizzando.

Fino a Debian Lenny

Aggiungiamo al file /etc/ldap/slapd.conf la riga che definisce lo schema Radius:

include /etc/ldap/schema/radius.schema

Da Debian Squeeze in poi

La nuova versione di OpenLDAP presente nei repository Debian a partire da Squeeze supporta un nuovo metodo di configurazione dinamico, non più basato sul file di configurazione statico /etc/ldap/slapd.conf.
Creiamo il file schema_convert.conf:

# touch /tmp/schema_convert.conf
# nano /tmp/schema_convert.conf

e editiamolo in questa maniera:

include /etc/ldap/schema/core.schema
include /etc/ldap/schema/collective.schema
include /etc/ldap/schema/corba.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/duaconf.schema
include /etc/ldap/schema/dyngroup.schema
include /etc/ldap/schema/inetorgperson.schema
include /etc/ldap/schema/java.schema
include /etc/ldap/schema/misc.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/openldap.schema
include /etc/ldap/schema/ppolicy.schema
include /etc/ldap/schema/samba.schema

Salviamo il file e creiamo una directory temporanea per gli output di slapcat:

# mkdir /tmp/ldif_output
# slapcat -f schema_convert.conf -F /tmp/ldif_output -n0 -s "cn={10}openldap,cn=schema,cn=config" > /tmp/openldap.ldif
# nano /tmp/openldap.ldif

e modifichiamo il file come segue:

dn: cn=openldap,cn=schema,cn=config
...
cn: openldap

Rimuoviamo le stringhe a fondo pagina:

structuralObjectClass: olcSchemaConfig
entryUUID: b53b75ca-083f-102d-9fff-2f64fd123c95
creatorsName: cn=config
createTimestamp: 20080827045234Z
entryCSN: 20080827045234.341425Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20080827045234Z

Salviamo tutto e copiamolo in /etc/ldap/schema:

# cp /tmp/openldap.ldif /etc/ldap/schema

Infine importiamolo in OpenLDAP e riavviamo il demone:

# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/openldap.ldif 
# /etc/init.d/slapd restart

Installazione di FreeRADIUS

Arrivati a questo punto possiamo installare FreeRADIUS, il demone che si occuperà di gestire le richieste di autenticazione:

# apt-get install freeradius freeradius-common freeradius-krb5 freeradius-mysql freeradius-utils

Come si può vedere dai plugin installati, utilizzeremo un database MySQL per l'archiviazione degli utenti e delle password.

Configurazione di FreeRADIUS

Test locale

Iniziamo con qualcosa di semplice: creiamo un utente locale di test e verifichiamo che il demone faccia il suo dovere. Apriamo prima di tutto il file /etc/freeradius/clients.conf e cambiamo la chiave che serve per mettere in comunicazione il server Radius con i dispositivi di rete:

# nano /etc/freeradius/clients.conf
client 127.0.0.1 {
        secret          = chiave_segreta
        nastype         = other         # localhost non è un NAS
}

Qundi creiamo un utente locale aggiungendo le seguenti righe al file /etc/freeradius/users:

utentetest Cleartext-Password := "testpassword"

Riavviamo FreeRADIUS e controlliamone il funzionamento:

# /etc/init.d/freeradius restart
# radtest utentetest testpassword 127.0.0.1 0 chiave_segreta
Sending Access-Request of id 186 to 127.0.0.1 port 1812
        User-Name = "utentetest"
        User-Password = "testpassword"
        NAS-IP-Address = 127.0.0.1
        NAS-Port = 0
rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=186, length=20

Ok, funziona tutto.

Autenticazione via MySQL

Apriamo il file di configurazione /etc/freeradius/radiusd.conf e cerchiamo al suo interno tutte le configurazioni seguenti, aggiungendo l'autenticazione sql:

bind_address = *
proxy_requests  = no
#$INCLUDE  ${confdir}/proxy.conf

authorize {
	preprocess
#	auth_log
#	attr_filter
	chap
	mschap
#	digest
#	IPASS
	suffix
#	ntdomain
	eap
	files
	sql
#	etc_smbpasswd
#	ldap
#	daily
#	checkval
}

authenticate {
	Auth-Type PAP {
		pap
	}

	Auth-Type CHAP {
		chap
	}

	Auth-Type MS-CHAP {
		mschap
	}

#	digest
#	pam
#	unix

#	Auth-Type LDAP {
#		ldap
#	}

	eap
}

preacct {
	preprocess
	acct_unique
#	IPASS
	suffix
#	ntdomain
	files
}

accounting {
	detail
#	daily
	unix
	sql
	radutmp
#	sradutmp
#	main_pool
#	pgsql-voip
}

session {
	radutmp
	sql
}

Aggiungiamoun nuovo utente al file /etc/freeradius/users:

testsql   User-Password == "passwordsql"
DEFAULT		Auth-Type := sql
		Fall-Through := 1

e stiamo attenti a commentare le seguenti righe, dato che non vogliamo che il nuovo utente si autentichi su /etc/password, ma solo su MySQL:

#DEFAULT	Auth-Type = System
#		Fall-Through = 1

Riavviamo FreeRADIUS e testiamo il nuovo account:

# /etc/init.d/freeradius restart
# radtest testsql passwordsql 127.0.0.1 0 chiave_segreta
Sending Access-Request of id 44 to 127.0.0.1:1812
        User-Name = "testsql"
        User-Password = "passwordsql"
        NAS-IP-Address = 127.0.0.1
        NAS-Port = 0
rad_recv: Access-Accept packet from host 127.0.0.1:1812, id=44, length=20

Ok, anche l'autenticazione su SQL funziona.

Configurazione del database MySQL

Archiviare gli utenti in un file può diventare poco comodo con il passare del tempo e può portare a cali di prestazione.
Quindi creeremo un database MySQL apposito e lo utilizzeremo come archivio delle credenziali.
Iniziamo con la creazione del database. FreeRADIUS ci mette a disposizione uno script SQL già pronto da utilizzare:

# mysql -u root mysql -p
mysql> CREATE DATABASE radius;
mysql> quit
# zcat /usr/share/doc/freeradius/examples/db_mysql.sql.gz | mysql -u root radius -p

Creiamo un nuovo utente radius@localhost e diamogli i privilegi di accesso corretti sul database appena creato:

# mysql -u root -p
mysql> GRANT ALL PRIVILEGES ON radius.* TO 'radius'@'localhost' IDENTIFIED BY 'radiuspassword';
mysql> FLUSH PRIVILEGES;
mysql> quit;

L'unica cosa che resta da fare è istruire FreeRADIUS su come connettersi al database appena predisposto. Apriamo il file /etc/freeradius/sql.conf e modifichiamo le linee seguenti con le corrette credenziali di accesso:

        # Connect info
        server = "localhost"
        login = "radius"
        password = "radiuspassword"

Aggiungiamo un nuovo utente di test:

# mysql -u radius radius -p
mysql> INSERT INTO radcheck (UserName, Attribute, Value) VALUES ('testsql', 'Password', 'passwordsql');
mysql> quit

Riavviamo FreeRADIUS e testiamo l'account:

# /etc/init.d/freeradius restart
# radtest testsql passwordsql 127.0.0.1 0 chiave_segreta
Sending Access-Request of id 48 to 127.0.0.1:1812
        User-Name = "testsql"
        User-Password = "passwordsql"
        NAS-IP-Address = ford
        NAS-Port = 0
rad_recv: Access-Accept packet from host 127.0.0.1:1812, id=48, length=20

Debug

Per effettuare operazioni di debug nel caso i client avessero difficoltà a connettersi alla rete wireless, può venire utile stoppare il servizio freeradius e riavviarlo in modalità di debug:

# /etc/init.d/freeradius stop
# freeradius -X

Conclusioni

A questo punto abbiamo un server Radius installato su Debian, in grado di gestire le richieste di autenticazione di tutti i dispositivi che supportano il protocollo di autenticazione Radius. Gli utenti saranno archiviati in un database MySQL; in ogni momento potranno essere aggiunti nuovi utenti tramite la shell mysql o tramite l'interfaccia phpMyAdmin.




Guida scritta da: Ferdybassi 10:01, 1 set 2012 (CEST) Swirl-auth20.png Debianized 20%
Estesa da:
Verificata da:

Verificare ed estendere la guida | Cos'è una guida Debianized