====== 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 [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 [[https://gitlab.cesnet.cz/708/public/eduroam/-/blob/main/radiator/old/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á skript [[https://gitlab.cesnet.cz/708/public/eduroam/-/blob/main/radiator/old/check_reply.pl|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
[[https://gitlab.cesnet.cz/708/public/eduroam/-/blob/main/radiator/old/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: [[https://gitlab.cesnet.cz/708/public/eduroam/-/blob/main/radiator/old/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 [[https://gitlab.cesnet.cz/708/public/eduroam/-/blob/main/radiator/old/search_hook.pl|search_hook.pl]] zajištuje aby uživatelé mohli jako vnější anonymní identitu použít pouze ''anonymous@cesnet.cz''.
Skript [[https://gitlab.cesnet.cz/708/public/eduroam/-/blob/main/radiator/old/check_reply.pl|check_reply.pl]] odstraňuje z odpovědí AV páry které by mohli ovlivnit chování AP. Odpovědi od národního RADIUS serveru musí být kontrolovány jestli neobsahují AV páry, které by mohly ovlivnit funkci našich AP. Současně také probíhá kontrola, jestli návštěvník není na našem blacklistu.
Skript [[https://gitlab.cesnet.cz/708/public/eduroam/-/blob/main/radiator/old/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 [[https://gitlab.cesnet.cz/708/public/eduroam/-/blob/main/radiator/old/patch_accounting.pl|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ů.