Freeradius Migration 2to3
Steffen Klemer
Gesellschaft für Wissenschaftliche Datenverarbeitung Göttingen
2015-10-28
Steffen Klemer (GWDG) eduroam 2015-10-28 1 / 32
1 eduroam und RADIUS
2 Freeradius
3 Freeradius Version 3
4 Aktuelle Mobilsysteme
Steffen Klemer (GWDG) eduroam 2015-10-28 2 / 32
eduroam und RADIUS
Table of Contents
1 eduroam und RADIUS
2 Freeradius
3 Freeradius Version 3
4 Aktuelle Mobilsysteme
Steffen Klemer (GWDG) eduroam 2015-10-28 3 / 32
eduroam und RADIUS
Ein Beispiel
Deutschland (DFN)
Uni Hawaii
USA (Internet2)
Europa (SURFnet/ UNI-C)
Nordamerika (eduroam US)
Active Directorytop.gwdg.de
GWDG
Max.Musterhase
[email protected]@gwdg.de
Steffen Klemer (GWDG) eduroam 2015-10-28 4 / 32
eduroam und RADIUS
Einfacher
Bild von https://en.wikipedia.org/wiki/File:802.1X_wired_protocols.png
Steffen Klemer (GWDG) eduroam 2015-10-28 5 / 32
eduroam und RADIUS
Im Detail
1 Supplicant (Laptop) spricht
EAPoL (802.1X) mit NAS (AP/
Switch)
2 NAS verpackt EAP-Paket in
RADIUS, auf UDP Port 1812 zum
RADIUS Server
3 ggf. Proxy zum Heimat RADIUS
4 RADIUS Server bearbeitet es,
schickt ein Antwort Paket
5 AP entpackt das EAP Paket und
schickt es via EAPoL an den
Supplicant
6 …
7 RADIUS Server schickt ein
Access-Accept Paket
Vielen Dank an Alan Buxey für die Grafik.
⇒ Direkte EAP-Verbindung
zwischen Client und RADIUS
Server X
Steffen Klemer (GWDG) eduroam 2015-10-28 6 / 32
eduroam und RADIUS
TTLS, PEAP, MSCHAPv2
• EAP ist gar nicht verschlüsselt
• RADIUS-Verschlüsselung ist gebrochen
• ⇒ Zusätzlicher Crypto-Layer notwendig!
• 2 im Eduroam-Verbund gängige Verfahren:
• PEAP: EAP in TLS in EAP
• TTLS: EAP in RADIUS1 in TLS in EAP
• Im Tunnel dann (theoretisch) wieder ein beliebiges der >40EAP Varianten, meist:
• PAP (Klartext-Passwort)
• MSCHAPv2 (Challenge-Response Verfahren)
1korrekter: Diameter, der Nachfolger von RADIUS
Steffen Klemer (GWDG) eduroam 2015-10-28 7 / 32
eduroam und RADIUS
Beispiel: PEAP
Steffen Klemer (GWDG) eduroam 2015-10-28 8 / 32
eduroam und RADIUS
Ein RADIUS Paket
Access-Request packet from host 192.168.1.1 port 32769
User-Name = "[email protected]"
Calling-Station-Id = "04-f7-e4-ff-ff-ff"
Called-Station-Id = "54-78-1a-ff-ff-ff:eduroam"
NAS-Port = 13
NAS-IP-Address = 192.168.23.42
NAS-Identifier = "ap42"
Service-Type = Framed-User
Framed-MTU = 1300
NAS-Port-Type = Wireless-802.11
EAP-Message = 0x0206000fffff
State = 0xc9a6b068cda0a5e464ffffffffff
Steffen Klemer (GWDG) eduroam 2015-10-28 9 / 32
Freeradius
Table of Contents
1 eduroam und RADIUS
2 Freeradius
3 Freeradius Version 3
4 Aktuelle Mobilsysteme
Steffen Klemer (GWDG) eduroam 2015-10-28 10 / 32
Freeradius
Freeradius
• Der meist-verwendete RADIUS-Server 2
• Open Source/ Free Software (GPL v2)
• Extrem flexibel
• und entsprechend komplex zu
• verstehen
• konfigurieren
• debuggen
2Eigenwerbung
Steffen Klemer (GWDG) eduroam 2015-10-28 11 / 32
Freeradius
Freeradius #2
• Für Autorisierung, Authentifizierung und Accounting.
• Server und Proxy für RADIUS Pakete.
• Endpunkt für zahlreiche EAP-Varianten.
• Zahlreiche Backends (LDAP, SQL, Samba, CSV, Unix, Tokens,
Kerberos, PAM…).
• Frei programmierbar via Unlang Programmiersprache, Perl-
und Python-Module.
Steffen Klemer (GWDG) eduroam 2015-10-28 12 / 32
Freeradius
Freeradius: Konfiguration
• Konfiguration verteilt auf zahlreiche Dateien, u.a.
#> ls /etc/raddb/* # Auswahl!
eap.conf proxy.conf radiusd.conf
attrs.post-proxy hints sql.conf
attrs.pre-proxy ldap.attrmap users
huntgroups clients.conf
modules-enabled:
acct_unique expiration pap
attr_filter files perl
attr_rewrite inner-eap policy
chap ippool preprocess
checkval krb5 radutmp
counter ldap realm
cui linelog smbpasswd
detail logintime smsotp
digest mschap sradutmp
dynamic_clients ntlm_auth unix
exec pam
sites-enabled:
default eduroam wlan
Steffen Klemer (GWDG) eduroam 2015-10-28 13 / 32
Freeradius
Freeradius: Konfiguration #2
• Minimal-Config auf Anfrage bei mir und sicher auch dem
DFN, TU Clausthal…
• Puppet-Modul verfügbar3 (freeradius 3 als Beta4)
• Hat jemand Interesse eine eduroam-Variante des
puppet-Moduls zu erstellen?
3https://forge.puppetlabs.com/jgazeley/freeradius
4https://github.com/sklemer1/puppet-freeradius
Steffen Klemer (GWDG) eduroam 2015-10-28 14 / 32
Freeradius
Einige Erfahrungswerte
• Testen mit eapol_test aus der wpa_supplicant Distribution
• radiusd -X - Ausgabe komplett(!) lesen
• Nach und auch VOR dem Proxy Filtern. Nicht jeder SP verwirft
das von uns gesetzte VLAN/ QoS-Gruppe.
• Noch besser: Trennen von lokalem WLAN- und eduroam-Teil
in vhosts.
client tld1 {
ipaddr = 193.174.K.L
secret = secret
nastype = other
shortname = tld1
**virtual_server = eduroam**
}
Steffen Klemer (GWDG) eduroam 2015-10-28 15 / 32
Freeradius
vHOST-Trennung
Vielen Dank an Alan Buxey für die Grafik.
Steffen Klemer (GWDG) eduroam 2015-10-28 16 / 32
Freeradius
vHOST-Trennung
Vielen Dank an Alan Buxey für die Grafik.
Steffen Klemer (GWDG) eduroam 2015-10-28 16 / 32
Freeradius
Last auf LDAP/ SQL verringern
• Zahlreiche Radius-Pakete für den Aufbau der TLS-Verbindung
• ⇒ zahlreiche (nutzlose) LDAP/SQL-Anfragen
• Nur LDAP/SQL abfragen, wenn nötig! In inner-tunnel:if ((EAP-Type == 1) || (EAP-Message =~ /^0x02..00061a..$/))
{
noop
}
else {
ldap
}
• Verhindert aber ggf. Unlang-Tricks.
• Alternative: Cache-Modul! (Danke an Christian Strauf, TU
Cluasthal)
Steffen Klemer (GWDG) eduroam 2015-10-28 17 / 32
Freeradius
Last auf LDAP/ SQL verringern #2./mods-enabled/cache :
driver = "rlm_cache_rbtree"
ttl = 20 # in s
update {
reply:Tunnel-Private-Group-ID := &reply:Tunnel-Private-Group-ID
}
./sites-enabled/innter-tunnel :
authorize {
preprocess
eapinnertunnel {
ok = return
}
mschap
update control {
Cache-Status-Only = 'yes'
}
cache # sieh in den Cache
if (notfound) { # Nicht Gefunden?
ldap
}
cache # Neue Daten cachen
}
Steffen Klemer (GWDG) eduroam 2015-10-28 18 / 32
Freeradius
Bessere Ciphter Auswahl
eap.conf:
cipher = "ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:
DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:
!aNULL:!MD5:!DSS"
• Im ssllabs Brower-Test bekommt er ein A5.
• Funktioniert mit allen getesteten OS und in Gö und CLZ seit
einigen Wochen auf dem Campus.
• Real ausgehandelte Cipher erst ab FR 3.1 überhaupt sichtbar.
Wir arbeiten an einem Backport auf 2 und 3.
5was keine wertvolle Aussage für diesen Fall ist
Steffen Klemer (GWDG) eduroam 2015-10-28 19 / 32
Freeradius Version 3
Table of Contents
1 eduroam und RADIUS
2 Freeradius
3 Freeradius Version 3
4 Aktuelle Mobilsysteme
Steffen Klemer (GWDG) eduroam 2015-10-28 20 / 32
Freeradius Version 3
Freeradius 3
• Großer Versionssprung! Viele Änderungen unter der Haube.
• Unterstützt RADSEC (RADIUS over TLS over TCP),
• Übersichtlichere Debug-Ausgabe (mit Hervorhebungen!!!).
• Vereinfachtes Layout des Konfig-Verzeichnis.
• Modul-übergreifend einheitliche Konfig-Systematik.
• NICHT Konfig-Kompatibel! Offizielle Empfehlung:
We do not recommend starting with a v2 configuration, and trying
to ‘tweak’ it to be acceptable to v3. Instead, administrators should
start with the default v3 configuration, and gradually add in their
local changes.6
6http://freeradius.org/version3.html
Steffen Klemer (GWDG) eduroam 2015-10-28 21 / 32
Freeradius Version 3
Freeradius 3
• Großer Versionssprung! Viele Änderungen unter der Haube.
• Unterstützt RADSEC (RADIUS over TLS over TCP),
• Übersichtlichere Debug-Ausgabe (mit Hervorhebungen!!!).
• Vereinfachtes Layout des Konfig-Verzeichnis.
• Modul-übergreifend einheitliche Konfig-Systematik.
• NICHT Konfig-Kompatibel! Offizielle Empfehlung:
We do not recommend starting with a v2 configuration, and trying
to ‘tweak’ it to be acceptable to v3. Instead, administrators should
start with the default v3 configuration, and gradually add in their
local changes.6
6http://freeradius.org/version3.html
Steffen Klemer (GWDG) eduroam 2015-10-28 21 / 32
Freeradius Version 3
Freeradius 3
• Großer Versionssprung! Viele Änderungen unter der Haube.
• Unterstützt RADSEC (RADIUS over TLS over TCP),
• Übersichtlichere Debug-Ausgabe (mit Hervorhebungen!!!).
• Vereinfachtes Layout des Konfig-Verzeichnis.
• Modul-übergreifend einheitliche Konfig-Systematik.
• NICHT Konfig-Kompatibel! Offizielle Empfehlung:
We do not recommend starting with a v2 configuration, and trying
to ‘tweak’ it to be acceptable to v3. Instead, administrators should
start with the default v3 configuration, and gradually add in their
local changes.6
6http://freeradius.org/version3.html
Steffen Klemer (GWDG) eduroam 2015-10-28 21 / 32
Freeradius Version 3
Upgrade zu v3 – Erfahrung
• Wirklich die Empfehlung beachten und Konfig sinngemäß auf
einer v3-Default-Config neu aufbauen!
• Viel mehr Zeit einplanen als man zunächst einplanen würde.
• Viel Geduld mitbringen.
• Debug-Umgebung zur Hand haben. Mindestens eapol_test,
besser auch echte Geräte.
• Erst funktionierende Konfig haben, dann (vermeintlich)
unnötige Module entfernen.
• Größeren Feldtest vor der Umstellung machen.
Steffen Klemer (GWDG) eduroam 2015-10-28 22 / 32
Freeradius Version 3
Upgrade zu v3 – Wichtige Änderungen
• Alle High-Level Modul-Konfigurationen jetzt in
./mods-enabled/*
• Spezifischere Modul-Konfig (users, hints, SQL-Queries,
atrr-filter) in ./mods-config/
• acct_unique Modul entfernt. Jetzt via Policy umgesetzt.
• Ergibt ggf. andere Sessions-IDs.
• Konfig in policy.d/accounting
• Verwendung wie ein Modul, einfach acct_unique in
preacct{}
• Direkter winbindd-Support, kein ntlm_auth mehr notwendig7
./mods-enables/mschap
...
winbind_username = "%{mschap:User-Name}"
winbind_domain = "WINDOWSDOMAIN"
...
7ggf. Patches für Samba notwendig
Steffen Klemer (GWDG) eduroam 2015-10-28 23 / 32
Freeradius Version 3
Unlang
• Bei Programmbeginn optimiert kompiliert
• Debug-Output nicht mehr Statement-Genau
• zB if(0) {}
• Universelles update-Statement (statts update reply {…})update {
reply:Class := 0x0000
control:Cleartext-Password := "hello"
}
• Sprach-Inherent implementierter Variablen-Wert Vergleich:Alt: if (User-Name == "%{control:Tmp-String-0}") {
Neu: if (&User-Name == &control:Tmp-String-0) {
• Netzvergleiche:
• (127.0.0.0/8 > 127.0.0.1) ergibt True
Steffen Klemer (GWDG) eduroam 2015-10-28 24 / 32
Freeradius Version 3
vHost-Config
• Listen-Sektion jetzt immer in der vhost-config
• (betrifft Typ, Interface, IP, Port…)
• Möglichkeit vHosts auf Client-Klassen einzuschränken
Steffen Klemer (GWDG) eduroam 2015-10-28 25 / 32
Freeradius Version 3
SQL-Modul
• Modul sql_log entfernt → Option ‘logfile’ und driver
‘rlm_sql_null’.
• Pool-Konzept! Definiere einen Server mit vielen Threads/
Connections:sql1 { ...
server = "localhost"
login = "radius"
password = "radpass"
pool {
start = ${thread[pool].start_servers}
max = ${thread[pool].max_servers}
...
}
}
• …und verwende den für verschiedenste Abfragen.
sql2 { ... pool = sql1 }
• Auth-Queries können übernommen werden.
• Accounting hat sich stark verändert…Steffen Klemer (GWDG) eduroam 2015-10-28 26 / 32
Freeradius Version 3
LDAP-Modul
• Komplett neu. Siehe Example-Config.
Steffen Klemer (GWDG) eduroam 2015-10-28 27 / 32
Freeradius Version 3
EAP-Modul
• EAP-PWD (RFC 5931) Support! Extrem effizienter (7 EAP
Pakete), sicherer Identitätsvergleich selbst mit schwachen
Passwörtern.
• Allgemeine TLS Strophen, die in TLS, TTLS, PEAP…verwendet
werden können
• use_tunneled_reply deprecated. Ersetzt durch
outer.session-state
Steffen Klemer (GWDG) eduroam 2015-10-28 28 / 32
Freeradius Version 3
RADSEC-Implementierung
• Verwendet das selbe TLS-Subsystem wie das EAP-Modul.
• Die Konfig-Syntax ist identisch.
• Beispiel-Config in sites-available/tls
• Wichtig: Debugging mit radiusd -fxx -l stdout, nicht
mit -X.
• Angeblich noch nicht ausgereift?!
Steffen Klemer (GWDG) eduroam 2015-10-28 29 / 32
Aktuelle Mobilsysteme
Table of Contents
1 eduroam und RADIUS
2 Freeradius
3 Freeradius Version 3
4 Aktuelle Mobilsysteme
Steffen Klemer (GWDG) eduroam 2015-10-28 30 / 32
Aktuelle Mobilsysteme
IOS 9 und Android Marshmallow
• iOS 9 brachte einige Änderungen, die Bugs im FR und vielen
FR-Konfigurationen getriggert haben.
• Quint-Essenz:
• Upgrade auf 2.2.9 und checken, ob in eap.conf:
default_eap_type = ttls
peap { ... default_eap_type = mschapv2 }
ttls { ... default_eap_type = mschapv2 }
• 2048er DH-Gruppe generieren und verwenden!
• Android Marshmallow versucht TLS 1.2 zu verwenden
• Das geht schief mit OpenSSL 1.0.1e (RHEL 6.4)
eap { tls { disable_tlsv1_2= yes } }
• Apropos OpenSSL: Kein FR Release arbeitet mit OpenSSL
>1.0.2.
Steffen Klemer (GWDG) eduroam 2015-10-28 31 / 32
Aktuelle Mobilsysteme
Zusammengefasst
• Freeradius extrem mächtig, auch für komplexeste
802.1X-Umgebungen.
• Komplexe Konfiguration.
• Für den Umstieg auf v3 sollte Zeit eingeplant werden.
• v2 ist bereits End-of-Life.
Werbeblock
FR3 demnächst in Debian und anschließen vmtl. auch in
Backports und Ubuntu!
Steffen Klemer (GWDG) eduroam 2015-10-28 32 / 32
Pakete
Access-Request packet from host 192.168.1.1 port 32769
User-Name = "[email protected]"
Calling-Station-Id = "04-f7-e4-ff-ff-ff"
Called-Station-Id = "54-78-1a-ff-ff-ff:eduroam"
NAS-Port = 13
NAS-IP-Address = 192.168.23.42
NAS-Identifier = "ap42"
Service-Type = Framed-User
Framed-MTU = 1300
NAS-Port-Type = Wireless-802.11
EAP-Message = 0x0206000fffff
State = 0xc9a6b068cda0a5e464ffffffffffActive Directory
TLS Tunnelmit radius Paketen
ntlm_auth/ MSCHAPv2
EAP overLAN
radiusmit TLS Paketen
inneres radius Protokoll
radiusmit TLS Paketen
TLS Tunnel
freeradius 2
freeradius 1
Radius ProtokollTLS Tunnel
Radius ProtokollMSCHAPv2 Auth
Steffen Klemer (GWDG) eduroam 2015-10-28 33 / 32
Pakete (2)
Sending Access-Challenge of id 21 to 192.168.1.1 port 32769
EAP-Message = 0x0103040015c000001...
EAP-Message = 0x66746c69636865204...
EAP-Message = 0x55040313137261646...
EAP-Message = 0x1abaa458efab57085...
EAP-Message = 0x2e677764672e64658...
State = 0xc9a6b068c8a5a5efffffffffff
Active DirectoryTLS Tunnel
mit radius Paketen
ntlm_auth/ MSCHAPv2
EAP overLAN
radiusmit TLS Paketen
inneres radius Protokoll
radiusmit TLS Paketen
TLS Tunnel
freeradius 2
freeradius 1
Radius ProtokollTLS Tunnel
Radius ProtokollMSCHAPv2 Auth
Steffen Klemer (GWDG) eduroam 2015-10-28 34 / 32
Pakete (3)
Access-Request packet from host 192.168.1.1 port 32769
User-Name = "[email protected]"
Calling-Station-Id = "04-f7-e4-ff-ff-ff"
Called-Station-Id = "54-78-1a-ff-ff-ff:eduroam"
NAS-Port = 13
NAS-IP-Address = 192.168.23.42
NAS-Identifier = "ap42"
Service-Type = Framed-User
Framed-MTU = 1300
NAS-Port-Type = Wireless-802.11
EAP-Message = 0x0209009f158000000095...
State = 0xc9a6b068ceafa5e464ffffffffffActive Directory
TLS Tunnelmit radius Paketen
ntlm_auth/ MSCHAPv2
EAP overLAN
radiusmit TLS Paketen
inneres radius Protokoll
radiusmit TLS Paketen
TLS Tunnel
freeradius 2
freeradius 1
Radius ProtokollTLS Tunnel
Radius ProtokollMSCHAPv2 Auth
Steffen Klemer (GWDG) eduroam 2015-10-28 35 / 32
Pakete (3)
[ttls] Got tunneled request
User-Name = "[email protected]"
MS-CHAP-Challenge = 0x528ae1053e5b0ffffffffffffff
MS-CHAP2-Response = 0xd80077ac044fbd79a797a87c...
FreeRADIUS-Proxied-To = 127.0.0.1
[ttls] Sending tunneled request
User-Name = "[email protected]"
MS-CHAP-Challenge = 0x528ae1053e5b0fcfffffffffffff
MS-CHAP2-Response = 0xd80077ac044fbd79a797a87c...
FreeRADIUS-Proxied-To = 127.0.0.1
Active DirectoryTLS Tunnel
mit radius Paketen
ntlm_auth/ MSCHAPv2
EAP overLAN
radiusmit TLS Paketen
inneres radius Protokoll
radiusmit TLS Paketen
TLS Tunnel
freeradius 2
freeradius 1
Radius ProtokollTLS Tunnel
Radius ProtokollMSCHAPv2 Auth
Steffen Klemer (GWDG) eduroam 2015-10-28 36 / 32
Pakete (4)
Sending Access-Accept of id 29 to 192.168.1.1 port 32769
User-Name = "[email protected]"
EAP-Message = 0x030afffff
Trapeze-VLAN-Name = "eduroam"
Active DirectoryTLS Tunnel
mit radius Paketen
ntlm_auth/ MSCHAPv2
EAP overLAN
radiusmit TLS Paketen
inneres radius Protokoll
radiusmit TLS Paketen
TLS Tunnel
freeradius 2
freeradius 1
Radius ProtokollTLS Tunnel
Radius ProtokollMSCHAPv2 Auth
Steffen Klemer (GWDG) eduroam 2015-10-28 37 / 32