Obsah

radsecproxy

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.

Konfigurace radsecproxy

Nová generace národního RADIUSu uznává pro RadSec/IPsec spojení pouze certifikáty vydané autoritami eduroam CA 2 a eduPKI CA G 01!

Certifikáty od TCS a eduroam CA neobsahují požadované OID politiky, proto v nové generaci národního RADIUSu nejsou podporovány.

Servery nové generace národního RADIUSu používají certifikáty od eduPKI CA G 01, proto je třeba jí důvěřovat.

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!"
}

Ladění

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