Toto je starší verze dokumentu!
Instalace FreeRADIUSu 2.x.x pro eduroam
<box 70% center rgb(239,247,255) #000000 rgb(209,233,255) rgb(10,82,122)> FreeRADIUS v2 byl nahrazen novou verzí, používejte FreeRADIUS 3. </box>
Tento návod Vás provede instalací RADIUS serveru FreeRADIUS. RADIUS server je potřebný pro zapojení do eduroam infrastruktury. Použitá ověřovací metoda bude EAP-PEAP.
Překlad na Debianu
Debian distribuuje FreeRADIUS bez zakompilované podpory pro TLS, tudíž je nutné si přeložit vlastní verzi. Stáhněte si zdrojové kódy z freeradius.org a rozbalte je.
V adresáři se zdrojovými kódy, spusťte:
./configure --prefix=/opt/radius-2.1.6 --with-system-libtool make #jako uživatel root spusťte make install
Konfigurace
Pokud jste FreeRADIUS nemuseli překládat, najděte si umístění konfiguračních souborů. Na většině distribucí budou v /etc/radius
. Návod pracuje s umístěním v /opt/radius-2.1.6/etc/raddb
.
FreeRADIUS je po překladu přednastaven na EAP-TLS (ověřování uživatelským certifikátem). Při prvním spuštění si FreeRADIUS vygeneruje potřebné certifikáty (adresář certs
obsahuje skripty pro vytvoření testovací certifikační autority a všech potřebných certifikátů).
Základním pravidlem je dělat co nejméně změn. Konfigurace bude rozdělena do dvou částí: obecné a specifické. V obecné části nastavíme vše potřebné krok po kroku. Ve specifické části budou pouze tipy, jak napojit FreeRADIUS na LDAP, ta se bude lišit podle použitého LDAPu.
Obecná část
I malá změna dokáže udělat velké divy, proto doporučuji po každé změně otestovat RADIUS server nástrojem rad_eap_test.
eap.conf
v sekci eap {}
nastavíme:
default_eap_type = peap
v sekci tls {}
nastavíme své certifikáty (tls komunikace mezi uživatelským notebookem a naším RADIUS serverem):
private_key_file = /etc/ssl/private/radius09.pem certificate_file = /etc/ssl/certs/radius09.crt
Konfigurační volby private_key_file
a certificate_file
ukazují na soubory s privátním a veřejným klíčem Vašeho serveru, které získáte od certifikační autority (CA). Pokud certifikační autorita, která vydala certifikát pro server, nevydává certifikáty přímo pod kořenem, který mají uživatelé předinstalovaný v suplikantu, je nutné společně s certifikátem serveru posílat i certifikáty mezilehlých CA. To se udělá tak, že certifikáty přidáte do téhož souboru, ve kterém je certifikát serveru. Certifikáty přidávejte na konec souboru. Přidání mezilehlých certifikátů je nutné jak pro SureServer EDU, tak pro Terena Certificate Service.
Věnujte pozornost nastavení CA_file
a CA_path
. Pokud je
nastavíte špatně, můžete umožnit přihlášení komukoliv, kdo má
certifikát od zadané CA. Doporučujeme nechat CA_file
nenastavené a
CA_path
, která defaultně ukazuje do adresáře, kde je testovací
self-signed CA. Listem eduroam-admin proběhla zajímavá diskuze kolem
těchto parametrů, viz. emaily: 1 a
2.
proxy.conf
Soubor proxy.conf
určuje, jak budeme požadavky směrovat. Požadavky s realmem „vas_realm.cz“ budeme směrovat na náš RADIUS. Požadavky bez realmu (realm NULL
) odmítneme úpravou souboru users
. Ostatní požadavky (realm DEFAULT
) chceme poslat na národní RADIUS server. V tomto souboru jsou úpravy hodně masivní. V podstatě vše zakomentovat, v souboru by mělo ve výsledku být jen následující:
proxy server { default_fallback = no } realm vas_realm.cz { } realm LOCAL { } realm NULL { } # ostatni pozadavky smeruj na narodni RADIUS pres radsecproxy realm DEFAULT { type = radius authhost = localhost:11812 secret = vase_heslo nostrip dead_time = 0 }
attrs
V souboru attrs
je konfigurace filtrování atributů přijatých přes proxy modul. Atributy uvedené v sekci DEFAULT
nejsou filtrovány. Do této sekce přidáme následující atributy, které zajistí, že VLAN 666 (testovací účty sledovací infrastruktury) nebudou filtrovány. Jiná VLAN ID budou odfiltrována.
Tunnel-Type == VLAN, Tunnel-Private-Group-Id == 666, Tunnel-Medium-Type == IEEE-802
clients.conf
V souboru clients.conf
je potřeba nadefinovat všechna zařízení ověřující se proti FreeRADIUSu, tedy všechny přístupové body i národní RADIUS servery komunikující přes RadSec proxy.
# příklad běžného klienta (AP) client 192.168.240.10 { secret = sdilene_heslo shortname = ap_10 } # připojení z radsecproxy client 127.0.0.1 { secret = radsec shortname = radsecproxy } # sledovací infrastruktura se připojuje přímo ze serveru ermon.cesnet.cz client 195.113.233.246 { secret = sdilene_heslo_ermon shortname = ermon }
Konfigurace Operator-Name
Attribut Operator-Name slouží k indentifikaci SP odkud pochází požadavky na autentizaci uživatelů. V souboru /etc/raddb/sites-available/dafault přidejte:
.. authorize { update request { Operator-Name := 1domaci-realm.cz } ..
Konfigurace Chargeable-User-Identity
TODO; Prozatím dokumentace JISC.
Kontrola shody vnější a vnitřní EAP identity
Do souboru policy.conf
přidejte:
check_inner_identity { if (!outer.request:Realm || !Realm || "%{outer.request:Realm}" != "%{Realm}") { reject } if (!outer.request:Stripped-User-Name || !Stripped-User-Name || \ ("%{outer.request:Stripped-User-Name}" != "%{Stripped-User-Name}" && \ "%{outer.request:Stripped-User-Name}" != 'anonymous')) { reject } }
V souboru sites-available/default
najděte sekci authorize
a vní volání fce sufix
a upravte podle vzoru:
.. authorize { .. update request { Realm !* ANY Stripped-User-Name !* ANY } suffix check_inner_identity ..
users
Konfigurační soubor users
umožňuje definovat lokální uživatele, blokovat uživatele a realmy, porovnávat a nastavovat atributy u konkrétních uživatelů. My jej použijeme pro vytvoření testovacího účtu a k odmítnutí uživatelů bez nastaveného realmu.
Odfiltrování realmu NULL
DEFAULT Realm == NULL, Auth-Type := Reject
Testovací účet
Pro zajištění vysoké kvality sítě eduroam je každá instituce zapojena do sledovací infrastruktury, proto je nutné vytvořit platný testovací účet. Pomocí testovacího účtu by neměl být umožněn přístup k síti eduroam. To je zajištěno nasměrováním do VLAN ID 666, která na přístupových bodech není definována, tudíž nikam nevede. Do souboru users přidáme:
testuziv Cleartext-Password:= "hlasna_trouba" Tunnel-Type = VLAN, Tunnel-Private-Group-ID = 666, Tunnel-Medium-Type = IEEE-802, Fall-Through = Yes
Zablokování uživatele a realmu
Zablokovaní lokálního účtu lze úpravou souboru users:
zlobivec Auth-Type := Reject
Zablokování libovolného účtu. Jméno je v tomto případě porovnáváno s ohledem na velikost písmen.
DEFAULT User-Name == "zlobivy_uzivatel@domena.cz", Auth-Type := Reject
Zablokovat celý realm lze úpravou proxy.conf
a users
.
Do souboru proxy.conf přidáme postižený realm např. abc.com:
realm abc.com { }
V souboru users
musíme zakázat definovaný realm v proxy.conf
:
DEFAULT Realm == abc.com, Auth-Type := Reject
Testování konfigurace
K testování využijeme výše zmiňovaný rad_eap_test
.
sh rad_eap_test -H 127.0.0.1 -P 1812 -S radsec -u testuziv@vas_realm.cz -p 'hlasna_trouba' -m WPA-EAP -e PEAP -t 5 access-accept; 1
Pokud je vše v pořádku, vrátí nám klient access-accept. Dále nám klient může vrátit buď timeout (spojení se nezdařilo, neplatné sdílené heslo), nebo access-reject (neplatné uživatelské jméno případně heslo). Zpoždění odpovědi od serveru udává číslo za středníkem (v sekundách).
Specifická část
Napojení na LDAP server
Napojení na konkrétní LDAP server se může drobně měnit podle použitého software a nastavení.
Je nutné upravit sites-enabled/inner-tunnel
. Soubor sites-enabled/default
netřeba měnit.
V sekci authorize {}
odkomentovat řádek ldap
.
V sekci authenticate {}
odkomentovat:
Auth-Type LDAP { ldap }
Dále v souboru modules/ldap
v sekci ldap
je potřeba správně nastavit:
server = "ldaps://radius.domena.cz" identity = "uid=admin,ou=Special users,dc=domena,dc=cz" # proxy uzivatel password = "heslo" # heslo proxy uzivatele basedn = "ou=People,dc=domena,dc=cz" # kde se maji hledat uzivatele filter = "(uid=%{Stripped-User-Name:-%{User-Name}})" base_filter = "(objectclass=radiusprofile)"
V podsekci tls
je potřeba nastavit CA certifikát pro ověření LDAP serveru:
cacertfile = /etc/ssl/certs/ca_stroj.pem
Dále je nutné specifikovat atribut, ve kterém je uloženo heslo uživatele:
password_attribute = "radiusPassword"
Ověřování skupin
Kromě správného jména/hesla, případně platného osobního certifikátu (EAP-TLS), lze ověřit, zda uživatel patří do správné/špatné skupiny a podle toho se zachovat.
Blacklist
Je-li uživatel členem skupiny, je mu odepřen přístup.
V souboru modules/ldap
upravit:
groupname_attribute = cn groupmembership_filter = "(&(objectClass=GroupOfUniqueNames)(uniqueMember=%{control:Ldap-UserDn}))"
do souboru users přidat:
DEFAULT Ldap-Group == "cn=jmeno_skupiny, ou=Groups, dc=domena, dc=cz", Auth-Type:= Reject
Whitelist
Je-li uživatel členem skupiny, je mu umožněn přístup.
V souboru modules/ldap
upravit:
groupname_attribute = cn groupmembership_filter = "(&(objectClass=GroupOfUniqueNames)(uniqueMember=%{control:Ldap-UserDn}))"
do souboru users
přidat:
DEFAULT Ldap-Group == "cn=jmeno_skupiny, ou=Groups, dc=domena, dc=cz" Fall-Through = no # vsechny ostatni odmitneme DEFAULT Auth-Type:= Reject
Varianta OpenLDAP s posixGroup
groupname_attribute = cn groupmembership_filter = "(&(objectClass=posixGroup)(memberUID=%{User-Name}))"
Upgrade FreeRADIUSu z verze 1.x
Změny mezi verzemi 1.x a 2.x jsou příliš velké, proto doporučuji provést čistou instalaci podle tohoto návodu.
Změna syntaxe konfiguračního souboru users
Pozor na změnu operátoru ==
na :=
a attributu User-Password
na Cleartext-Password
Dříve:
testuziv User-Password == "hlasna_trouba"
Nyní:
testuziv Cleartext-Password:= "hlasna_trouba"
Možné problémy
Chyba "Failed to initialize type tls"
Spuštění radiusd -X
končí chybou:
rlm_eap: SSL error error:00000000:lib(0):func(0):reason(0) rlm_eap_tls: Error loading randomness rlm_eap: Failed to initialize type tls /opt/radius-2.1.6/etc/raddb/eap.conf[17]: Instantiation failed for module "eap" /opt/radius-2.1.6/etc/raddb/sites-enabled/inner-tunnel[223]: Failed to find module "eap". /opt/radius-2.1.6/etc/raddb/sites-enabled/inner-tunnel[176]: Errors parsing authenticate section. Errors initializing modules
Nemáte vygenerované soubory: /opt/radius-2.1.6/etc/raddb/certs/dh
a /opt/radius-2.1.6/etc/raddb/certs/random
Jak vyřešit?
Spustit radiusd -X
po překladu, vygeneruje testovací CA a zároveň tyto potřebné soubory, nebo se přepněte do adresáře certs a napište příkazy:
make dh make random