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 anonymous @gwdg.de anonymous @gwdg.de Nordamerika Europa (eduroam US) (SURFnet/ UNI-C) USA (Internet2) Deutschland (DFN) anonymous @gwdg.de anonymous anonymous @gwdg.de Max.Musterhase @gwdg.de Uni Hawaii anonymous @gwdg.de anonymous anonymous @gwdg.de GWDG Active Directory top.gwdg.de Max.Musterhase anonymous @gwdg.de Max.Musterhase @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 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 RADIUS 1 in TLS in EAP Im Tunnel dann (theoretisch) wieder ein beliebiges der >40 EAP Varianten, meist: PAP (Klartext-Passwort) MSCHAPv2 (Challenge-Response Verfahren) 1 korrekter: 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 = "anonymous@gwdg.de" 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 2 Eigenwerbung 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, Perlund 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ügbar 3 (freeradius 3 als Beta 4 ) Hat jemand Interesse eine eduroam-variante des puppet-moduls zu erstellen? 3 https://forge.puppetlabs.com/jgazeley/freeradius 4 https://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? } } cache ldap # 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 A 5. 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. 5 was 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 6 http://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 6 http://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 6 http://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 notwendig 7./mods-enables/mschap... winbind_username = "%{mschap:user-name}" winbind_domain = "WINDOWSDOMAIN"... 7 ggf. 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 = "anonymous@gwdg.de" 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 Active Directory radius mit TLS Paketen TLS Tunnel mit radius Paketen freeradius 1 radius mit TLS Paketen ntlm_auth/ MSCHAPv2 EAP over LAN Steffen Klemer (GWDG) eduroam inneres radius Protokoll freeradius 2 TLS Tunnel Radius Protokoll TLS Tunnel Radius Protokoll MSCHAPv2 Auth 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 radius mit TLS Paketen TLS Tunnel mit radius Paketen Active Directory freeradius 1 radius mit TLS Paketen ntlm_auth/ MSCHAPv2 EAP over LAN Steffen Klemer (GWDG) eduroam inneres radius Protokoll freeradius 2 TLS Tunnel Radius Protokoll TLS Tunnel Radius Protokoll MSCHAPv2 Auth 2015-10-28 34 / 32
Pakete (3) Access-Request packet from host 192.168.1.1 port 32769 User-Name = "anonymous@gwdg.de" 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 = 0xc9a6b068ceafa5e464ffffffffff radius mit TLS Paketen TLS Tunnel mit radius Paketen Active Directory freeradius 1 radius mit TLS Paketen ntlm_auth/ MSCHAPv2 EAP over LAN Steffen Klemer (GWDG) eduroam inneres radius Protokoll freeradius 2 TLS Tunnel Radius Protokoll TLS Tunnel Radius Protokoll MSCHAPv2 Auth 2015-10-28 35 / 32
Pakete (3) [ttls] Got tunneled request User-Name = "max.musterhase@gwdg.de" MS-CHAP-Challenge = 0x528ae1053e5b0ffffffffffffff MS-CHAP2-Response = 0xd80077ac044fbd79a797a87c... FreeRADIUS-Proxied-To = 127.0.0.1 [ttls] Sending tunneled request User-Name = "max.musterhase@gwdg.de" MS-CHAP-Challenge = 0x528ae1053e5b0fcfffffffffffff MS-CHAP2-Response = 0xd80077ac044fbd79a797a87c... FreeRADIUS-Proxied-To = 127.0.0.1 radius mit TLS Paketen TLS Tunnel mit radius Paketen Active Directory freeradius 1 radius mit TLS Paketen ntlm_auth/ MSCHAPv2 EAP over LAN Steffen Klemer (GWDG) eduroam inneres radius Protokoll freeradius 2 TLS Tunnel Radius Protokoll TLS Tunnel Radius Protokoll MSCHAPv2 Auth 2015-10-28 36 / 32
Pakete (4) Sending Access-Accept of id 29 to 192.168.1.1 port 32769 User-Name = "anonymous@gwdg.de" EAP-Message = 0x030afffff Trapeze-VLAN-Name = "eduroam" radius mit TLS Paketen TLS Tunnel mit radius Paketen Active Directory freeradius 1 radius mit TLS Paketen ntlm_auth/ MSCHAPv2 EAP over LAN Steffen Klemer (GWDG) eduroam inneres radius Protokoll freeradius 2 TLS Tunnel Radius Protokoll TLS Tunnel Radius Protokoll MSCHAPv2 Auth 2015-10-28 37 / 32