cs:spravce:pripojovani:radius:radiator

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revize Předchozí verze
Následující verze
Předchozí verze
cs:spravce:pripojovani:radius:radiator [2018/09/20 17:14]
jan.tomasek@cesnet.cz [Požadavky domácích uživatelů]
cs:spravce:pripojovani:radius:radiator [2024/05/17 12:15] (aktuální)
Jan Bělina
Řádek 11: Řádek 11:
 platforem. platforem.
  
-=====Úvod =====+===== Návrh nastavení radiatoru pro novou generaci eduroam ​=====
  
-Konfigurace,​ která zde bude popsána, je používána na CESNETím RADIUS +==== IdP role ====
-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 +<​code ​ini
-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:​ +
- +
-<​code>​ +
-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>​ +
-</​code>​ +
- +
-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. +
- +
-<​code>​+
 <​ServerRADSEC>​ <​ServerRADSEC>​
-        ​Secret radsec+        ​Identifier ​                             flr.eduroam.cz
  
-        ​UseTLS +        ​TLS_Protocols ​                          ​TLSv1.2,​ TLSv1.3 
-        ​TLS_CAPath ​             ​/etc/ssl/certs +        ​TLS_CertificateType ​                    PEM 
-        ​TLS_CertificateFile ​    /etc/ssl/certs/​ipsec_**certifikat**.crt.pem +        TLS_CertificateFile ​                    /path/to/certificate 
-        ​TLS_CertificateType ​    PEM +        ​TLS_PrivateKeyFile ​                     ​/path/to/key 
-        TLS_PrivateKeyFile ​     ​/etc/ssl/private/ipsec_**certifikat**.key.pem +        ​TLS_CAFile ​                             ​/path/to/CA/file 
-         +        ​#​TLS_CAPath ​                             /​path/​to/​CA/​folder 
-        ​TLS_RequireClientCert+        ​#​TLS_CRLCheck ​                           True
  
- TLS_CRLCheck +        Clients ​                                ​78.128.248.10 
- TLS_CRLFile /​etc/​ssl/​certs/​9b59ecad.r0 +        ​Clients ​                                78.128.248.11 
- TLS_ExpectedPeerName radius1.eduroam.cz+        ​Clients ​                                78.128.248.12 
 +        #​Clients ​                                ​2001:​718:​ff05:​aca::​1:​10 
 +        #​Clients ​                                ​2001:​718:​ff05:​aca::​1:​11 
 +        #​Clients ​                                ​2001:​718:​ff05:​aca::​1:​12
 </​ServerRADSEC>​ </​ServerRADSEC>​
-</​code>​ +... 
- +<Handler ​Realm=instituce.cz
-=====Roztřídění požadavků podle typu a realmu ===== +        ...
- +
-Radiator má možnost zpracovávat požadavky podle realmu díky +
-konstrukci:​ +
- +
-<​code>​ +
-<Realm cesnet.cz> +
-. +
-+
-+
-</Realm+
-</​code>​ +
- +
-Anebo podle jakékoliv hodnoty z požadavku konstrukcí:​ +
- +
-<​code>​ +
-<Handler attribute=value,​attribute=value, ....> +
-. +
-. +
-.+
 </​Handler>​ </​Handler>​
 +...
 </​code>​ </​code>​
-Druhá alternativa je podstatně flexibilnější,​ proto je také použita ve 
-zde prezentované konfiguraci. 
  
-==== Požadavky bez realmu ​====+==== SP role ====
  
-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.+<code ini> 
 +... 
 +<Client 78.128.248.234>​ 
 +        Identifier ​                             monitoring.eduroam.cz
  
-<code+        DupInterval ​                            0 
-<Handler Realm=/^$/> +        Secret ​                                 ​<monitoring secret
- <​AuthBy ​INTERNAL+</Client> 
- DefaultResult REJECT +... 
- </​AuthBy>​ +<​AuthBy ​RADSEC
-</​Handler>​ +        ​Identifier ​                             flr.eduroam.cz 
-</​code>​+        ​ProxyAlgorithm ​                         HashBalance 
 +         
 +        ​MaxFailedRequests ​                      3 
 +        MaxFailedGraceTime ​                     0 
 +        NoreplyTimeout ​                         8 
 +        KeepaliveTimeout ​                       35 
 +        KeepaliveNoreplyTimeout ​                4 
 +        UseStatusServerForFailureDetect ​        True
  
-==== Požadavky domácích uživatelů ====+        TLS_Protocols ​                          ​TLSv1.2,​ TLSv1.3 
 +        TLS_CertificateType ​                    PEM 
 +        TLS_CertificateFile ​                    /​path/​to/​certificate 
 +        TLS_PrivateKeyFile ​                     /​path/​to/​key 
 +        TLS_CAFile ​                             /​path/​to/​CA/​file 
 +        #​TLS_CAPath ​                             /​path/​to/​CA/​folder 
 +        #​TLS_CRLCheck ​                           True
  
