Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
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 RADIUSu. V 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ů. | ||
- | |||
- |