cs:spravce:pripojovani:radius:radiator

Připojení k eduroam.cz: konfigurace Radiatoru

Radiator je používán na národních RADIUS serverech zodpovědných za řízení komunikace eduroam.cz se zbytkem světa. Na CESNETu a několika univerzitách je používán v roli RADIUS serveru obsluhujícího uživatele. Jeho konfigurace je snažší a podstatně flexibilnější než freeRADIUSu, především díky velmi dobře propracovanému systému „hook“ů, pomocí kterých můžete vlastním kódem napsaným v Perlu ovlivnit chování serveru. Radiator lze provozovat nejen na Linuxu a Windows, ale i na řadě dalších platforem.

Úvod

Konfigurace, která zde bude popsána, je používána na CESNETím RADIUS serveru, který slouží k ověřování uživatelů. Narozdíl od konfigrace IPsec na linuxu ji pravděpodobně budete muset upravovat o něco více, aby vyhověla Vašim potřebám.

Kompletní konfigurace je uvedena v přílohách. V textu jsou uvedeny jen části nutné pro objasnění funkce.

Definice klientů

V konfiguraci je třeba uvést definici klientů, se kterými bude RADIUS server komunikovat:

StartupHook sub { require "/etc/radiator/CUI.pm" ; };
include %D/cui.cfg

<Client DEFAULT>
	Secret		tajemstvi
</Client>

<Client **10.0.1.1**> #AP01
        Secret          **tajemstvi123**
</Client>
<Client **10.0.1.2**> #AP02
        Secret          **tajemstvi213**
</Client>
<Client **10.0.1.3**> #AP03
        Secret          **tajemstvi321**
</Client>
#  .
#  .
#  .

<Client radius1.eduroam.cz> # narodni radius server
        Secret          **tajemstvi231**
	//**DupInterval	0**//
</Client>

<Client ermon.cesnet.cz> # monitoring
	Secret		**tajemstvi132**
	//**DupInterval	0**//
</Client>

<Client **accounting.cesnet.cz**>
	Secret		**TAJEMSTVI**
</Client>

Je třeba uvést nejen AP, která jsou přirozeným klientem pro server, ale i národní RADIUS servery, které vystupují v roli klienta, když některý z Vašich uživatelů využije roamingu.

Klienty lze vyjmenovat jejich DNS jménem, IP adresou, rozsahem IP adres, případně lze také použít řetězec „DEFAULT“. Taková definice bude použita pro všechny klienty, pro něž nebude k dispozici jiná přesnější.

Aby bez problémů fungoval monitoring je třeba pro radius1.eduroam.cz a ermon.cesnet.cz nastavit DupInterval 0 jinak dochází k zahazování některých dotazů a následně k jejich chybnému vyhodocení. Při defaultní hodnotě 2 se v log souborech objevuje hlášení INFO: Duplicate request id 87 received from xxx.xxx.xxx.xxx.

Definice RadSec serveru

RadSec otevírá dvě TCP spojení. Jedno je realizováno z národního RADIUS serveru na RADIUS server instituce a druhé ze serveru instituce na národní server. Komunikace probíhá na port TCP/2083. Zde se definuje port na kterém bude očekáváno spojení z národního RADIUS serveru.

<ServerRADSEC>
        Secret radsec

        UseTLS
        TLS_CAPath              /etc/ssl/certs
        TLS_CertificateFile     /etc/ssl/certs/ipsec_**certifikat**.crt.pem
        TLS_CertificateType     PEM
        TLS_PrivateKeyFile      /etc/ssl/private/ipsec_**certifikat**.key.pem
        
        TLS_RequireClientCert

	TLS_CRLCheck
	TLS_CRLFile		/etc/ssl/certs/9b59ecad.r0
	TLS_ExpectedPeerName	radius1.eduroam.cz
</ServerRADSEC>

Roztřídění požadavků podle typu a realmu

Radiator má možnost zpracovávat požadavky podle realmu díky konstrukci:

<Realm cesnet.cz>
.
.
.
</Realm>

