lorzeni.site

Tra server e sogni: diario di un sistemista curioso

Installare un server Freeradius su Ubuntu per permettere agli utenti di autenticarsi tramite Google LDAP

In questo articolo ti spiego come ho implementato un server FreeRADIUS per autenticare gli utenti tramite LDAP di Google Workspace nella mia scuola. La soluzione funziona perfettamente sia con access point Ruckus che UniFi, e copre entrambe le sedi dell’istituto.

Il server FreeRADIUS è centralizzato in una sede principale, mentre l’altra sede si collega tramite VPN per usufruire dell’autenticazione centralizzata, garantendo così una gestione semplice e sicura degli accessi Wi-Fi su tutta la rete scolastica.

Ti guiderò passo passo nella configurazione del server, dall’installazione alla messa a punto, con tutti i dettagli necessari per replicare questo setup in ambienti simili.

Per realizzare l’integrazione ho seguito questa utilissima e completa guida per la quale ringrazio l’autore, Dario Zucchini.

Pannello Amministrazione Google

https://admin.google.com → CERCA LA VOCE LDAP → AGGIUNGI client LDAP e seguire la procedura guidata, successivamente generare e annotarsi le credenziali. Quelle attuali sono:

  • Nome utente: utente_copiato
  • Key: key_copiata

Scaricare i certificati generati.

Successivamente, sempre da queste impostazioni, si potranno gestire le unità organizzative ed i gruppi abilitati al Wi-Fi. Ma solo dopo aver concluso le installazioni e un primo periodo di test.

Installazione server radius:

sudo -s
apt update && apt upgrade
apt -y install freeradius freeradius-ldap freeradius-utils
apt install ldap-utils
reboot

Ora verifichiamo la versione che è stata installata:

cd /etc/freeradius/
ls

Copiamo i certificati di Google

Copiamo i certificati scaricati dal pannello di amministrazione di Google Workspace nella cartella /etc/freeradius/3.0/certs/ rinominandoli in ldap-client.crt e ldap-client.key.

4. Verifica connessione LDAP Google

Verifichiamo da terminale se il nostro server riesce a parlare con LDAP di Google con questa riga di comando (da copiare e inserire tutta):

LDAPTLS_CERT=/etc/freeradius/3.0/certs/ldap-client.crt LDAPTLS_KEY=/etc/freeradius/3.0/certs/ldap-client.key ldapsearch -H ldaps://ldap.google.com:636 -b "dc=rosabianca,dc=tn,dc=it" "([email protected])"

Se il sistema ci risponde con informazioni tipo queste:

# search result
search: 3
result: 0 Success
# numResponses: 1

la comunicazione con Google è OK e possiamo proseguire. Se invece ci dice che non riesce a contattare il server LDAP controlliamo il firewall (aprire in uscita la porta 636) e i certificati.

5. Configurazione

Modifichiamo il file /etc/freeradius/3.0/clients.conf aprendolo direttamente con WinSCP, o se preferite da terminale con:

nano /etc/freeradius/3.0/clients.conf

Alla fine del file inserire:

client unifi {
    ipaddr = vostro ip/subnet (es. 192.168.15.0/24)
    secret = vostrasecretimpostta
}

Ora modifichiamo questi due file:

  • /etc/freeradius/3.0/sites-enabled/default
  • /etc/freeradius/3.0/sites-enabled/inner-tunnel

Direttamente con WinSCP o da terminale con:

nano /etc/freeradius/3.0/sites-enabled/default
nano /etc/freeradius/3.0/sites-enabled/inner-tunnel

Nella sezione authorize di ogni file, dopo pap, aggiungere:

if (User-Password) {
    update control {
        Auth-Type := ldap
    }
}

Nella sezione authenticate correggere così:

authenticate {
    Auth-Type PAP {
        ldap
    }
}

Togliere commento a ldap:

# Auth-Type LDAP {
    ldap
# }

Ricordarsi di farlo su entrambi i file!

Modifichiamo questo file /etc/freeradius/3.0/mods-enabled/ldap aprendolo con WinSCP, o da sterminale con:

nano /etc/freeradius/3.0/mods-enabled/ldap

Nel file cerchiamo queste righe, le scommentiamo se serve e aggiorniamo le informazioni:

server = 'ldap://ldap.google.com'
port = 636
identity = 'utente_copiato'
password = 'key_copiata'
base_dn = 'dc=rosabianca, dc=tn, dc=it'

# nella sezione TLS:
start_tls = no
certificate_file = /etc/freeradius/3.0/certs/ldap-client.crt
private_key_file = /etc/freeradius/3.0/certs/ldap-client.key
require_cert = 'allow'

Modifichiamo /etc/freeradius/3.0/mods-enabled/eap

Nella sezione eap:

default_eap_type = ttls

Nella sezione ttls:

default_eap_type = gtc

Infine modifichiamo /etc/freeradius/3.0/proxy.conf

max_connections = 0

Alla fine del file aggiungere:

realm rosabianca.tn.it {
}

Ora riavviamo e vediamo se riparte:

sudo systemctl restart freeradius.service

Per controllare eventuali errori:

journalctl -xe

Controlliamo se il nostro radius funziona:

radtest [email protected] fakepwd [ip_server_radius] 1645 vostraPassword

Se risponde qualcosa tipo Expected Access-Accept got Access-Reject vuol dire che sta funzionando, il rifiuto deriva dal fatto che la password fakepwd è volutamente sbagliata e comunque non crittografata.

6. Certificati

Modifichiamo il file /etc/freeradius/3.0/certs/ca.cnf

Nella sezione CA_default incrementare il numero di giorni prima della scadenza, es 10 anni:

default_days = 3650

Nella sezione req cambiare input_password e output_password con una password interna:

input_password    = vostraPassword
output_password   = vostraPassword

Nella sezione certificate_authority mettere le info della scuola:

[certificate_authority]
countryName           = IT
stateOrProvinceName   = Trento
localityName          = Cavalese
organizationName      = II La Rosa Bianca
emailAddress          = [email protected]
commonName            = "Certificato Wifi Rosabianca"

Ora modifichiamo anche il file server con la stessa procedura: /etc/freeradius/3.0/certs/server.cnf

input_password    = vostraPassword
output_password   = vostraPassword

[server]

countryName = IT stateOrProvinceName = tuaProvincia localityName = TuaCittà organizationName =NomeScuola emailAddress = [email protected] commonName = “Certificato Wifi RosaBianca”

Generiamo i certificati:

sudo -s
cd /etc/freeradius/3.0/certs/
make ca.pem
make ca.der
make server.pem
chown freerad:freerad /etc/freeradius/3.0/certs/*

Aggiungiamo i certificati nel file di configurazione: /etc/freeradius/3.0/mods-enabled/eap

private_key_password = whateverwifi
private_key_file = /etc/freeradius/3.0/certs/server.pem
certificate_file = /etc/freeradius/3.0/certs/server.pem
ca_file = /etc/freeradius/3.0/certs/ca.pem

Riavviamo il server radius:

systemctl restart freeradius

Condividi questo articolo