Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
de:eduroam:anleitungen:freeradius [2022/04/27 13:29] – Erste Version der FreeRADIUS-Anleitungen (noch nicht konsolidiert) Jan-Frederik Rieckersde:eduroam:anleitungen:freeradius [2022/04/28 17:44] (aktuell) – Fix some small errors Jan-Frederik Rieckers
Zeile 17: Zeile 17:
 Im Ordner ''%%sites-available%%'' liegen die Standard-Sites bzw. -Server von FreeRADIUS. Ein Server führt dabei immer Authentifizierung und Autorisierung der anfragenden Nutzenden durch und nutzt dafür verschiedene Module. Im Ordner ''%%sites-available%%'' liegen die Standard-Sites bzw. -Server von FreeRADIUS. Ein Server führt dabei immer Authentifizierung und Autorisierung der anfragenden Nutzenden durch und nutzt dafür verschiedene Module.
  
-Die Konfiguration der Server gliedert sich dabei in verschiedene Bereiche: +Die Konfiguration der Server gliedert sich dabei in verschiedene Bereiche:
   * ''%%listen%%'' In dieser Sektion wird konfiguriert, auf welchen IP-Adressen und Ports der Server auf Verbindungen hört.   * ''%%listen%%'' In dieser Sektion wird konfiguriert, auf welchen IP-Adressen und Ports der Server auf Verbindungen hört.
   * ''%%authorize%%'' Diese Sektion konfiguriert die Autorisierung, also die Feststellung ob und wenn ja welche Authentifizierung durchgeführt wird.   * ''%%authorize%%'' Diese Sektion konfiguriert die Autorisierung, also die Feststellung ob und wenn ja welche Authentifizierung durchgeführt wird.
Zeile 57: Zeile 57:
  
 In jedem ''%%listen%%''-Block müssen die folgenden Konfigurationen gesetzt werden: In jedem ''%%listen%%''-Block müssen die folgenden Konfigurationen gesetzt werden:
-  * ''%%type%%'': Dies kann entweder ''%%auth%%'' für Authentifizierung oder ''%%acct%%'' für Accounting sein. Da wir uns nur mit Authentifizierung beschäftigen, wird es immer auf ''%%auth%%'' gesetzt sein.  +  * ''%%type%%'': Dies kann entweder ''%%auth%%'' für Authentifizierung oder ''%%acct%%'' für Accounting sein. Da wir uns nur mit Authentifizierung beschäftigen, wird es immer auf ''%%auth%%'' gesetzt sein. 
-  * ''%%ipaddr%%'': Die IP-Adresse des Hosts, auf der Verbindungen angenommen werden sollen. Mit ''%%*%%'' werden auf allen IPv4-Adressen des Hosts Verbindungen angenommen. Für verschiedene IP-Adressen muss jeweils ein eigener ''%%listen%%''-Block angelegt werden, wenn nicht auf allen IPv4-Adressen Verbindungen angenommen werden sollen. +  * ''%%ipaddr%%'': Die IP-Adresse des Hosts, auf der Verbindungen angenommen werden sollen. Mit ''%%*%%'' werden auf allen IPv4-Adressen des Hosts Verbindungen angenommen. Für verschiedene IP-Adressen muss jeweils ein eigener ''%%listen%%''-Block angelegt werden, wenn nicht auf allen IPv4-Adressen Verbindungen angenommen werden sollen.
     * Um die IP-Adress-Familie zu spezifizieren kann stattdessen ein anderer Konfigurationsparameter benutt werden:     * Um die IP-Adress-Familie zu spezifizieren kann stattdessen ein anderer Konfigurationsparameter benutt werden:
     * ''%%ipv4addr%%'': spezielle IPv4-Adresse des Servers, alternativ ''%%*%%'' für alle IPv4-Adressen des Servers     * ''%%ipv4addr%%'': spezielle IPv4-Adresse des Servers, alternativ ''%%*%%'' für alle IPv4-Adressen des Servers
     * ''%%ipv6addr%%'': spezielle IPv6-Adresse des Servers, alternativ ''%%*%%'' für alle IPv6-Adressen des Servers     * ''%%ipv6addr%%'': spezielle IPv6-Adresse des Servers, alternativ ''%%*%%'' für alle IPv6-Adressen des Servers
