cs:spravce:pripojovani:radius:freeradius3

Instalace FreeRADIUSu 3.x.x pro eduroam

Návod Vás provede instalací RADIUS serveru FreeRADIUS 3.x na operačních systémech Debian GNU/Linux Jessie 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: Instalace FreeRADIUSu 3 pro eduroam pomocí Ansible

Debian

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 chybách FreeRADIUSu.

Jessie

FreeRADIUS 3.x není součástí stré stabilní verze Debianu.

CESNETem udržovaný repozitář

Pokud nechcete překládat vlastní balíčky, můžete použít CESNETem udržovaný repozitář.

deb https://aaiwiki.cesnet.cz/deb/jessie ./

Kompilace balíčků

Pokud si budete brát zdrojáky z GITu je třeba dát pozor na různé bugy, viz dvě sekce “Bug:” na konci dokumentu.

mkdir -p /opt/src
cd /opt/src/
wget ftp://ftp.freeradius.org/pub/freeradius/freeradius-server-3.0.12.tar.gz
tar xvzf freeradius-server-3.0.12.tar.gz 
Příprava prostředí pro překlad
apt-get install ssl-cert build-essential debhelper  quilt autotools-dev libpam0g-dev libmysqlclient-dev libgdbm-dev libldap2-dev libsasl2-dev libiodbc2-dev libkrb5-dev libperl-dev libpcap-dev python-dev libreadline-dev libsnmp-dev libpq-dev libssl-dev libtalloc-dev libyubikey-dev libsqlite3-dev
Vygenerování balíčků
cd freeradius-server-3.0.12
fakeroot dpkg-buildpackage -b -uc

Vygenerované balíčky najdete v adresáři /opt/src/:

freeradius_3.0.12+git_amd64.deb
freeradius-common_3.0.12+git_all.deb
freeradius-dbg_3.0.12+git_amd64.deb
...
Instalace potřebných balíčků
dpkg -i freeradius_3.0.12+git_amd64.deb freeradius-common_3.0.12+git_all.deb freeradius-utils_3.0.12+git_amd64.deb libfreeradius3_3.0.12+git_amd64.deb freeradius-ldap_3.0.12+git_amd64.deb

CentOS 7 (RHEL 7)

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, 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 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/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/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/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.

chown root:freerad <soubor_s_klicem>
chmod 0640 <soubor_s_klicem>

V souboru /etc/freeradius/mods-available/eap nastavte vlastní soubory s certifikáty pro PEAP. Zakomentujte ca_file a ca_path a změnte defaultní EAP metodu z MD5 na PEAP.

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}/ca.pem
    ...
    #ca_path = ${cadir}
  }
}

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/sites-enabled/inner-tunnel odkomentujte řádek s filter_inner_identity:

...
authorize {
...
        filter_inner_identity
..
}

Následně v souboru /etc/freeradius/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 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 eduroam-realm-checks do /etc/freeradius/policy.d/ a potom v /etc/freeradius/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/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 = <stejne_heslo_nastavim_na_ap>
  shortname = aps
  ipaddr = 192.168.10.0/24
  add_cui = yes
  Operator-Name = 1<realm.cz>
}

Vždy uveďte znak 1 před vaším realmem, více informací viz 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 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 akceptovány certifikáty od různých CA.

RadSec tunel používá dvě TCP spojení:

<národní_radius> → <lokální_radius>:2083
<lokalní_radius> → <národní_radius>:2083 

Aktivace radsec protokolu ve FR3

ln -s /etc/freeradius/sites-available/tls /etc/freeradius/sites-enabled/tls

Upravte soubor /etc/freeradius/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 chain_CESNET_CA3.pem, který získáte na adrese 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_CA3.

Definice cerifikátů pro naslouchání na lokálním portu 2083:

listen {
...
         tls {
                   private_key_file = <soubor_klicem>
                   certificate_file = <soubor_s_certifikatem>
                   ca_file          = ${cadir}/chain_CESNET_CA3.pem
                   ...
         }
}

Nadefinujte klienta národního RADIUS serveru v sekci

clients radsec {  
         client radius1.eduroam.cz {   
                  ipaddr = 195.113.187.22 
                  proto = tls             
                  secret = radsec      
         }                   
...
}

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 CAAS (položka “Inf. RADIUS1 secret”). 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í:

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 = <soubor_klicem>
                   certificate_file = <soubor_s_certifikatem>
                   ca_file          = ${cadir}/chain_CESNET_CA3.pem
                   ...
         }
...
}

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í. Je to dobře vidět na matici dostupnosti - instituce které s tímto mají problém mají ve svislém sloupci rozházené červené, žluté čtverečky místo jednolité zelené.

Správným řešením je nasazení patchnuté verze (read-multiple-packet-from-radsec.patch.zip).

Malé instituce mohou vystačit se snížením lifetime z nekonečna na 600s v souboru sites-enabled/tls.conf.

Debian Stretch: Vyplněný bugreport #880913, čeká na vydání verze 3.0.16.

Debian Jessie: CESNETem provozovaný repositář obsahuje opravenu verzi.

RHEL: Vyplněný bug 1630684. Je k dispozici balíček od Petra Vaníčka: 2e4897aabc0cce34f8ad5bda53f974149c08bc3d1ea6c9c8b05c9e59143a0878 freeradius-3.0.13tlspatch.tar.gz

Diskuze v listu eduroam-admin.

Bug: inbound RADIUS/TLS connection stalls

Nepoužívejte verzi 3.0.17 má chybu 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

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/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 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íc než jeden RADIUS server, tak musí mít oba shodnout hodnotu tak aby oba vaše RADIUS servery 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/mods-enabled
ln -s ../mods-available/cui .

V souboru /etc/freeradius/sites-enabled/inner-tunnel aktivujte cui-inner:

post-auth {
	cui-inner
...

V souboru /etc/freeradius/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/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/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/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/mods-enabled
 ln -s ../mods-available/f_ticks

A začněte ho používat v /etc/freeradius/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/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/clients.conf přidejte sekci:

client ermon.cesnet.cz {
        ipaddr = 195.113.233.246
        secret = <sdilene_heslo>
        shortname = ermon
        add_cui = no
        Operator-Name = 1<realm.cz>
}

Vždy uveďte znak 1 před vaším realmem, více informací viz 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 CAAS:hradmin vyhledáním svého RADIUS serveru (položka “Mon. RADIUS1 secret”).

V souboru /etc/freeradius/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í:

<test_ucet> 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/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 <test_ucet>@domaci-realm.cz test_heslo 127.0.0.1 1812 testing123

Blokování uživatelů

Při blokování uživatelů postupujte podle platné eduroam politiky a doporučení pro členy eduroam.cz.

Blokování podle uživatelského jména

V souboru /etc/freeradius/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/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/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/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 dvě RadSec spojení z/na národní radius (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

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. 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

Napojení na systémy správy identit

Kontrola syntaxe konfiguračních souborů

Kontrolu syntaxe můžete vyvolat přímo pomocí:

radiusd -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

<note tip>Pouhý reload nemusí v některých případech změnit chování démona.</note>

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.

Poslední úprava:: 2019/02/05 12:39