Anebo podle jakékoliv hodnoty z požadavku konstrukcí:

<Handler attribute=value,attribute=value, ....>
.
.
.
</Handler>

Druhá alternativa je podstatně flexibilnější, proto je také použita ve zde prezentované konfiguraci.

Požadavky bez realmu

Požadavky o autentizaci bez realmu je vhodné zamítat s Access-Reject aby si domací uživatelé zvykali i v domácí síti používat realm a něměli tak zbytečně potíže když budou chtít eduroam použít jinde.

<Handler Realm=/^$/>
	<AuthBy INTERNAL>
		DefaultResult REJECT
	</AuthBy>
</Handler>

Požadavky domácích uživatelů

Accounting týkající se našich domácích uživatelů může přijít nejen z našich AP, ale teoreticky také z národního RADIUSu. V současnosti ale platí, že hostitelské organizace by neměli accounting posílat s ohledem na soukromí uživatelů.

Veškerý acounting ukládáme do lokálního souboru na každém jednom lokálním RADIUS serveru, ale také ho přeposíláme na stroj se jménem accounting.cesnet.cz. Tam dochází ke spojování dat z druhého RADIUS servereru a DHCP serveru, abychom v případě problémů byli schopni uživatele identifikovat na základě IP adresy která mu byla přidělena.

<Handler Request-Type=Accounting-Request,
         Realm=/^**cesnet\.cz**$|^**radius1\.cesnet\.cz**$/i>

  AcctLogFileName	/var/log/arch/radiator/radiator.**cesnet.cz**.%Y_%m_%d.acc

  <AuthBy RADIUS>
    <Host **accounting.cesnet.cz**>
       AuthPort        	1812
       AcctPort        	1813
       Secret          	**TAJEMSTVI**
    </Host>
  </AuthBy>

  PreProcessingHook sub { CUI::add(@_); };
  #AccountingHandled
</Handler>

Ověření identity a hesla uživatelů s realmem cesnet.cz, případně radius1.cesnet.cz se děje v sekci AuthBy jménem CheckLDAP, která je uvedena dále. Je podstatné, aby realmy byly zpracovávány bez ohledu na velikost písmen, jinak to vede zmatení uživatelů.

<Handler Realm=/^**cesnet\.cz**$|^**radius1\.cesnet\.cz**$/i>
  AuthBy		CheckLDAP
  AuthLog 		authlogger
  PostProcessingHook    sub { CUI::add(@_); };
</Realm>

Následující dva handlery jsou pro požadavky tunelované skrz TTLS respektive PEAP, tato konstrukce je vynucena vnitřní architekturou Radiatoru. Volání skriptu eap_acct_username.pl, slouží k tomu, aby se v Access-Accept paketech neobjevovala vnější anonymní identita.

<Handler TunnelledByTTLS=1>
  AuthBy		CheckLDAP
  AuthLog		authlogger

  PostProcessingHook 	file:"/etc/radiator/eap_acct_username.pl"
  PostAuthHook          sub { CUI::add(@_); };
</Handler>

<Handler TunnelledByPEAP=1>
  AuthBy		CheckLDAP
  AuthLog		authlogger

  PostProcessingHook 	file:"/etc/radiator/eap_acct_username.pl"
  PostAuthHook          sub { CUI::add(@_); };
</Handler>

Požadavky návštěvníků

Accouting týkající se našich návštěvníků může přijít jen z našich AP. Opět ho ukládáme lokálně, jen do jiného souboru:

<Handler Request-Type=Accounting-Request>
  AcctLogFileName	/var/log/arch/radiator/radiator.global.%Y_%m_%d.acc

a také ho posíláme našemu centrálnímu accounting systému:

  <AuthBy RADIUS>
    <Host **accounting.cesnet.cz**>
       AuthPort        	  1812
       AcctPort        	  1813
       Secret          	  **TAJEMSTVI**
    </Host>
  </AuthBy>

  PreProcessingHook sub { CUI::add(@_); };
</Handler>

