====== Instalace FreeRADIUSu 2.x.x pro eduroam ====== FreeRADIUS v2 byl nahrazen novou verzí, používejte [[freeradius3|FreeRADIUS 3]]. 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 [[http://freeradius.org/download.html|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 [[http://www.eduroam.cz/rad_eap_test/rad_eap_test.html|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: [[https://wiki.eduroam.cz/eduroam-admin/msg00425.html|1]] a [[https://wiki.eduroam.cz/eduroam-admin/msg00426.html|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 [[cs:spravce:monitoring:uvod|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 [[cs:spravce:pripojovani:radsec:uvod|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 [[https://community.jisc.ac.uk/library/janet-services-documentation/chargeable-user-identity-eduroam-freeradius-implementation|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/inner-tunnel'' 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