Pokud používáte jinou implementaci RADIUS serveru než je FreeRADIUS v3 anebo Radiator, může být zajímavou variantou zabezpečení RADIUS protokolu radsecproxy. Lze ji s úspěchem použít jako server vložený mezi RADIUS organizace a zbytek eduroam infrastruktury. radsecproxy lze přeložit pro Linux, BSD, OpenWRT a pomocí CygWin i na Windows. radsecproxy je také možné nasadit na linuxový server umístěný před Microsoft Windows Server, to je možné například pokud se vám nedaří odladit IPsec spojení s vaším Microsoft Windows Serverem.
Zapojení do eduroam infrastruktury pomocí radsecproxy je naznačeno fialovým serverem na obrázku nahoře, srovnejte s klasickým schématem zapojení.
Pokud se připojujete pouze v SP režimu, stačí vám pouze radsecproxy k přesměrovávání návštěvníků a není třeba další implementace RADIUSu.
radsecproxy je součástí běžných Linuxových distribucí. Pokud používáte nějakou speciální distribuci, budete si radsecproxy možná muset přeložit ze zdrojových kódu. Pro účely tohoto návodu se používá realm realm.cz. RADIUS server organizace je pojmenován radius.realm.cz a server na kterém běží radsecproxy se jmenuje radsec.realm.cz. Pochopitelně lze provozovat RADIUS a radsecproxy na tom samém serveru, pak je ale třeba, aby radsecproxy používal jiné UDP porty, než samotný RADIUS server.
RADIUS server instituce je nutné upravit tak, aby dotazy na cizí realmy posílal na radsecproxy poslouchající na radsec.realm.cz:UDP/1812
. radsecproxy se postará o přeposílání RADIUS paketů přes RadSec na flr[1-3].eduroam.cz:TCP/2083
. Odpovědi přicházejí na radsec.realm.cz:TCP/2083
, kde je radsecproxy opět převede na RADIUS pakety a předá je RADIUS serveru na radius.realm.cz:UDP/1812
.
Nejprve je třeba nastavit parametry TLS. Národní RADIUS používá certifikáty vydané eduPKI CA. Stáhněte soubor edupki-root-ca-cert.pem a umístěte jej do adresáře /etc/ssl/certs
.
Je důležité, aby CertificateFile
obsahoval certifikát, který bude mít v CN hodnotu radsec.realm.cz, doufám že to nikdo nevezme doslova… ;)
Následně vytvořte konfigurační soubor /etc/radsecproxy.conf
. Dále si popíšeme, co by měl obsahovat.
Pokud půjde o samostatný stroj, můžete tuto část zcela vynechat. Definice naslouchajících portů:
ListenUDP **radsec.realm.cz**:1812
Všechny servery i klienti jsou v tomto návodu definováni DNS jménem. Při spuštění radsecproxy proběhne překlad těchto jmen na IP adresy. Abychom zajistili použití správných adres, vynutíme verzi IP protokolu, kterou chceme používat (lze nastavovat i přímo u každého serveru/klienta zvlášť):
IPv4Only on #IPv6Only on
Výchozí nastavení TLS pro RadSec, které se použije pro klienty i servery:
tls default { CACertificateFile /etc/ssl/certs/edupki-root-ca-cert.pem CertificateFile /etc/ssl/certs/**certifikat**.crt CertificateKeyFile /etc/ssl/private/**certifikat**.key #CertificateKeyPassword **password** }
Tuto sekci budeme využívat pro odchozí požadavky na servery národního RADIUSu. Pokud odchozí požadavky nebudou obsahovat atribut Operator-Name, bude při odesílání doplněn. Apostrof před hodnotou pro radsecproxy znamená, že se má k hodnotě chovat jako k textovému řetězci. Ve starších verzích radsecproxy nebylo toto třeba, ba naopak, byla pak odesílána nesmyslná informace. Číslovka 1 před realmem je povinnou součástí hodnoty atributu. Příklad: SupplementAttribute 126:'1cesnet.cz
rewrite Operator-Name { SupplementAttribute 126:'1**realm.cz** }
Následuje definice domácího RADIUS serveru instituce. Na tento RADIUS budou přeposílány dotazy, které radsecproxy přijme po RadSec z eduroamu, tj. dotazy na ověření vlastních uživatelů instituce. Jako sdílené tajemství mezi RADIUSem a radsecproxy se v příkladu používá radsec2radius
, v realném nasazení použijte nějaký náhodný řetězec délky alespoň 15znaků. Volbu statuserver
povolte pokuď váš RADIUS server podporuje Status-Server (MS NPS ani Cisco ISE nepodporují).
server **radius.realm.cz** { Type UDP Secret **radsec2radius** #StatusServer on }
Definice domácího serveru v roli klienta, od kterého budeme akceptovat požadavky a přeposílat je na národní RADIUS:
client **radius.realm.cz** { Type UDP Secret **radsec2radius** }
Definice národního RADIUS serveru v rolích klient a server pro RadSec.
client flr1.eduroam.cz { Type TLS } client flr2.eduroam.cz { Type TLS } client flr3.eduroam.cz { Type TLS } server flr1.eduroam.cz { Type TLS StatusServer on RewriteOut Operator-Name } server flr2.eduroam.cz { Type TLS StatusServer on RewriteOut Operator-Name } server flr3.eduroam.cz { Type TLS StatusServer on RewriteOut Operator-Name }
Definice lokálního realmu, který bude předáván domácímu RADIUS serveru instituce.
realm **realm.cz** { server **radius.realm.cz** }
Zamítnutí relativně často se vyskytujících chyb:
realm /myabc\.com$/ { replymessage "Misconfigured client: default realm of Intel PRO/Wireless supplicant!" } realm /3gppnetwork\.org$/ { replymessage "Misconfigured client: Unsupported 3G EAP-SIM client!" } realm /\s+$/ { replymessage "Misconfigured client: Whitespace at the end!" }
Požadavky se správně vyhlížejícími jmény uživatelů/realmu budou předávány na národní RADIUS server:
realm /^.+@.+\..+$/ { server flr3.eduroam.cz server flr2.eduroam.cz server flr1.eduroam.cz }
A vše ostatní zamítneme:
realm * { replymessage "Misconfigured client: Invalid username or realm!" }
Pro ladění je vhodné spustit radsecproxy s přepínačem -f
, aby zůstala v popředí a bylo snadné sledovat výstup. Ten by měl vypada zhruba takto:
radsec:~# radsecproxy -f -d 3 createlistener: listening for udp on *:1812 createlistener: listening for tls on *:2083 connecttcphostlist: trying to open TCP connection to flr3.eduroam.cz port 2083 connecttcphostlist: trying to open TCP connection to flr2.eduroam.cz port 2083 connecttcphostlist: trying to open TCP connection to flr1.eduroam.cz port 2083 connecttcphostlist: TCP connection to flr2.eduroam.cz port 2083 up connecttcphostlist: TCP connection to flr1.eduroam.cz port 2083 up connecttcphostlist: TCP connection to flr3.eduroam.cz port 2083 up tlsconnect: TLS connection to flr3.eduroam.cz up tlsconnect: TLS connection to flr2.eduroam.cz up tlsconnect: TLS connection to flr1.eduroam.cz up tlsservernew: incoming TLS connection from 78.128.248.10 tlsservernew: incoming TLS connection from 78.128.248.12 tlsservernew: incoming TLS connection from 78.128.248.10 tlsservernew: incoming TLS connection from 78.128.248.11 tlsservernew: incoming TLS connection from 78.128.248.11 tlsservernew: incoming TLS connection from 78.128.248.12 tlsservernew: incoming TLS connection from 78.128.248.10 tlsservernew: incoming TLS connection from 78.128.248.12 tlsservernew: incoming TLS connection from 78.128.248.11
Ve výpisu je vidět, že radsecproxy navázala spojení na národní RADIUS servery a také že přijala spojení z národních RADIUS serverů. Dále je možné ověřit navázaná spojení:
radsec:~# netstat -n | grep 2083 # alternativa: ss -n | grep 2083 tcp 0 0 78.128.211.223:2083 78.128.248.10:54549 ESTABLISHED tcp 0 0 78.128.211.223:2083 78.128.248.12:47415 ESTABLISHED tcp 0 0 78.128.211.223:2083 78.128.248.11:42017 ESTABLISHED tcp 0 0 78.128.211.223:44735 78.128.248.10:2083 ESTABLISHED tcp 0 0 78.128.211.223:2083 78.128.248.11:52112 ESTABLISHED tcp 0 0 78.128.211.223:2083 78.128.248.10:40013 ESTABLISHED tcp 0 0 78.128.211.223:43235 78.128.248.11:2083 ESTABLISHED tcp 0 0 78.128.211.223:43951 78.128.248.12:2083 ESTABLISHED tcp 0 0 78.128.211.223:2083 78.128.248.10:49691 ESTABLISHED tcp 0 0 78.128.211.223:2083 78.128.248.12:39361 ESTABLISHED tcp 0 0 78.128.211.223:2083 78.128.248.11:47954 ESTABLISHED tcp 0 0 78.128.211.223:2083 78.128.248.12:55991 ESTABLISHED