Než k nám může od našich AP doputovat nějaký accounting o návštěvníkovi, tak musí předcházet ověření jeho identity. O to se postará národní RADIUS server. Pomocí atributu Operator-Name předáme národnímu RADIUSu a domovské organizaci informaci o tom kterou organizaci návštěvník navštívil, znak 1 musí být před realmem uveden, viz syntaxe atributu.

<Handler Realm=/^.+$/>
        <AuthBy RADSEC>
                Host                    radius1.eduroam.cz
                Secret                  radsec

                MaxFailedRequests       2
                MaxFailedGraceTime      0
                FailureBackoffTime      0

                UseTLS

                TLS_CAPath              /etc/ssl/certs
                TLS_CertificateFile     /etc/ssl/certs/ipsec_**certifikat**.crt.pem
                TLS_CertificateType     PEM
                TLS_PrivateKeyFile      /etc/ssl/private/ipsec_**certifikat**.key.pem

	        TLS_CRLCheck
	        TLS_CRLFile		/etc/ssl/certs/9b59ecad.r0
	        TLS_ExpectedPeerName	radius1.eduroam.cz

Odpověď na ověření návštěvníkovy identity ale musí být zkontrolována, jestli neobsahuje zakázané AV páry od návštěvníkova domovského RADIUS serveru, také jestli se nejedná o testovací účet. Jde tedy o kontrolu a úpravu AV párů, o to se stará skript check_reply.pl.

    ReplyHook file:"/etc/radiator/check_reply.pl"
  </AuthBy>

  AddToReplyIfNotExist    Tunnel-Private-Group-ID=1:1000
  AddToReply		  Tunnel-Type=1:VLAN,\
			  Tunnel-Medium-Type=1:Ether_802
  AddToRequestIfNotExists Operator-Name=1**cesnet.cz**
  AddToRequest            Chargeable-User-Identity=\000
</Handler>

Ověření identity uživatele a jeho oprávnění používat eduroam

Uživatelské účty jsou ukládány v LDAPu. Každý uživatel si musí před tím, než může eduroam používat, nastavit sekundární heslo určené jen pro tento účel. To, že tak může učinit, společně s tím, že nemá nastaven specielní atribut radiusDisabled, definuje jeho oprávnění eduroam používat.

<AuthBy LDAP2>
  Identifier              CheckLDAP

Radiator má implementovány dva mechanizmy, pomocí kterých se vyrovnává s tím, že uživatelské jméno obsahuje realm. Prvním je příkaz RewriteUsername, který umožňuje definovat regulární výraz určený k přepisu uživatelského jména. To bohužel působí problémy autentikačním mechanizmům jako je MSCHAP, které uživatelské jméno používají v chalenge-response mechanizmu při výpočtu otisku hesla.

Druhou možností je příkaz UsernameMatchesWithoutRealm, který způsobí, že se hledá uživatel jen na základě uživatelského jména, ale informace o realmu se neztrácí. Toto je správná funkce pro použití v eduroamu.

  UsernameMatchesWithoutRealm yes

LDAP je provozován na tom samém počítači jako RADIUS server. Má dedikovaného uživatele, který má oprávnění číst sekundární uživatelská hesla (uložená v atributu radiusPassword), ale současně nemá oprávnění číst uživatele, kteří mají eduroam zablokován atributem radiusDisabled (toto se děje na straně LDAP serveru prostřednictvím ACL).

Každý uživatel dále může mít definován atribut radiusTunnelPrivateGroupID určený k umístění uživatele do specifické VLAN. Tato funkce se používá pouze pro testovací účty.

  Host		          localhost

  AuthDN		  **uid=rad,ou=Special Users,dc=cesnet,dc=cz**
  AuthPassword		  **Tajemstvi**

  BaseDN		  **dc=cesnet,dc=cz**
  UsernameAttr		  uid
  PasswordAttr		  **radiusPassword**
  AuthAttrDef	          radiusTunnelPrivateGroupID, \
  			  Tunnel-Private-Group-ID, reply

