Autenticazione degli accessi Wireless tramite server Radius: differenze tra le versioni
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]] | ||
* | * 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 | ||
== | == 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 | client 127.0.0.1 { | ||
secret = chiave_segreta | |||
secret = chiave_segreta | nastype = other # localhost non è un NAS | ||
nastype = other | |||
} | } | ||
</pre> | </pre> | ||
Riga 125: | Riga 123: | ||
=== Autenticazione via MySQL === | === Autenticazione via MySQL === | ||
Apriamo il file di configurazione <tt>/etc/freeradius/radiusd.conf | 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> | <pre> | ||
bind_address = * | bind_address = * | ||
Riga 135: | Riga 129: | ||
#$INCLUDE ${confdir}/proxy.conf | #$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 | |||
} | |||
</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 | ||
# | # zcat /usr/share/doc/freeradius/examples/db_mysql.sql.gz | mysql -u root radius -p | ||
</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: | ||
<pre> | <pre> | ||
# mysql -u root -p | # mysql -u root -p | ||
Riga 183: | Riga 239: | ||
mysql> quit; | mysql> quit; | ||
</pre> | </pre> | ||
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" | ||
</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> | ||
== Debug == | == Debug == | ||
Riga 216: | Riga 269: | ||
# /etc/init.d/freeradius stop | # /etc/init.d/freeradius stop | ||
# freeradius -X | # freeradius -X | ||
</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>. | ||
{{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 = | |Numero_revisori = 0 | ||
}} | }} | ||
Versione delle 09:44, 17 ott 2012
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
- Debian Lenny/Squeeze/Wheezy o superiori
- Un ambiente LAMP: Installare un ambiente LAMP: Linux, Apache2, SSL, MySQL, PHP5
- Un database LDAP configurato e funzionante, come descritto ad esempio in queste guide:
- Uno o più Access Point che supportino il protocollo WPA(2) 802.1x
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) | Debianized 20% |
Estesa da: | |
Verificata da: | |
Verificare ed estendere la guida | Cos'è una guida Debianized |