-    * **Wichtig:** Sollten mehrere IP-Adress-Konfigurationen im ''%%listen%%''-Block existieren, wird nur die erste verwendet. Für verschiedene Konfigurationen je nach IP-Adresse muss also jeweils ein eigener ''%%listen%%''-Block angelegt werden. +    * **Wichtig:** Sollten mehrere IP-Adress-Konfigurationen im ''%%listen%%''-Block existieren, wird nur die erste verwendet. Für verschiedene Konfigurationen je nach IP-Adresse muss also jeweils ein eigener ''%%listen%%''-Block angelegt werden.
   * ''%%port%%'': Port, auf dem Verbindungen engegengenommen werden. Standard für RADIUS ist Port ''%%1812%%''. Mit ''%%0%%'' wird der Standardport ausgewählt   * ''%%port%%'': Port, auf dem Verbindungen engegengenommen werden. Standard für RADIUS ist Port ''%%1812%%''. Mit ''%%0%%'' wird der Standardport ausgewählt
  
Zeile 95: Zeile 95:
  
 <code> <code>
-if (Realm == NULL) {+if (!&Realm) {
     reject     reject
 } }
Zeile 107: Zeile 107:
         filter_username         filter_username
         suffix         suffix
-        if (Realm == NULL) {+        if (!&Realm) {
             reject             reject
         }         }
Zeile 116: Zeile 116:
     [...]     [...]
 } }
 +</code>
 +=== authenticate-Sektion ===
  
-#### `authenticate`-Sektion +In der ''%%authenticate%%''-Sektion wird die Authentisierung der Geräte vorgenommen. Da im eduroam lediglich EAP genutzt wird, beinhaltet die Konfiguration auch nur den Verweis auf EAP.
- +
-In der `authenticate`-Sektion wird die Authentisierung der Geräte vorgenommen. Da im eduroam lediglich EAP genutzt wird, beinhaltet die Konfiguration auch nur den Verweis auf EAP.+
  
 +<code>
 +server default {
 +    [...]
 +    authenticate {
 +        eap
 +    }
 +    [...]
 +}
 </code> </code>
-server default { […] authenticate { eap } […] }+=== Accounting-Sektionen (preacct/accounting/session) ===
  
-<code>+Die Sektionen ''%%preacct%%'', ''%%accounting%%'' und ''%%session%%'' sind für die Behandlung von Accounting-Anfragen zuständig. Da wir kein Accounting konfigurieren, können wir diese Sektionen auslassen bzw. komplett auskommentieren.
  
-#### Accounting-Sektionen (`preacct`/`accounting`/`session`)+=== post-auth-Sektion ===
  
-Die Sektionen `preacct`, `accounting` und `session` sind für die Behandlung von Accounting-Anfragen zuständig. Da wir kein Accounting konfigurieren, können wir diese Sektionen auslassen bzw. komplett auskommentieren. +Die ''%%post-auth%%''-Sektion ist für die Behandlung von Requests nach der Authentifizierung zuständig. Hierbei gibt es die Haupt-Sektion, die die laufenden und erfolgreichen Requests abhandelt, sowie eine Sub-Sektion ''%%Post-Auth-Type REJECT%%'', die für die abgelehnten Requests zuständig ist.
- +
-#### `post-auth`-Sektion +
- +
-Die `post-auth`-Sektion ist für die Behandlung von Requests nach der Authentifizierung zuständig. Hierbei gibt es die Haupt-Sektion, die die laufenden und erfolgreichen Requests abhandelt, sowie eine Sub-Sektion `Post-Auth-Type REJECT`, die für die abgelehnten Requests zuständig ist.+
  
 Zunächst muss mit dem folgenden Block der Zwischenstatus der Anfragen gespeichert werden, die noch nicht abgehandelt sind: Zunächst muss mit dem folgenden Block der Zwischenstatus der Anfragen gespeichert werden, die noch nicht abgehandelt sind:
