cs:spravce:pripojovani:radius:freeradius2

This is an old revision of the document!


Instalace FreeRADIUSu 2.x.x pro eduroam

FreeRADIUS v2 byl nahrazen novou verzí, používejte 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 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
Last modified:: 2017/03/02 09:56