====== Připojení k eduroam.cz: konfigurace Radiatoru ====== [[http://www.open.com.au/radiator/|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 [[cs:spravce:pripojovani:ipsec:uvod|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 Secret tajemstvi #AP01 Secret **tajemstvi123** #AP02 Secret **tajemstvi213** #AP03 Secret **tajemstvi321** # . # . # . # narodni radius server Secret **tajemstvi231** //**DupInterval 0**// # monitoring Secret **tajemstvi132** //**DupInterval 0**// Secret **TAJEMSTVI** 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. 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 =====Roztřídění požadavků podle typu a realmu ===== Radiator má možnost zpracovávat požadavky podle realmu díky konstrukci: . . . Anebo podle jakékoliv hodnoty z požadavku konstrukcí: . . . 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. DefaultResult REJECT ==== 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. AcctLogFileName /var/log/arch/radiator/radiator.**cesnet.cz**.%Y_%m_%d.acc AuthPort 1812 AcctPort 1813 Secret **TAJEMSTVI** PreProcessingHook sub { CUI::add(@_); }; #AccountingHandled 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ů. AuthBy CheckLDAP AuthLog authlogger PostProcessingHook sub { CUI::add(@_); }; 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 [[cs:spravce:pripojovani:radius:radiator:eap_acct_username.pl|eap_acct_username.pl]], slouží k tomu, aby se v ''Access-Accept'' paketech neobjevovala vnější anonymní identita. AuthBy CheckLDAP AuthLog authlogger PostProcessingHook file:"/etc/radiator/eap_acct_username.pl" PostAuthHook sub { CUI::add(@_); }; AuthBy CheckLDAP AuthLog authlogger PostProcessingHook file:"/etc/radiator/eap_acct_username.pl" PostAuthHook sub { CUI::add(@_); }; ==== 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: 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: AuthPort 1812 AcctPort 1813 Secret **TAJEMSTVI** PreProcessingHook sub { CUI::add(@_); }; 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 [[https://tools.ietf.org/html/rfc5580#page-12|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. 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á [[cs:spravce:pripojovani:radius:radiator:check_reply.pl|skript check_reply.pl]]. ReplyHook file:"/etc/radiator/check_reply.pl" 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 ===== 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. 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 //eduroam//u. 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 [[https://wiki.eduroam.cz/eduroam-admin/msg00478.html|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 [[cs:spravce:pripojovani:radius:radiator:search_hook.pl|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 ===== 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 [[https://github.com/CESNET/radiator-cui|github]]u. 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 [[https://github.com/CESNET/radiator-cui/blob/master/cui.cfg|cui.cfg]] a v souboru [[https://github.com/CESNET/radiator-cui/blob/master/cui_definitions_file|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: [[cs:spravce:pripojovani:radius:radiator:radius.cfg|radius.cfg]]. Konfigurace Radiatoru používaná na TUL: {{:cs:spravce:pripojovani:radius:radiator:tul-radius.tgz|tul-radius.tgz}} (27. 3. 2006). Za poskytnutí děkuji Petrovi Adamcovi. Implemnetace [[https://github.com/CESNET/radiator-cui/blob/master/cui_definitions_file|CUI na github]]u. Skript [[cs:spravce:pripojovani:radius:radiator:search_hook.pl|search_hook.pl]] zajištuje aby uživatelé mohli jako vnější anonymní identitu použít pouze ''anonymous@cesnet.cz''. Skript [[cs:spravce:pripojovani:radius:radiator:check_reply.pl|check_reply.pl]] odstraňuje z odpovědí AV páry které by mohli ovlivnit chování AP. Skript [[cs:spravce:pripojovani:radius:radiator:eap_acct_username.pl|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 [[cs:spravce:pripojovani:radius:radiator: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ů.