Wikiraum

Benutzer-Werkzeuge

Webseiten-Werkzeuge


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
ldap:radius_auth [2014/12/30 11:42]
mccab99 [Allgemein]
ldap:radius_auth [2018/11/17 10:52] (aktuell)
Zeile 4: Zeile 4:
 freeradius ist ein Authentifizierungsserver,​ der nach außen das Radiusprotokoll bereitstellt. Über dieses Protokoll kann man sich z.B. an einem WLAN anmelden, ohne die Zugangsdaten für OpenLDAP oder jede beliebige andere Authentifizierungsquelle zu kennen und verteilen zu müssen. ​ freeradius ist ein Authentifizierungsserver,​ der nach außen das Radiusprotokoll bereitstellt. Über dieses Protokoll kann man sich z.B. an einem WLAN anmelden, ohne die Zugangsdaten für OpenLDAP oder jede beliebige andere Authentifizierungsquelle zu kennen und verteilen zu müssen. ​
  
-==== Radius LDAP-Schema ==== +==== Radius LDAP-Schema ​integrieren ​==== 
 +Damit die Authentifizierung über Radius mit alle denkbaren Funktionen klappt, sollte man ein neues Schema zu openLDAP hinzufügen. Es funktioniert auch ohne, nur kommt man bei späteren Erweiterungswübschen schnell an Grenzen. Hier ist ein Schema bereits vorbereitet,​ welches freeradius als Textdatei mitbringt. Es lässt sich direkt über die Konsole in cn=config einspielen.
 <file ldif radius_schema.ldif>​ <file ldif radius_schema.ldif>​
-dn: cn=openldap,​cn=schema,​cn=config+dn: cn=freeradius,​cn=schema,​cn=config
 objectClass:​ olcSchemaConfig objectClass:​ olcSchemaConfig
-cn: openldap+cn: freeradius
 olcAttributeTypes:​ {0}( 1.3.6.1.4.1.3317.4.3.1.1 NAME '​radiusArapFeatures'​ DES olcAttributeTypes:​ {0}( 1.3.6.1.4.1.3317.4.3.1.1 NAME '​radiusArapFeatures'​ DES
  C ''​ EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-  C ''​ EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-
Zeile 212: Zeile 212:
   top STRUCTURAL MUST cn MAY ( uid $ userPassword $ description ) )   top STRUCTURAL MUST cn MAY ( uid $ userPassword $ description ) )
 </​file>​ </​file>​
 +Befehl zum Einspielen:
 +<code bash>
 +ldapadd -Q -Y EXTERNAL -H ldapi:/// -f radius_schema.ldif
 +</​code>​
 +
 +==== Freeradius für die Nutzung von LDAP konfigurieren ====
 +
 +=== /​etc/​freeradius/​modules/​ldap ===
 +Folgende Zeilen müssen angepasst werden:
 +<code bash>
 +server = "​localhost"​
 +identity = "​cn=admin,​dc=domain,​dc=tld"​
 +password = <​secret>​
 +basedn = "​ou=test,​dc=domain,​dc=tld"​
 +filter = "​(uid=%{%{Stripped-User-Name}:​-%{User-Name}})"​
 +base_filter = "​(objectclass=radiusprofile)"​
 +access_attr = "​dialupAccess"​
 +password_attribute = userPassword
 +</​code>​
 +Der Binduser unter "​identity"​ muss Lesezugriff auf Attribute des Radius-Schemas haben. Diese müssen in der Regel extra gewährt / konfiguriert werden.
 +
 +=== /​etc/​freeradius/​sites-enabled/​default & /​etc/​freeradius/​sites-enabled/​inner-tunnel ===
 +Folgende Zeilen in beiden Dateien auskommentieren (Abschnitt **authorize** / **authenticate**):​
 +<code bash>
 +
 +ldap
 +
 +Auth-Type LDAP {
 +   ldap
 +}
 +</​code>​
  
 +==== Neustart beider Dienste und Test ====
 +<code bash>
 +service slapd restart
 +service freeradius restart
 +</​code>​
  
 +=== Testlogin ===
 +Jetzt kann man überprüfen,​ ob das Login gegen LDAP funktioniert:​
 +<code bash>
 +radtest <​test_ldap_user>​ <​test_ldap_passwort>​ localhost 18120 <​secret>​
 +</​code>​
 +<​secret>​ findet man in /​etc/​freeradius/​clients.conf in der Sektion "​localhost"​. Vorkonfiguriert ist bei Debian und Derivaten "​testing123"​. Wenn alles klappt, sollte die Ausgabe etwa so aussehen:
 +<code bash>
 +Sending Access-Request of id 213 to 127.0.0.1 port 1812
 + User-Name = "<​test_ldap_user>"​
 + User-Password = "<​test_ldap_passwort>"​
 + NAS-IP-Address = 127.0.0.1
 + NAS-Port = 18120
 + Message-Authenticator = 0x00000000000000000000000000000000
 +rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=213, length=20
 +</​code>​
 +Wichtig ist das **Access-Accept** packet am Schluss. Klappt es aus irgendwelchen Gründen nicht, gibt es ein **Access-Reject packet**. ​