-</code> 
-if (session-state:User-Name && reply:User-Name && request:User-Name && (reply:User-Name == request:User-Name)) { update reply { &User-Name !* ANY } } update { &reply: += &session-state: } 
  
 <code> <code>
- +if (session-state:User-Name && reply:User-Name && request:User-Name && (reply:User-Name == request:User-Name)) { 
-Zudem muss eine mögliche Reply-Nachricht entfernt werden, wenn eine EAP-Nachricht gesendet wird:+    update reply { 
 +        &User-Name !* ANY 
 +    } 
 +
 +update { 
 +    &reply: += &session-state: 
 +}
 </code> </code>
-remove_reply_message_if_eap+Zudem muss eine mögliche Reply-Nachricht entfernt werden, wenn eine EAP-Nachricht gesendet wird:
  
 <code> <code>
 +remove_reply_message_if_eap 
 +</code>
 In dieser Sektion kann auch zusätzliches Logging konfiguriert werden, wie z.B. das von uns empfohlene Linelog-Modul. In dieser Sektion kann auch zusätzliches Logging konfiguriert werden, wie z.B. das von uns empfohlene Linelog-Modul.
- 
-</code> 
-outer_linelog 
  
 <code> <code>
- +outer_linelog
-Für Rejects muss die Subsektion `Post-Auth-Type REJECT` genutzt werden. Hierin werden zusätzlich noch Attribute gefiltert, da bei Rejects nur bestimmte RADIUS-Attribute mitgeschickt werden sollen. +
 </code> </code>
-Post-Auth-Type REJECT { # Logging des Rejects outer_linelog # Filtern von Attributen attr_filter.access_reject # Nutzung von EAP für die Reject-Nachricht eap # Reply-Nachricht entfernenfalls es eine EAP-Nachricht ist remove_reply_message_if_eap }+Für Rejects muss die Subsektion ''%%Post-Auth-Type REJECT%%'' genutzt werdenHierin werden zusätzlich noch Attribute gefiltertda bei Rejects nur bestimmte RADIUS-Attribute mitgeschickt werden sollen.
  
 <code> <code>
- +Post-Auth-Type REJECT { 
-Die gesamte `post-auth` Sektion sieht damit wie folgt aus: +    # Logging des Rejects 
 +    outer_linelog 
 +    # Filtern von Attributen 
 +    attr_filter.access_reject 
 +    # Nutzung von EAP für die Reject-Nachricht 
 +    eap 
 +    # Reply-Nachricht entfernen, falls es eine EAP-Nachricht ist 
 +    remove_reply_message_if_eap 
 +}
 </code> </code>
-server default { […] post-auth { if (session-state:User-Name && reply:User-Name && request:User-Name && (reply:User-Name == request:User-Name)) { update reply { &User-Name !* ANY } } update { &reply: += &session-state} outer_linelog remove_reply_message_if_eap+Die gesamte ''%%post-auth%%'' Sektion sieht damit wie folgt aus:
  
 <code> <code>
-    Post-Auth-Type REJECT {+server default { 
 +    [...] 
 +    post-auth { 
 +        if (session-state:User-Name && reply:User-Name && request:User-Name && (reply:User-Name == request:User-Name)) { 
 +            update reply { 
 +                &User-Name !* ANY 
 +            } 
 +        } 
 +        update { 
 +            &reply: += &session-state: 
 +        }
         outer_linelog         outer_linelog
-        attr_filter.access_reject 
-        eap 
         remove_reply_message_if_eap         remove_reply_message_if_eap
 +
 +        Post-Auth-Type REJECT {
 +            outer_linelog
 +            attr_filter.access_reject
 +            eap
 +            remove_reply_message_if_eap
 +        }
     }     }
 +    [...]
 } }
-[...] 
 </code> </code>
-}+=== Proxy-Sektionen (pre-proxy/post-proxy) ===
  
-<code> +Die Sektionen ''%%pre-proxy%%'' und ''%%post-proxy%%'' sind für Konfiguration speziell für Requests gedacht, die an andere Server weitergeleitet werden sollen. Hierbei ist im Normalfall keine weitere Konfiguration nötig, lediglich im ''%%post-proxy%%'' muss ''%%eap%%'' gelistet sein:
- +
-#### Proxy-Sektionen (`pre-proxy`/`post-proxy`) +
- +
-Die Sektionen `pre-proxyund `post-proxysind für Konfiguration speziell für Requests gedacht, die an andere Server weitergeleitet werden sollen. +
-Hierbei ist im Normalfall keine weitere Konfiguration nötig, lediglich im `post-proxymuss `eapgelistet sein:+
  
 +<code>
 +server default {
 +    [...]
 +    pre-proxy {
 +    }
 +    post-proxy {
 +        eap
 +    }
 +}
 </code> </code>
-server default { […] pre-proxy { } post-proxy { eap } } 
- 
 === Komplette Beispielkonfiguration für sites-available/default === === Komplette Beispielkonfiguration für sites-available/default ===
  
Zeile 199: Zeile 227:
         filter_username         filter_username
         suffix         suffix
-        if (Realm == NULL) {+        if (!&Realm) {
             reject             reject
         }         }
Zeile 541: Zeile 569:
 Zur Verarbeitung von vielen gleichzeitigen Anfragen kann es sinnvoll sein, mehrere LDAP-Verbindungen zu öffnen, damit mehrere LDAP-Anfragen zeitgleich durchgeführt werden können. Zur Verarbeitung von vielen gleichzeitigen Anfragen kann es sinnvoll sein, mehrere LDAP-Verbindungen zu öffnen, damit mehrere LDAP-Anfragen zeitgleich durchgeführt werden können.
  
-Für den Aufgbau der Verbindungen gibt es 4 wichtige Konfigurationsoptionen: * ''%%start%%'': Wie viele LDAP-Verbindungen werden beim Start des FreeRADIUS-Servers aufgebaut? (Default: 5) * Achtung: Ist eine Zahl > 0 konfiguriert, wird FreeRADIUS nicht starten, falls die Verbindung nicht aufgebaut werden kann. * ''%%min%%'': Wie viele LDAP-Verbindungen sollen mindestens offen sein? (Default: 5) * ''%%max%%'': Wie viele LDAP-Verbindungen dürfen maximal offen sein? (Default: 10) * ''%%spare%%'': Wie viele LDAP-Verbindungen sollen in Reserve gehalten werden? (Default: 3)+Für den Aufgbau der Verbindungen gibt es 4 wichtige Konfigurationsoptionen: 
 +  * ''%%start%%'': Wie viele LDAP-Verbindungen werden beim Start des FreeRADIUS-Servers aufgebaut? (Default: 5) 
 +    * Achtung: Ist eine Zahl > 0 konfiguriert, wird FreeRADIUS nicht starten, falls die Verbindung nicht aufgebaut werden kann. 
 +  * ''%%min%%'': Wie viele LDAP-Verbindungen sollen mindestens offen sein? (Default: 5) 
 +  * ''%%max%%'': Wie viele LDAP-Verbindungen dürfen maximal offen sein? (Default: 10) 
 +  * ''%%spare%%'': Wie viele LDAP-Verbindungen sollen in Reserve gehalten werden? (Default: 3)
  
-Für den Abbau Verbindungen können ebenfalls verschiedene Parameter gesetzt werden: * ''%%uses%%'': Anzahl an LDAP-Anfragen, nach denen die Verbindung geschlossen werden soll (''%%0%%'' für unbegrenzt, Default: 0) * ''%%lifetime%%'': Anzahl an Sekunden, nach denen die Verbindung geschlossen werden soll (''%%0%%'' für unbegrenzt, Default: 0) * ''%%idle_timeout%%'': Anzahl an Sekunden nach der nach letzter Nutzung die Verbindung geschlossen werden soll (Default: 60)+Für den Abbau Verbindungen können ebenfalls verschiedene Parameter gesetzt werden: 
 +  * ''%%uses%%'': Anzahl an LDAP-Anfragen, nach denen die Verbindung geschlossen werden soll (''%%0%%'' für unbegrenzt, Default: 0) 
 +  * ''%%lifetime%%'': Anzahl an Sekunden, nach denen die Verbindung geschlossen werden soll (''%%0%%'' für unbegrenzt, Default: 0) 
 +  * ''%%idle_timeout%%'': Anzahl an Sekunden nach der nach letzter Nutzung die Verbindung geschlossen werden soll (Default: 60)
  
 Sollen die Default-Werte genutzt werden, kann dieser Block auch weggelassen werden. Sollen die Default-Werte genutzt werden, kann dieser Block auch weggelassen werden.
Zeile 619: Zeile 655:
     filename = syslog     filename = syslog
     syslog_facility = local3     syslog_facility = local3
-    references = "messages.%{%{reply:Packet-Type}:-default}"+    reference = "messages.%{%{reply:Packet-Type}:-default}"
     messages {     messages {
         default = "Unknown packet type %{Packet-Type}"         default = "Unknown packet type %{Packet-Type}"
Zeile 629: Zeile 665:
     filename = syslog     filename = syslog
     syslog_facility = local3     syslog_facility = local3
-    references = "messages.%{%{reply:Packet-Type}:-default}"+    reference = "messages.%{%{reply:Packet-Type}:-default}"
     messages {     messages {
         default = "Unknown packet type %{Packet-Type}"         default = "Unknown packet type %{Packet-Type}"
Zeile 639: Zeile 675:
 ==== Aktivierung/Deaktivierung der Module ==== ==== Aktivierung/Deaktivierung der Module ====
  
-Standardmäßig sind in FreeRADIUS eine Vielzahl von Modulen aktiv, die für die hier beschriebene Funktionsweise nicht benötigt werden. Die für diesen FreeRADIUS benötigten Module sind: * ''%%always%%'' * ''%%attr_filter%%'' * ''%%eap%%'' * ''%%ldap%%'' * ''%%linelog%%'' * ''%%pap%%'' * ''%%realm%%''+Standardmäßig sind in FreeRADIUS eine Vielzahl von Modulen aktiv, die für die hier beschriebene Funktionsweise nicht benötigt werden. Die für diesen FreeRADIUS benötigten Module sind: 
 +  * ''%%always%%'' 
 +  * ''%%attr_filter%%'' 
 +  * ''%%eap%%'' 
 +  * ''%%ldap%%'' 
 +  * ''%%linelog%%'' 
 +  * ''%%pap%%'' 
 +  * ''%%realm%%''
  
 Die Aktivierung der Module geschieht, wie bei den Servern, über einen Symlink in ''%%mods-enabled/%%'' auf die entsprechenden Konfigurationsdateien in ''%%mods-available/%%''. Die Aktivierung der Module geschieht, wie bei den Servern, über einen Symlink in ''%%mods-enabled/%%'' auf die entsprechenden Konfigurationsdateien in ''%%mods-available/%%''.
Zeile 649: Zeile 692:
 Jeder Client-Bock besitzt dabei ein Label, das für das Logging genutzt werden kann. Jeder Client-Bock besitzt dabei ein Label, das für das Logging genutzt werden kann.
  
-Innerhalb des Client-Blocks müssen dann die verschiedenen Parameter gesetzt werden: * IP-Adresse: Hier gibt es verschiedene Möglichkeiten (eine muss ausgewählt werden): * ''%%ipaddr%%'': IPv4, IPv6 oder Hostname (Achtung: Schlägt das DNS-Lookup fehl, startet FreeRADIUS nicht) * ''%%ipv4addr%%'': IPv4-Adresse (ggf. mit Subnetzmaske) * ''%%ipv6addr%%'': IPv6-Adresse (ggf. mit Subnetzmaske) * ''%%secret%%'': Das gemeinsame Geheimnis zwischen dem Client und FreeRADIUS+Innerhalb des Client-Blocks müssen dann die verschiedenen Parameter gesetzt werden: 
 +  * IP-Adresse: Hier gibt es verschiedene Möglichkeiten (eine muss ausgewählt werden): 
 +    * ''%%ipaddr%%'': IPv4, IPv6 oder Hostname (Achtung: Schlägt das DNS-Lookup fehl, startet FreeRADIUS nicht) 
 +    * ''%%ipv4addr%%'': IPv4-Adresse (ggf. mit Subnetzmaske) 
 +    * ''%%ipv6addr%%'': IPv6-Adresse (ggf. mit Subnetzmaske) 
 +  * ''%%secret%%'': Das gemeinsame Geheimnis zwischen dem Client und FreeRADIUS
  
 <code> <code>
Zeile 681: Zeile 729:
 Abschließend muss noch das Verhalten von FreeRADIUS in Bezug auf die verschiedenen Realms konfiguriert werden. Dies geschieht in der Datei ''%%proxy.conf%%'' Abschließend muss noch das Verhalten von FreeRADIUS in Bezug auf die verschiedenen Realms konfiguriert werden. Dies geschieht in der Datei ''%%proxy.conf%%''
  
-Die Konfiguration gliedert sich in 3 Teile: * Home-Server: Hier werden die Kommunikationspartner (i.d.R. nur der Radsecproxy) konfiguriert * Home-Server-Pool: Ein Pool gruppiert Home-Server zusammen und stellt das Fail-Over sicher. * Realm: Die Realms definieren das Verhalten je nach Realm des Usernamens.+Die Konfiguration gliedert sich in 3 Teile: 
 +  * Home-Server: Hier werden die Kommunikationspartner (i.d.R. nur der Radsecproxy) konfiguriert 
 +  * Home-Server-Pool: Ein Pool gruppiert Home-Server zusammen und stellt das Fail-Over sicher. 
 +  * Realm: Die Realms definieren das Verhalten je nach Realm des Usernamens.
  
 Zunächst muss das Proxying der Requests generell aktiviert werden: Zunächst muss das Proxying der Requests generell aktiviert werden:
Zeile 708: Zeile 759:
 } }
 </code> </code>
-Als nächstes muss ein ''%%home_server_pool%%'' konfiguriert werden. In dieser Sektion werden die Fail-Over-Regeln konfiguriert. FreeRADIUS unterstützt verschiedene Fail-Over-Mechanismen, die nicht alle für EAP-basierte Methoden geeignet sind. Geeignet sind: * ''%%client-balance%%'': Entscheidung auf Basis der Source-IP-Adresse des eingegangenen Requests (nicht sinnvoll bei nur einem WLAN-Controller). Ist der so gewählte Server nicht aktiv, wird der nächste genommen. * ''%%client-port-balance%%'': Wie ''%%client-balance%%'', bezieht allerdings den Source-Port mit ein (dementsprechend auch bei nur einem WLAN-Controller nutzbar) * ''%%fail-over%%'': Hot-Standby-Redundanz (der primäre Server wird standardmäßig genommen, es sei denn er ist als nicht aktiv markiert)+Als nächstes muss ein ''%%home_server_pool%%'' konfiguriert werden. In dieser Sektion werden die Fail-Over-Regeln konfiguriert. FreeRADIUS unterstützt verschiedene Fail-Over-Mechanismen, die nicht alle für EAP-basierte Methoden geeignet sind. Geeignet sind: 
 +  * ''%%client-balance%%'': Entscheidung auf Basis der Source-IP-Adresse des eingegangenen Requests (nicht sinnvoll bei nur einem WLAN-Controller). Ist der so gewählte Server nicht aktiv, wird der nächste genommen. 
 +  * ''%%client-port-balance%%'': Wie ''%%client-balance%%'', bezieht allerdings den Source-Port mit ein (dementsprechend auch bei nur einem WLAN-Controller nutzbar) 
 +  * ''%%fail-over%%'': Hot-Standby-Redundanz (der primäre Server wird standardmäßig genommen, es sei denn er ist als nicht aktiv markiert)
  
 <code> <code>
Zeile 748: Zeile 802:
     num_answers_to_be_alive = 3     num_answers_to_be_alive = 3
 } }
-home_server_pool {+home_server_pool radsecproxy {
     type = fail-over     type = fail-over
     home_server = radsecproxy     home_server = radsecproxy
  • Zuletzt geändert: vor 3 Jahren