-Accounting týkající se našich domácích uživatelů může přijít nejen z našich AP, ale +        Host                                    78.128.248.10 
-teoreticky také z národního RADIUSuV současnosti ale platí, že hostitelské organizace +        ​Host ​                                   78.128.248.11 
-by neměli accounting posílat s ohledem na soukromí uživatelů+        ​Host ​                                   78.128.248.12 
- +        #​Host ​                                   2001:​718:​ff05:​aca::​1:​10 
-Veškerý acounting ukládáme do lokálního souboru na každém jednom lokálním RADIUS +        #​Host ​                                   2001:​718:​ff05:​aca::​1:​11 
-serveru, ale také ho přeposíláme na stroj se jménem ''​accounting.cesnet.cz''​Tam dochází +        #​Host ​                                   2001:​718:​ff05:​aca::​1:​12 
-ke spojování dat z druhého RADIUS servereru a DHCP serveru, abychom v případě problémů +</AuthBy> 
-byli schopni uživatele identifikovat na základě IP adresy která mu byla přidělena. +... 
- +<Handler> 
-<code+        ... 
-<​Handler ​Request-Type=Accounting-Request,​ +        ​AuthBy ​                                 flr.eduroam.cz 
-         Realm=/​^**cesnet\.cz**$|^**radius1\.cesnet\.cz**$/i> +        ... 
- +        ​AddToRequestIfNotExist ​                 Operator-Name="​1instituce.cz" 
-  AcctLogFileName /​var/​log/​arch/​radiator/​radiator.**cesnet.cz**.%Y_%m_%d.acc +        ​AddToRequest ​                           Chargeable-User-Identity=\000 
- +        ...
-  <AuthBy RADIUS>​ +
-    <Host **accounting.cesnet.cz**> +
-       AuthPort ​       1812 +
-       ​AcctPort ​       1813 +
-       ​Secret ​         **TAJEMSTVI** +
-    </​Host>​ +
-  </​AuthBy>​ +
- +
-  PreProcessingHook sub { CUI::​add(@_);​ }; +
-  #​AccountingHandled+
 </​Handler>​ </​Handler>​
 +...
 </​code>​ </​code>​
- 
-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ů. 
- 
-<​code>​ 
-<Handler Realm=/​^**cesnet\.cz**$|^**radius1\.cesnet\.cz**$/​i>​ 
-  AuthBy CheckLDAP 
-  AuthLog authlogger 
-  PostProcessingHook ​   sub { CUI::​add(@_);​ }; 
-</​Realm>​ 
-</​code>​ 
- 
-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. 
- 
-<​code>​ 
-<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>​ 
- 
-</​code>​ 
- 
-==== 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: 
- 
-<​xterm>​ 
-<Handler Request-Type=Accounting-Request>​ 
-  AcctLogFileName /​var/​log/​arch/​radiator/​radiator.global.%Y_%m_%d.acc 
-</​xterm>​ 
- 
-a také ho posíláme našemu centrálnímu accounting systému: 
-<​xterm>​ 
-  <AuthBy RADIUS> 
-    <Host **accounting.cesnet.cz**>​ 
-       ​AuthPort ​         1812 
-       ​AcctPort ​         1813 
-       ​Secret ​           **TAJEMSTVI** 
-    </​Host>​ 
-  </​AuthBy>​ 
- 
-  PreProcessingHook sub { CUI::​add(@_);​ }; 
-</​Handler>​ 
-</​xterm>​ 
- 
-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. 
- 
-<​xterm>​ 
-<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 
-</​xterm>​ 
- 
-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]]. 
- 
-<​xterm>​ 
-    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>​ 
-</​xterm>​ 
- 
-===== 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. 
- 
-<​xterm>​ 
-<AuthBy LDAP2> 
-  Identifier ​             CheckLDAP 
-</​xterm>​ 
- 
-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. 
- 
-<​xterm>​ 
-  UsernameMatchesWithoutRealm yes 
-</​xterm>​ 
- 
-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. 
- 
-<​xterm>​ 
-  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 
-</​xterm>​ 
- 
-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]]. 
- 
-<​xterm>​ 
-  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 
-</​xterm>​ 
- 
-[[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''​. 
- 
-<​xterm>​ 
-  PostSearchHook  ​ file:"/​etc/​radiator/​search_hook.pl"​ 
-</​xterm>​ 
- 
-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. 
- 
-<​xterm>​ 
-  AddToReplyIfNotExist  ​ Tunnel-Private-Group-ID=1:​100 
-  AddToReply  ​ Tunnel-Type=1:​VLAN,​\ 
-    Tunnel-Medium-Type=1:​Ether_802 
-</​AuthBy>​ 
-</​xterm>​ 
- 
-===== 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ů. 
- 
- 
Poslední úprava:: 2018/09/20 17:14