====== Instalace FreeRADIUSu 3.x.x pro eduroam ====== Návod Vás provede instalací RADIUS serveru [[http://freeradius.org|FreeRADIUS 3.x]] na operačních systémech Debian GNU/Linux Buster a CentOS 7 (RHEL 7). RADIUS server je potřebný pro zapojení do //eduroam// infrastruktury. Použitá ověřovací metoda je PEAP s protokolem MS-CHAPv2. V případě, že jste zkušený správce linuxových systémů a používáte Debian, můžete využít automatizovanou instalaci pomocí Ansible: [[cs:spravce:pripojovani:radius:freeradius_playbook]] ===== Debian ===== ==== Buster ==== Buster obsahuje verzi 3.0.17, která trpí [[https://www.eduroam.cz/cs/spravce/pripojovani/radius/freeradius3#buginbound_radiustls_connection_stalls| chybou]], nicméně na základě [[https://random.cesnet.cz/mailman/private/eduroam-admin/2019-July/002654.html|experimetnů]] se zdá že v Debianu je tato chyba odstraněna. ==== Stretch ==== Stretch obsahuje verzi 3.0.12+dfsg-5+deb9u1 která je použitelná pro malé insituce typu střední školy, pokud zkrátí lifetime jak je popsáno v sekci o [[https://www.eduroam.cz/cs/spravce/pripojovani/radius/freeradius3#bug%EF%BF%BCfail_to_read_multiple_packets_from_an_ssl_session|chybách FreeRADIUSu]]. ==== Upozornění na upgrade radius z Debianu 3.0.12 na 3.0.17 ==== Pokud upgradujete Debian 9 na verzi 10 (3.0.12 => 3.0.17), pak je potřeba po upgradu provést změny na SQL serveru. - Dočasně vypnout [[https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sql-mode-strict|striktní mód]] - V tabulce **cui** a **radpostauth** natáhnout délku CUI sloupce v databázi na **128**. Výsledný sloupec by měl vypadat takhle: `cui` varchar(128) NOT NULL default ′′ ==== Bullseye ==== Verze FreeRadiusu 3.0.21 byla otestována s návodem níže a lze ji doporučit. ===== CentOS 7 (RHEL 7) ===== [[http://freeradius.org|FreeRADIUS 3.x]] je součástí základní distribuce. Nainstalujte balíček serveru a pomocných nástrojů: yum -y install freeradius freeradius-utils freeradius-sqlite Na rozdíl od níže uvedeného návodu, kde jsou konfigurační soubory v adresáři ''/etc/freeradius/3.0'', se konfigurační soubory nacházejí v adresáři ''/etc/raddb''. V RHEL 7 je FreeRADIUS 3.0.4, tento návod vznikl primárně na verzi 3.0.11. Ve verzi 3.0.5 došlo ke [[https://github.com/FreeRADIUS/freeradius-server/blob/v3.0.x_state_tree/raddb/radiusd.conf.in#L122|změně escapování regulárních výrazů]]. Pokud kopírujete z tohoto návodu tak budete muset tam kde je v regulárním výrazu "\" dát "\\". ====== Konfigurace freeRADIUS 3.x ====== ===== Zásady konfigurace ===== Při změnách hodnot v konfiguračních souborech buďte opatrní na uvedené rozsahy hodnot. Pokud je někde napsáno že hodnota může být od 2 to 10 tak to znamená že jiné hodnoty nebudou akceptovány a freeRADIUS najede s nějakým defaultem. Při konfiguraci se zdržte zálohování konfiguračních souborů do stejného adresáře, kde budou i změněné soubory. Freeradius v implicitním nastavení z některých adresářů načítá veškeré soubory! To může mít za následek neočekáváné chování celého serveru. Ve skutečnosti nejsou načítány všechny soubory, ale pouze takové, které obsahují platné znaky - alfanumerické znaky, pomlčka, podtržítko, pomlčka a tečka, která nesmí být prvním znakem jména souboru. Oveření načítaných konfiguračních souborů je možné provést příkazem: freeradius -XC | grep including Všechny soubory z načítaných adresářů z příkazu výše je možné vylistovat pomocí příkazu: ls $(freeradius -XC | grep including | grep 'files in directory' | awk '{ print $NF }') ===== Hlavní konfigurační soubor ===== V souboru ''/etc/freeradius/3.0/radiusd.conf'' najděte následující dvě hodnoty a upravte je jak uvádíme: cleanup_delay = 10 auth = yes ta první zajistí že že freeRADIUS je schopen zpracovat autentizační požadavky dlouhé i 10s, to pomůže když se vám v logu objevují hlášení ''No EAP session matching the State variable''. Druhá volba zajistí logování úspěšných autentizací do /var/log/freeradius/radius.log ===== Lokální ověřování požadavků ===== Pro lokální ověřování uživatelů musíte nastavit domácí realm, získat certifikát, kterým se bude radius představovat uživatelům, a přidat sdílené heslo pro komunikaci mezi radius serverem a siťovými prvky (bezdrátové body, přepínače). ==== Konfigurace realmů ==== Směrování požadavků se konfiguruje v souboru ''/etc/freeradius/3.0/proxy.conf''. Nastavte tento soubor tak, aby požadavky s vaším realmem považoval za lokální požadavky a aby požadavky bez realmu zamítal. Dále nastavte že všechny požadavky budou směrovány na ''tls'' auth_pool který budeme konfigurovat později. realm domaci-realm.cz { } realm LOCAL { } realm NULL { virtual_server = auth-reject } #realm DEFAULT { #} realm "~.+$" { status_check = status-server auth_pool = tls nostrip } ==== Konfigurace EAP pro ověřování uživatelů ==== Doporučená konfigurace předpokládá použití PEAP-MSCHAPv2. V dalším textu předpokládáme použití stejného certifikátu pro PEAP a pro RadSec (ten se konfiguruje níže), není to ale podmínkou. Privátní klíč a certifikát uložte do /etc/freeradius/3.0/certs/ a tajnému klíči nastavte vlastníka a skupinu na freerad s právy 0640 (aby nebyl čitelný pro běžné uživatele či programy v systému). Na systéch CetOS/RHEL použijte uživatele radiusd. V případě že certifikát RADIUS serveru vydala mezilehlá CA, která není běžně předinstalována je třeba ji přidat do souboru ''radius.crt'' za certifikát RADIUS serveru. To se týká např. TCS certfikátů poskytovaných CESNETem. Je to potřeba udělat pro všechny používané klíče a certifikáty. chown root:freerad chmod 0640 chown root:freerad chmod 0640 V souboru ''/etc/freeradius/3.0/mods-available/eap'' nastavte vlastní soubory s certifikáty pro PEAP. Zakomentujte ''ca_path''. Změnte defaultní EAP metodu z MD5 na PEAP, tím přestane FR nabízet MD5 jako první metodu a zabavíte se varování "server is offering unsafe method MD5-Challenge" v monitoringu. Dále nastavujeme maximální verzi TLS na 1.2, implemetace TLS 1.3 není pro EAP standartizovaná a některé kombinace klient-server způsobí selhávání v ověřování. Zvažte vypnutí TLS < 1.2, předchozí verze protokolu mají známe bezpečnostní chyby. eap { ... default_eap_type = peap ... tls-config tls-common { # tajny klic private_key_file = ${certdir}/radius.key ... # certifikat ke klici certificate_file = ${certdir}/radius.crt ... ca_file = ${cadir}/geant_ov_rsa_ca_4.pem ... #ca_path = ${cadir} tls_min_version = "1.2" tls_max_version = "1.2" } } ==== Kontrola shody vnější a vnitřní EAP identity ==== Ačkoli konfigurace vlastního ověřování je popsána dále, podle použité uživatelské databazáze, tak kontrolu shody vnější a vnitřní EAP identity konfigurujeme shodně. V souboru ''/etc/freeradius/3.0/sites-enabled/inner-tunnel'' odkomentujte řádek s ''filter_inner_identity'': ... authorize { ... filter_inner_identity .. } Následně v souboru ''/etc/freeradius/3.0/policy.d/filter'' ve funkci ''filter_inner_identity'' upravte kontrolu anonymí identity. V defaultu freeRadius má uvedeno ''if (&outer.request:User-Name !~ /^(anon|@)/)'' to znamená že akceptuje uživatelská jména s prefixem anon a uživatelům to skýtá jistou volnost, např. anon1@realm.cz, anon2@realm.cz, ... a @realm.cz. To komplikuje blokování v případě bezpečnostních incidentů. Umožněte pouze anonymous@realm.cz: ... filter_inner_identity { ... if (&outer.request:User-Name != &User-Name) { # # Get the outer realm. # if (&outer.request:User-Name =~ /@([^@]+)$/) { update request { Outer-Realm-Name = "%{1}" } # # When we have an outer realm name, the user portion # MUST either be empty, or begin with "anon". # # We don't check for the full "anonymous", because # some vendors don't follow the standards. # if (&outer.request:User-Name !~ /^anonymous@/) { update request { Module-Failure-Message = "User-Name is not anonymized" } reject } } ... Celý soubor je k dispozici na adrese [[https://raw.githubusercontent.com/CESNET/ansible-freeradius/master/files/filter]] == FreeRADIUS 3.0.4 == Pokud používáte verzi FR nižší než 3.0.12, tak vám výše uvedené nebude fungovat. Na RHEL 7 a odvozených distribucích máte k dispozici verzi 3.0.4, kde v ''policy.d/filter'' chybí definice funkce filter_inner_identity. Vezměte si novější verzi [[https://github.com/FreeRADIUS/freeradius-server/blob/v3.0.x/raddb/policy.d/filter|z GitHubu]]. Při kopírování je třeba nezapomenout na nutnost zdvojení zpětných lomítek, viz začátek tohoto dokumentu. Dále je potřeba do lokálního souboru ''dictionary'' přidat: ATTRIBUTE Outer-Realm-Name 1218 string ATTRIBUTE Inner-Realm-Name 1219 string ==== Přiřazení VLAN vlastním uživatelům ==== V souboru ''sites-enabled/inner-tunnel'' přidejte do sekce ''post-auth'' přiřazení VLAN, hodnotu 300 nahraďte požadovaným číslem VLAN: post-auth { ... update outer.session-state { Tunnel-Type := VLAN Tunnel-Medium-Type := IEEE-802 Tunnel-Private-Group-Id := 300 } ... } ==== Zamítání chybných realmů ==== Často se objevují realmy myabc.com, 3gppnetwork.org, ... také se objevuje mezera za realmem (androidí klávesnice a doplňování). Uživatele kteří udělají takovou chybu není možné ověřit a je lepší je odfiltrovat co nejdříve. Stáhněte si soubor [[https://github.com/CESNET/ansible-freeradius/blob/master/files/eduroam-realm-checks|eduroam-realm-checks]] do ''/etc/freeradius/3.0/policy.d/'' a potom v ''/etc/freeradius/3.0/sites-enabled/default'': authorize { filter_eduroam_realms ... } Když některé z pravidel požadavek uživatele zamítne, uvidíte to v log souboru. Viz příklad níže kde byl požadavek zamítnut protože realm byl doplněný mezerou.: Sun Feb 5 17:04:57 2017 : Auth: (2256) Invalid user (Rejected: User-Name contains whitespace): [netsaint@cesnet.cz ] (from client ermon port 0 cli 70-6F-6C-69-73-68) ==== Definice AP klientů ==== RADIUS server důvěřuje pouze klientům uvedeným v souboru ''/etc/freeradius/3.0/clients.conf'', kteří znají sdílené heslo. Neopoužívejte krátké sdílené heslo, zajištuje integritu RADIUS požadavků mezi AP a RADIUS serverem. RADIUS protokol není šifrovaný. V případě použití Cisco WLC stačí povolit jen jednu IP adresu pro managment interface. client sit_s_ap { secret = shortname = aps ipaddr = 192.168.10.0/24 add_cui = yes Operator-Name = 1 } Vždy uveďte znak ''1'' před vaším realmem, více informací viz [[https://tools.ietf.org/html/rfc5580#page-12|RFC5580]]. Direktiva ''add_cui = yes'' zajistí přidání atributu ''Chargeable-User-Identity = 0x00'' to společně s definovaným Operator-Name způsobí že IdP (ať už vaše, nebo cizí) vypočte a v Access-Accept odpovědi pošle unikátní hodnotu attributu ''Chargeable-User-Identity'' pro uživatele na konkrétním SP. ===== Ověřování eduroam požadavků ===== Je potřeba zajistit směrování požadavků z cizích realmů, vytvořit lokální testovací účet pro [[https://ermon.cesnet.cz/|monitoring eduroam síťě]] a nastavit filtrování "škodlivých" atributů přicházejících od cizích radius serverů. ==== Konfigurace RadSecu ==== Samotný RADIUS protokol se nepovažuje za bezpečný, proto je komunikace mezi RADIUSy transportována RadSec protokolem (TLS tunelem). Všechny požadavky pro cizí realmy jsou pak přesměrovány do tohoto tunelu. Pro samotný tunel zde používáme ten samý certifikát jako pro PEAP protokol, jsou [[cs:spravce:pripojovani:serverove_certifikaty|akceptovány certifikáty]] od několika málo CA. RadSec tunel používá dvě TCP spojení: :2083 :2083 === Aktivace radsec protokolu ve FR3 === ln -s /etc/freeradius/3.0/sites-available/tls /etc/freeradius/3.0/sites-enabled/tls Upravte soubor ''/etc/freeradius/3.0/sites-available/tls'' pro komunikaci mezi naším a národním RADIUS serverem. Pro obě výše zmíněná TCP spojení použijeme stejný certifikát, a proto bude certifikát v souboru zmíněn dvakrát. Poprvé v sekci ''listen'' (příchozí spojení od národního serveru) a podruhé v sekci ''home_server tls''. Na rozdíl od PEAP (zmíně výše) je zde potřeba pro ''ca_file'' uvést soubor [[https://pki.cesnet.cz/certs/chain_CESNET_CA4.pem|chain_CESNET_CA4.pem]], který získáte na adrese [[https://pki.cesnet.cz/cs/ch-cca-crt-crl.html|https://pki.cesnet.cz/]], protože obsahuje veřejné klíče, pomocí kterých bude náš server ověřovat certifikát protistrany (tj. národního RADIUS serveru), který je podepsán právě autoritou CESNET_CA4. Definice cerifikátů pro naslouchání na lokálním portu 2083:\\ //Zvažte vypnutí TLS < 1.2, předchozí verze protokolu mají známe bezpečnostní chyby.// listen { ... # redukce casteho navazovani a ukoncovani spojeni z/na narodni RADIUS lifetime = 0 idle_timeout = 600 ... tls { private_key_file = certificate_file = ca_file = ${cadir}/chain_CESNET_CA4.pem ... tls_min_version = "1.2" tls_max_version = "1.2" } } Nadefinujte klienta národního RADIUS serveru v sekci clients radsec { client radius1.eduroam.cz { ipaddr = 195.113.187.22 proto = tls secret = radsec # redukce casteho navazovani a ukoncovani spojeni z/na narodni RADIUS limit { max_connections = 16 lifetime = 0 idle_timeout = 600 } } ... } V této konfiguraci se historicky může vyskytovat sdílené tajemství ''secret = mysecret''. Veškeré nové instalace používají ''secret = radsec''. Správné tajemství pro váš server naleznete v [[https://admin.eduroam.cz/|administrativní aplikaci]] u detailu vašeho RADIUS serveru (položka "Sdílené tajemství pro národní RADIUS server"). V případě, že provádíte rekonfiguraci starší instalace RADIUS serveru se sdíleným tajemstvím ''secret = mysecret'', požádejte o změnu sdíleného tajemství v naší konfiguraci na novější variantu. Definice certifikátů pro klienta národního RADIUS serveru, kterého přiřaďte k RadSec tunelu (podruhé použití zmíněných klíčů a ca_file) a upravte parametry tak aby nadřazený RADIUS nemohl být označen jako nefunkční:\\ //Zvažte vypnutí TLS < 1.2, předchozí verze protokolu mají známe bezpečnostní chyby.// home_server tls { ipaddr = radius1.eduroam.cz response_timeouts = 1000 response_window = 30 zombie_period = 120 revive_interval = 60 port = 2083 type = auth secret = radsec proto = tcp status_check = none tls { private_key_file = certificate_file = ca_file = ${cadir}/chain_CESNET_CA4.pem ... tls_min_version = "1.2" tls_max_version = "1.2" } ... } === Bug: Fail to read multiple packets from an SSL session. === Všechny verze FreeRADIUSu >=3.0 & <3.0.16 mají chybu kdy nejsou schopny přečíst z TCP socketu víc než jeden UDP paket, to vede k tomu že se autentizace roamujících uživatelů zpomalí případně zcela znemožní. Správným řešením je nasazení patchnuté verze ({{:cs:spravce:pripojovani:radius:read-multiple-packet-from-radsec.patch.zip|}}). Malé instituce mohou vystačit se snížením [[https://github.com/CESNET/ansible-freeradius/blob/master/templates/tls.j2#L49|lifetime]] z nekonečna na 600s v souboru ''sites-enabled/tls.conf''. **Debian Stretch**: Vyplněný [[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=880913|bugreport #880913]], čeká na vydání verze 3.0.16. **RHEL**: Vyplněný [[https://bugzilla.redhat.com/show_bug.cgi?id=1630684|bug 1630684]]. Je k dispozici balíček od Petra Vaníčka: 2e4897aabc0cce34f8ad5bda53f974149c08bc3d1ea6c9c8b05c9e59143a0878 [[http://pva.utia.cas.cz/freeradius-3.0.13tlspatch.tar.gz|freeradius-3.0.13tlspatch.tar.gz]] Diskuze v listu [[https://random.cesnet.cz/mailman/private/eduroam-admin/2017-November/001382.html|eduroam-admin]]. === Bug: inbound RADIUS/TLS connection stalls === **Nepoužívejte verzi 3.0.17** má chybu [[https://github.com/FreeRADIUS/freeradius-server/issues/2270|inbound RADIUS/TLS connection stalls]] projevuje se to hláškami v logu: (0) Failed writing 0 bytes to SSL BIO: -1 (0) Application data status 4 Na základě [[https://random.cesnet.cz/mailman/private/eduroam-admin/2019-July/002654.html|experimetnů]] se zdá že Debian Buster má upravenou verzi, která tímto problémem netrpí. ==== Přiřazení konkrétní VLAN návštěvníkům ==== V souboru ''sites-enabled/default'' v sekci ''post-proxy'' uveďte přiřazení VLAN, číslo 200 nahraďte vaším požadovaným číslem VLAN: post-proxy { ... if ("%{proxy-reply:Packet-Type}" == "Access-Accept") { update proxy-reply { Tunnel-Type := VLAN Tunnel-Medium-Type := IEEE-802 Tunnel-Private-Group-Id := 200 } } ... ==== Konfigurace Operator-Name ==== Attribut ''Operator-Name'' slouží k indentifikaci SP odkud pochází požadavky na autentizaci uživatelů. V souboru ''/etc/freeradius/3.0/sites-available/default'' odkomentujte volání funkce ''operator-name'': authorize { .. operator-name .. } Dále je třeba správně nakonfigurovat posílání atributu ''​Operator-Name'' ​u každého klienta ​vašeho RADIUS serveru ​v [[https://www.eduroam.cz/cs/spravce/pripojovani/radius/freeradius3#definice_ap_klientu|souboru clients.conf]]. ==== Konfigurace Chargeable-User-Identity ==== Chargeable-User-Identity (CUI) je vypočítaný atribut, který se počítá jako SHA1 hash z vnitřní EAP identity, hodnoty atributu Operator-Name který posílá SP a soli. Uživatel nedovede hodnotu CUI změnit a tak má SP k dispozici unikátní identitikátor pro případné blokování uživatele. Současně ale SP různých organizací (podle hodnoty Operator-Name) dostávají různé hodnoty CUI pro jednoho uživatele a není tak narušeno soukromí uživatele. V souboru ''policy.d/cui'' zvolte náhodný řetězec ''cui_hash_key'' - pokud provozujete v organizaci více RADIUS serverů, musí mít všechny tuto hodnotu shodnout, aby poskytovali pro jednoho uživatele tu samou hodnotu CUI. Dále v tom samém souboru nastavte ''cui_require_operator_name = yes'', tím zajistíte že CUI bude váš RADIUS posílat pouze těm SP, kteří vyplňují Operator-Name. Aktivujte modul CUI: cd /etc/freeradius/3.0/mods-enabled ln -s ../mods-available/cui . V souboru ''/etc/freeradius/3.0/sites-enabled/inner-tunnel'' aktivujte ''cui-inner'': post-auth { cui-inner ... V souboru ''/etc/freeradius/3.0/sites-enabled/default'' aktivujte ''cui'': authorize { ... cui ... accounting { ... cui ... post-auth { ... cui ... pre-proxy { ... cui ... Pokud máte k dispozici více ruzných realmů (realm1.cz a realm2.cz), které sdílí uživatelské účty, je nutné, aby pro libovolné uživatelské jméno byla hodnota cui stejná pro včechny realmy. Docílíte toho následující konfigurací. V souboru ''/etc/freeradius/3.0/policy.d/cui'' změňte definici proměnné ''&Chargeable-User-Identity'' v bloku ''cui.post-auth'': cui.post-auth { if (!&control:Proxy-To-Realm && &Chargeable-User-Identity && !&reply:Chargeable-User-Identity && \ (&Operator-Name || ('${policy.cui_require_operator_name}' != 'yes')) ) { update reply { &Chargeable-User-Identity = "%{sha1:${policy.cui_hash_key}%{tolower:%{Stripped-User-Name}%{%{Operator-Name}:-}}}" } } ==== Normalizace MAC adres ==== Formáty adres můžou být různé - pro zjednodušení můžeme využít normalizaci MAC adres na jediný formát, se kterým budeme následně adresy porovnávat. Přidáme definici normalizace (volání fce ''rewrite_calling_station_id'') do souboru ''/etc/freeradius/3.0/sites-enabled/default'' do sekcí authorize a preacct: authorize { filter_eduroam_realms filter_username rewrite_calling_station_id ... } ... preacct { preprocess rewrite_calling_station_id ... } ==== Konfigurace F-TICKS ==== Vytvořte soubor ''/etc/freeradius/3.0/mods-available/f_ticks'' s obsahem: linelog f_ticks { filename = syslog #syslog_facility = local0 #syslog_severity = info format = "" reference = "f_ticks.%{%{reply:Packet-Type}:-format}", f_ticks { Access-Accept = "F-TICKS/eduroam/1.0#REALM=%{Realm}#VISCOUNTRY=CZ#VISINST=%{Operator-Name}#CSI=%{Calling-Station-Id}#CUI=%{reply:Chargeable-User-Identity}#RESULT=OK#" Access-Reject = "F-TICKS/eduroam/1.0#REALM=%{Realm}#VISCOUNTRY=CZ#VISINST=%{Operator-Name}#CSI=%{Calling-Station-Id}#CUI=%{reply:Chargeable-User-Identity}#RESULT=FAIL#" } } Aktivujte ho: cd /etc/freeradius/3.0/mods-enabled ln -s ../mods-available/f_ticks A začněte ho používat v ''/etc/freeradius/3.0/sites-available/default'', pokud budete chtít odfiltrovat monitoring tak volejte ''reply_log'' a ''f_ticks'' podmíněně, viz následující sekce. post-auth { .. reply_log f_ticks .. } ==== Vyloučení monitoringu z detailních logů ==== end2end monitoring prováděný nagiosem produkuje relativně dost logů, lze je odfiltrovat v souboru ''/etc/freeradius/3.0/sites-available/default''. V sekcích authorize, authenticate, pre-proxy a post-proxy přidejte podmínku, která ermon odfiltruje na základě prefixu MAC adresy kterou používá. Tj. z explicitního logování se stane logování podmíněné v případě že se jedná o monitoring, např: .. authorize { .. # exclude monitoring records from auth_logs if (Calling-Station-Id !~ /^70-6F-6C-6/) { auth_log } .. } .. authenticate { .. Auth-Type eap { eap { handled = 1 } # record access-chalenge & exclude monitoring records from log if (handled && Calling-Station-Id !~ /^70-6F-6C-6/) { reply_log.post-auth handled # override rcode (maybe superfluous) } } .. } .. post-auth { .. # exclude monitoring records from logs if (Calling-Station-Id !~ /^70-6F-6C-6/) { reply_log f_ticks } .. } .. pre-proxy { .. # exclude monitoring from log if (Calling-Station-Id !~ /^70-6F-6C-6/) { pre_proxy_log } } ==== Lokální testovací účet pro monitoring eduroam ==== Přidejte klienta, ze kterého probíhá testování. Do souboru ''/etc/freeradius/3.0/clients.conf'' přidejte sekci: client ermon.cesnet.cz { ipaddr = 195.113.233.246 secret = shortname = ermon add_cui = no Operator-Name = 1 } Vždy uveďte znak ''1'' před vaším realmem, více informací viz [[https://tools.ietf.org/html/rfc5580#page-12|RFC5580]]. Uvádějte váš realm, ermon simuluje další z AP ve vaší WiFi síti. Správce instituce získá ''sdilene_heslo'' po přihlášení do [[https://admin.eduroam.cz/|administrativní aplikace]] u detailu svého RADIUS serveru (položka "Sdílené tajemství pro monitoring"). V souboru ''/etc/freeradius/3.0/users'' vytvořte lokální testovací účet. U tohoto účtu nastavte atributy tak, aby síťový prvek (bezdrátový bod, přepínač) nasměroval klienta do VLAN 666. Ta by v české části eduroam neměla nikam vést, tudíž nejsou testovací účty zneužitelné pro běžné připojení: Cleartext-Password := "test_heslo" Tunnel-Type = VLAN, Tunnel-Private-Group-ID = 666, Tunnel-Medium-Type = IEEE-802, Fall-Through = Yes Pokud nechcete uložit heslo v nešifrované podobě, tak nahraďte atribut ''Cleartext-Password'' atributem ''NT-Password'' a heslo zašifrujte příkazem ''smbencrypt'' (na Debianu je součástí freeradius-utils). V souvislosti s testovacími účty potřebujete zajistit filtrování VLAN atributů z cizích institucí tak, aby hosté ve vaší síti padali do vámi nastavené VLAN. Následující úprava souboru ''/etc/freeradius/3.0/mods-config/attr_filter/post-proxy'' zajistí, že atribut s VLAN 666 bude propuštěn a ostatní VLANy budou odfiltrovány. V sekci DEFAULT na konci souboru přidejte: Tunnel-Type == VLAN, Tunnel-Private-Group-Id == 666, Tunnel-Medium-Type == IEEE-802 Celý soubor je ke stažení na adrese: [[https://raw.githubusercontent.com/CESNET/ansible-freeradius/master/files/post-proxy]] === Zkouška testovacího účtu === Funkci FreeRADIUS serveru lze otestovat nástrojem radtest (v souboru ''/etc/raddb/clients.conf'' musí být nadefinován client localhost se sdíleným klíčem testing123): radtest @domaci-realm.cz test_heslo 127.0.0.1 1812 testing123 Tento test zkouší pouze PAP, základní ověření funkce RADIUSu. Kompletní test lze provést pomocí [[https://www.eduroam.cz/cs/spravce/rad_eap_test|rad_eap_test]]. ===== Blokování uživatelů ===== Při blokování uživatelů postupujte podle platné [[:cs:roamingova_politika|eduroam politiky a doporučení pro členy eduroam.cz]]. ==== Blokování podle uživatelského jména ==== V souboru ''/etc/freeradius/3.0/sites-enabled/default'' přidáme do sekce authorize podmínku blokující uživatele. Definice adres musí být umísťena **před** volání modulu eap! if(User-Name == "problemovy_uzivatel@priklad.cz") { reject # odmitnuti pozadavku } ... eap { ok = return } ==== Blokování celého realmu ==== V souboru ''/etc/freeradius/3.0/sites-enabled/default'' přidáme do sekce authorize podmínku blokující uživatele konkrétního realmu. Definice adres musí být umísťena **před** volání modulu eap! if(User-Name == /^.*@problemovy_realm\.cz/) { reject # odmitnuti pozadavku } ... eap { ok = return } ==== Blokování podle MAC adresy ==== V souboru ''/etc/freeradius/3.0/sites-enabled/default'' přidáme do sekce authorize podmínku blokující adresu(y). Definice adres musí být umísťena **před** volání modulu eap! Můžeme blokovat jednu nebo více konkrétních adres, lze využít i regulární výrazy: # blokovani konkretni adresy if (Calling-Station-Id == "12-34-56-78-AB-CD" ) { reject } # regularni vyraz if (Calling-Station-Id =~ /^12-34-56-78-AB-.*/ ) { reject } ... eap { ok = return } ==== Blokování podle Chargeable-User-Identity ==== V souboru ''/etc/freeradius/3.0/sites-enabled/default'' přidáme do sekce post-proxy podmínku blokující identitu(y). post-proxy { if ("%{proxy-reply:Packet-Type}" == "Access-Accept") { if ("%{proxy-reply:Chargeable-User-Identity}" == 'identifikator_problemove_identity' ) { update control { Auth-Type := "Reject" } reject } ... } Atribut Chargeable-User-Identity konkrétního uživatele je možné dohledat v generovaném F-TICKS logu (hodnota CUI) nebo v reply-detail log souborech. Soubory jsou uloženy v ''/var/log/freeradius/radacct/ip_adresa_protistrany/reply-detail-rok-mesic-den''. V těchto souborech jsou uloženy informace o Access-Accept paketech a jejich atributech, mezi nimiž by se měl vyskytovat právě i Chargeable-User-Identity. ===== Ostatní ===== ==== Když je vše v pořádku ==== Radius ověřuje požadavky na udp portu 1812 a na tcp portu 2083 přijímá požadavky z národního radiusu: # netstat -ltupn Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 4039/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 11685/master tcp 0 0 0.0.0.0:2083 0.0.0.0:* LISTEN 12137/freeradius tcp6 0 0 :::22 :::* LISTEN 4039/sshd udp 0 0 0.0.0.0:1812 0.0.0.0:* 12137/freeradius udp 0 0 0.0.0.0:1813 0.0.0.0:* 12137/freeradius udp 0 0 0.0.0.0:1814 0.0.0.0:* 12137/freeradius udp 0 0 127.0.0.1:4000 0.0.0.0:* 12137/freeradius udp 0 0 127.0.0.1:18120 0.0.0.0:* 12137/freeradius V navázaných spojeních jsou tři RadSec spojení z národního radiusu (počet se může měnit s ohledem na současné nastavení národního radiusu) a jedno spojení z lokálního radiusu (spojení z lokálního RADIUS serveru je navázáno až po příchodu požadavku): # netstat -t Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 radtest.ujep.cz:40569 radius1.eduroam.cz:2083 ESTABLISHED tcp 0 0 radtest.ujep.cz:2083 radius1.eduroam.c:48895 ESTABLISHED tcp 0 0 radtest.ujep.cz:2083 radius1.eduroam.c:51849 ESTABLISHED tcp 0 0 radtest.ujep.cz:2083 radius1.eduroam.c:35453 ESTABLISHED Přicházejí požadavky a radius vrací "Login OK" # tail -f /var/log/freeradius/radius.log (69) Thu Dec 5 21:35:38 2013 : Auth: Login OK: [test@vsb.cz] (from client ermon port 0 cli 70-6F-6C-69-73-68) === Test cizího účtu === Pokud není vyloučen z logování monitoring, uvidíte v logu průběžné ověřování. Můžete zkusit simulovat dotaz na cizí účet, avšak protože neznáte správné heslo, bude požadavek odmítnut. Se správným heslem bude požadavek akceptován, ale národní RADIUS tento test zablokuje vyfiltrováním hesla z access-requestu. Akce se hodí pro vyprovokování navázání spojení na národní RADIUS server (např. po restartu lokálního FreeRADIUS serveru): radtest test@vsb.cz HesloNevim 127.0.0.1 1812 testing123 Pro lepší otestování cizího účtu se hodí [[https://www.eduroam.cz/cs/spravce/rad_eap_test#testovani_na_lokalnim_radius_serveru_s_cizim_uctem_testovacim_uctem|rad_eap_test]]. ===== Napojení na systémy správy identit ===== * [[:cs:spravce:pripojovani:radius:freeradius3:local_account|Lokální účty na RADIUS server]] - neškálujete to, nedělejte to * [[:cs:spravce:pripojovani:radius:freeradius3:ldap|Napojení na klasický LDAP]] * [[:cs:spravce:pripojovani:radius:freeradius3:edirectory|Napojení na Novell eDirectory Server]] ===== Dokončení konfigurace ===== Po dokončení konfigurace je potřeba provést kontrolu syntaxe freeradius freeradius -XC Pokud předchozí akce nenahlásí žádnou chybu je potřeba restartovat démona /etc/init.d/freeradius restart Po těchto krocích by měl fungovat i test účet a po zhruba 10 minutách by se měl rozběhnout i RADSEC ===== Kontrola syntaxe konfiguračních souborů ===== Kontrolu syntaxe můžete vyvolat přímo pomocí: freeradius -XC nebo skriptem: /etc/init.d/freeradius configtest ===== Restart démona ===== V systému Debian restartujte démona příkazem: /etc/init.d/freeradius restart V systému CentOS/RHEL restartujte démona příkazem: systemctl restart radiusd.service Pouhý reload nemusí v některých případech změnit chování démona. ===== Debugování Freeradiusu ===== Nejdříve si ověřte, že freeradius neběží, a pak spusťte: freeradius -fxx -l stdout V případě, že byste potřebovali k debugu přidat aktuální časové údaje, aby bylo jasné, kdy se co dělo, můžete využít příkaz: freeradius -fxxx -l stdout Pozn. ''/etc/init.d/freeradius debug'' s aktivovaným radsecem nefunguje.