Jsou podporovány různé typy EAP metod. S ohledem na chybu v software bezdrátových telefonů Cisco… musí být LEAP uveden jako první, protože jinak tyto nejsou schopny se ověřit.

V případě, že nechcete používate EAP-TLS tak je dobré nastavit EAPTLS_CAPath tak aby ukazoval na prázdný adreář. Uživatelům je pak znemožněno experimentovat s ověřovaním pomocí certifikátů.

Pokud používáte SureServer EDU, CESNET TCS anebo jinou CA která používá několik mezilehlých CA, tak místo EAPTLS_CertificateFile použijte EAPTLS_CertificateChainFile který musí obsahovat certifikát certifikátu následovaný řetězem mezilehlých CA. Viz diskuze v listu eduroam-admin.

  EAPType		  LEAP,PEAP,TTLS,MSCHAP-V2,MD5,MD5-Challenge
  EAPTLS_CAPath		  /etc/ssl/certs/prazdny-adresar
  EAPTLS_CertificateFile  /etc/ssl/certs/radius1.cesnet.cz.crt
  EAPTLS_CertificateType  PEM
  EAPTLS_PrivateKeyFile   /etc/ssl/private/radius1.cesnet.cz.key
  EAPTLS_MaxFragmentSize  1000
  EAPTLS_CRLCheck
  EAPTLS_CRLFile	  /etc/ssl/9b59ecad.r0
  AutoMPPEKeys
  EAPTLS_PEAPVersion	  0
  //**EAPAnonymous            %n**//
  SSLeayTrace		  1

Skript search_hook.pl zajištuje, aby uživatelé nemohli být příliš kreativní při vymýšlení vnější EAP identity, dovolená hodnota je jen anonymous@cesnet.cz.

  PostSearchHook	  file:"/etc/radiator/search_hook.pl"

V případě, že uživatel nemá nadefinován atribut radiusTunnelPrivateGroupID, tak

je do odpovědi přidán AV pár Tunnel-Private-Group-ID=1:100. Pokud ho definován má, hodnota je 1:666, tudíž se jedná o testovací účet. Další atributy jsou k odpovědi přidány vždy.

  AddToReplyIfNotExist	  Tunnel-Private-Group-ID=1:100
  AddToReply		  Tunnel-Type=1:VLAN,\
  			  Tunnel-Medium-Type=1:Ether_802
</AuthBy>

Konfigurace CUI

Chargeable-User-Identity (CUI) je unikátní identifikátor uživatele který IdP počítá pro každé SP. Pro výpočet se používá hash funkce, jejím vstupem je atribut Operator-Name, uživatelské jméno a sůl. CUI je implemntováno jako perlovský modul a je k dispozici na githubu.

Krom volání funkce CUI::add() pomocí správných hooků, jak je uvedeno výše. Je ještě třeba připravit mysql databázi a uvést její konfiguraci v souboru cui.cfg a v souboru cui_definitions_file nastavit vlastní hodnotu do proměné CUI_salt.

Databáze je využívána k dočasnému ukládání CUI a jejich doplňování do accounting paketů.

Přílohy

Kompletni konfigurace z tohoto clanku pro Raditator: radius.cfg.

Konfigurace Radiatoru používaná na TUL: tul-radius.tgz (27. 3. 2006). Za poskytnutí děkuji Petrovi Adamcovi.

Implemnetace CUI na githubu.

Skript search_hook.pl zajištuje aby uživatelé mohli jako vnější anonymní identitu použít pouze anonymous@cesnet.cz.

Skript check_reply.pl odstraňuje z odpovědí AV páry které by mohli ovlivnit chování AP.

Skript eap_acct_username.pl zajištuje aby v Access-Accept paketech v User-Name byla skutečná identita uživatele nikoliv anonymní vnější identita.

Skript Skript patch_accounting.pl je další zajímavá ukázka hooku Radiatoru. Slouží na národním serveru k přidávání realmu do Access-Accept paketů.

Poslední úprava:: 2018/09/20 17:15