{{tag>wlan gruenesnetz accesspoint freeradius ldap}} ====== WLAN mit RADIUS-Authentifizierung im Access-Point - grünes Netz ====== Inzwischen lassen sich viele WLAN-Access-Points von einer einfachen Benutzer-Authentifizierung auf eine Authentifizierung mit Hilfe eines [[http://de.wikipedia.org/wiki/RADIUS|RADIUS-Servers]] umstellen (WPA-Enterprise oder WPA-EAP oder [[http://de.wikipedia.org/wiki/802.1x|802.1X]]). \\ Durch Anbindung des Radius-Servers an LDAP hat nun jeder Benutzer sein eigenes Passwort - das der paedML - um sich am WLAN anzumelden. Ein schulweites bekanntes WLAN-PSK-Kennwort ist dann nicht mehr notwendig. **Problematik:** Man sollte vorher auf dem Client (z.B. WinXP) ein Zertifikat importieren, mit dem der Passwort-Dialog dann gesichert ablaufen kann. Ebenso muss auf dem Client ein Drahtlosnetzwerk-Profil erstellt werden. **Problematik:** WinXP speichert eine Authentifizierung des Erstbenutzers so ab, dass alle Benutzer danach diese Authentifizierung weiterverwenden, auch nach einem Reboot. Nur ein neues "Sync und Start" würde diese Authentifzierung entfernen. Bein Windows 7 besteht diese Problematik nicht, da man dort die Löschung einstellen kann. Genaueres siehe -> [[version3:eapol_registry_keys|Registry-Keys von EAPOL]] **Links:** \\ * Artikel vom 9.9.2010 dazu: [[http://www.heise.de/netze/artikel/WLAN-sichern-mit-Radius-1075339.html]] \\ * WPA-HowTo bei freeradius.org: [[http://wiki.freeradius.org/WPA-HOWTO]] \\ * weiteres HowTo: [[http://vuksan.com/linux/dot1x/802-1x-LDAP.html]]\\ * Umfassende Infos zu 802.1x [[http://www.msxfaq.de/verschiedenes/8021x.htm]] auch als kabelgebundene Authentifizierung. In diesem Artikel wird der Access-Point in das grüne Netz integriert. Somit hat dann jeder authentifizierte User mit seinen Notebook vollen Zugang zum grünen Netz, was ggf. ein Sicherheitsrisiko darstellen kann. \\ U.U. sind nicht alle unten aufgeführten Schritte notwendig. **//Die Integration ins blaue Netz siehe ->//** [[radius-accesspoint-blau]] ===== (A) Konfiguration des WLAN-Access-Points ===== Der AP muss auf WPA2 Enterprise oder 802.1X umgestellt werden. Weiterhin muss man die IP der paedML eintragen (meist 10.16.1.1), den Port (1812) und das "Shared Secret" mit dem der AP sich beim Server authentifiziert. Auch sollte man dem AP eine feste IP geben, im folgenden wird die IP 10.16.1.10 mit Subnet-Mask 255.240.0.0 , Gateway 10.16.1.254 verwendet und schließlich den AP in die Hostlist der paedML (... import_workstations) aufnehmen. {{:wlan:screenshot-ap-radius2.jpg}} ===== (B) Installation von freeradius ===== Das Standard-Paket freeradius 2.0.8 in der paedML 5.0 hat leider keine openSSL-Unterstützung. Deshalb muss man die Version aus den Backports installieren (aktuell am 24.10.2011 war 2.1.10). Zur Installation auf der paedML 5.x sind folgende Schritte notwendig: - neue Paketquelle mit lenny-Backports eintragen - 3 Pakete (feeradius, freeradius-ldap, freeradius-utils) daraus installieren In **''/etc/apt/sources.list.d''** eine neu Datei **''lenny-backports.list''** anlegen mit dem Inhalt: dep http://backports.debian.org/debian-backports lenny-backports main contrib non-free Dann als root: # aptitude update # aptitude -t lenny-backports install freeradius freeradius-ldap freeradius-utils Nach erfolgreicher Installation zur Sicherheit die Backportquelle wieder deaktivieren. ===== (C1) Konfiguration von freeradius ===== Die Haupt-Konfigurationsdatei ist "**''radiusd.conf''**" - jedoch sind viele Konfigurationen in "**''/modules/*''**" oder "**''/sites-available/default''**" ausgelagert. **Problem:** Je nach Vorgeschichte der paedml 5.0.3 sind die Konfigurationsdateien von freeradius nicht identisch. Dies liegt daran, dass eine alte freeradius-Installation vorhanden war und alte Konfigurationsdateien in /etc/freeradius lagen. Anpassungen siehe -> [[version3:problemkonfiguration-freeradius]]. Nun in der Datei **''/etc/freeradius/users''** bei folgender Zeile zu Testzwecken den Kommentar entfernen: steve Cleartext-Password := "testing" Test des RADIUS-Servers als root: # /etc/init.d/freeradius restart # radtest steve testing 127.0.0.1:1812 10 testing123 sollte folgende Ausgabe erzeugen: rad_recv: Access-Accept Packet from ... Dabei ist in der Datei **''/etc/freeradius/clients.conf''** das Secret "testing123" für localhost schon vordefiniert. Test von [[http://de.wikipedia.org/wiki/Extensible_Authentication_Protocol|EAP]] am Radius-Server. # radtest -t eap-md5 steve testing localhost 10 testing123 In der Datei **''/etc/freeradius/clients.conf''** einen Eintrag für den AP hinzufügen: client ap01 { ipaddr = 10.16.1.10 secret = muster123 } In der Datei **''/etc/freeradius/eap.conf''** setzen (Parameter mschapv2 meist schon gesetzt): eap { ... default_eap_type = peap ... } ... peap { ... default_eap_type = mschapv2 ... } Erklärung siehe: [[http://en.wikipedia.org/wiki/Protected_Extensible_Authentication_Protocol|PEAP]]. Statt "peap" funktioniert auch der Parameter "ttls". In der Datei **''/etc/freeradius/modules/pap''** setzen: pap { auto_header = yes } **Achtung:** Falls es diese Option in der Datei radiusd.conf auch gibt, dann dort setzen. Siehe -> [[version3:problemkonfiguration-freeradius]]. ===== (C2) Konfiguration der freeradius log-Dateien ===== In der Datei **''/etc/freeradius/radiusd.conf''** kann das Logging von Authentifizierungs-Anfragen eingeschaltet werden (dann restart des Dienstes). Die Log-Datei ist: **''/var/log/freeradius/radius.log''**. log { ... auth = yes ... } **Alternativ:** In der Datei **''/etc/freeradius/sites-available/default''** kann zusätzlich das Logging per IP von Anfragen eingeschaltet werden. Die Logdatei ist dann z.B.: **''/var/log/freeradius/radacct/127.0.0.1/auth-detail20111030.log''**. authorize { ... auth_log ... } Weitere Konfigurationsmöglichkeiten von freeradius siehe: [[copspot|freeradius und CopSpot]] ===== (C3) Konfiguration von freeradius-ldap ===== In LDAP sind die Passwörter der User als sha-hash, als LMPassword-hash und als NTPassword-hash abgelegt. Nicht jedoch im Klartext oder als MD5. Deshalb funktioniert eine md5-Abfrage nicht In der Datei **''/etc/freeradius/modules/ldap''** den eigenen LDAP-Server mit basedn eintragen (Daten anpassen!!). Das Password zur Identity findet man in **''/etc/ldap/slapd.conf''** unter rootpw. ... server = "localhost" identity = "cn=admin,dc=musterschule,dc=local" password = xyz basedn = "ou=accounts,dc=musterschule,dc=local" filter = "(uid=%u)" ... Da diese Datei ein Passwort enthält sollte man die Zugriffsrechte einschränken: # chown root:freerad /etc/freeradius/modules/ldap # chmod 640 /etc/freeradius/modules/ldap In der Datei **''/etc/freeradius/sites-available/default''** die LDAP-Authentifizierung aktivieren, d.h. bei den jeweiligen Zeilen zu LDAP das Kommentarzeichen entfernen: ... authorize { ... ldap ... } authenticate { ... Auth-Type LDAP { ldap } ... } Ebenso in der Datei **''/etc/freeradius/sites-available/inner-tunnel''** die LDAP-Authentifizierung aktivieren: ... authorize { ... ldap ... } Test mit dem LDAP-User "zell" und seinem Passwort "muster": # /etc/init.d/freeradius restart # radtest zell muster localhost 10 testing123 sollte folgende Ausgabe erzeugen: rad_recv: Access-Accept Packet from ... Eine "radtest -t eap-md5 ..." funktioniert __nicht__ mit LDAP-Usern, da LDAP in der paedML kein MD5-Passwort oder Cleartext-Passwort hat. ===== (D) Firewall der paedML konfigurieren ===== Zunächst blockiert die Firewall alle Zugriffe auf den Radius-Server. Die Radius-Ports (1812 bis 1814 - UDP), die für das grüne Netz freigegeben sein sollen, müssen in der Datei **''/etc/linuxmuster/base_ports''** eingetragen werden. Ein Eintrag in der Datei **''allowed_ports''** genügte leider nicht - wahrscheinlich wegen einer dem Server unbekannten MAC beim Zugriff. udp 67:69, ... ,1812:1814 Dann die Firewall neu starten mit: # /etc/init.d/linuxmuster-base restart ===== (E) Zertifikate erstellen ===== Es wird nun ein Stamm/root-Certifikat (**''ca.der''**, **''ca.pem''**) und ein Server-Certifikat (**''server.pem''**) erstellt. Dazu die Vorlagen nach /root kopieren: # cp -r /usr/share/doc/freeradius/examples/certs /root Jetzt die beiden Konfigurationsdateien **''/root/certs/ca.cnf''** und **''/root/certs/server.cnf''** identisch editieren (den eigenen Daten anpassen). Unter dem Namen "CA-linuxmuster" findet man das root-Zertifikat später am Windows-Client wieder. ... default_days = 3650 ... [reg] input_password = whatever output_password = whatever ... [certificate_authority] contryName = DE StateOrProvinceName = Deutschland localityName = Karlsruhe organisationName = CA-linuxmuster emailAddress = administrator@linuxmuster.local commonName = CA-linuxmuster ... Die Passwörter "whatever" befinden sich ebenfalls in der Datei **''/etc/freeradius/eap.conf''** und müssen natürlich überall übereinstimmen (Veränderung sinnvoll). \\ Die Zertifikate durch das make-Script erstellen: # cd /root/certs # make all Die Zertifikate nach **''/etc/freeradius/certs''** kopieren und den Radius-Server neustarten: # cp /root/certs/ca.* /etc/freeradius/certs # cp /root/certs/server.* /etc/freeradius/certs # /etc/init.d/freeradius restart Das root-Zertifikat **''/etc/freeradius/certs/ca.der''** auf USB-Stick speichern um es zum Windows-Client zu übertragen. ===== (F) Konfiguration eines WinXP-Clients ===== Die Konfiguration der Windows-Clients am besten nachlesen in: \\ [[http://www.heise.de/netze/artikel/WLAN-sichern-mit-Radius-1075339.html]] \\ Ggf. muss ein WPA2-update installiert werden: [[http://support.microsoft.com/kb/893357]] - Das Stamm/root-Zertifikat am Windows-Client importieren: Doppelklick auf die **''ca.der''** - Datei. Dies kann jeder Benutzer selbst durchführen. - Ein neues Drahtlosnetzwerk-Profil manuell erstellen: * Drahtlosnetzwerke -> Erweiterte Einstellungen ändern -> Bevorzugte Netzwerke -> hinzufügen * Netzwerkauthentifizierung: WPA2 * Datenverschlüsselung: AES * Authentifizierung -> EAP-Typ: geschütztes EAP (PEAP) * Als Computer authetifizieren ...: NEIN * Als Gast authentifizieren ...: NEIN * -> Eigenschaften -> Serverzerfikat überprüfen: JA * -> Eigenschaften -> vertrauenswürdige Stammz. -> linuxmuster: JA * -> Eigenschaften -> Authentifizierungsmethode -> konfigurieren -> Autom. eig. Windowsanmeldenamen ...: NEIN - Nun auf den erscheinenden Zertifikat-Balloon-Hinweis klicken und zum Verbinden mit den Radius-Username "steve" dessen Passwort eingeben (siehe Datei /etc/freeradius/users).\\ **//Diese Passwort wird dann aber von Windows XP dauerhaft im Profil gespeichert!//** \\ //**Lösung dazu:**// -> [[version3:eapol_registry_keys|Registry Keys von EAPOL]]\\ Bei Windows 7 lässt sich die Speicherung abschalten. {{:wlan:screenshot-winxp.jpg}} Nur wenn der Client mit seiner WLAN-MAC in die Hostlist am Server aufgenommen ist, hat er danach vollen Netzzugriff auf das grüne Netzwerk. Diese Aussage gilt aber nur, falls lmn auch DHCP macht. Es findet nach dieser Anleitung und Anhand der RADIUS-Konfiguration von lmn keinerlei RADIUS-Prüfung der MAC-Adresse statt! Ein Zugriff mit einer passenden festen IP und gültigen Zugangsdaten ist also trotzdem möglich! **Variation 1:** Der Zertifikatsimport kann ausgelassen werden, dann muss bei den "Eigenschaften für geschütztes EAP" die Zertifikatsprüfung komplett abgeschaltet werden. Dies stellt aber ein **Sicherheitsproblem** dar. Ein falscher Access-Point kann nun ohne die Zertifikatsprüfung die Passwörter der Nutzer ausspähen -> [[http://de.wikipedia.org/wiki/Phishing|Phishing]]. **Variation 2:** Bei [[http://www.hrz.tu-darmstadt.de/dienste/netz_und_internet/campusnetz_netzanbindung/mobiler_netzzugang/wpa2eapttls/xp_secure_w2.de.jsp|TU-Darmstadt]] findet man eine Anbindung mit Hilfe eines Zusatzprogrammes "SecureW2" beschrieben. Dort erhält man auch die alte kostenlose Version von SecureW2 ===== (G) Sicherheits-Einstellungen ===== Mehrere Dateien der freeradius-Konfiguration enthalten Passwörter und sollten deshalb zugriffsbeschränkt sein. Ebenso sollten die Standard-Passwörter in produktiven Systemen durch sichere Passwörter ersetzt werden. Bei meiner Standard-Installation waren die folgenden Dateien leider global lesbar! Datei: **''/etc/freeradius/user''**. Auch den Testuser "steve" wieder deaktivieren. # chown root:freerad /etc/freeradius/user # chmod 640 /etc/freeradius/user Datei: **''/etc/freeradius/radiusd.conf''** # chown root:freerad /etc/freeradius/radiusd.conf # chmod 640 /etc/freeradius/radiusd.conf Datei: **''/etc/freeradius/eap.conf''**. Auch neues Zertifikat mit neuem Passwort erstellen. # chown root:freerad /etc/freeradius/eap.conf # chmod 640 /etc/freeradius/eap.conf Datei: **''/etc/freeradius/clients.conf''**. Auch alle "secrets" ändern. # chown root:freerad /etc/freeradius/clients.conf # chmod 640 /etc/freeradius/clients.conf Datei: **''/etc/freeradius/modules/ldap''** # chown root:freerad /etc/freeradius/modules/ldap # chmod 640 /etc/freeradius/modules/ldap ===== (H) Debug - Möglichkeiten ===== Der Freeradius-Server gibt unter **''/var/log/freeradius''** sehr wenig Infos über sich heraus. Zur Fehlersuche ist es sinnvoll den normalen Dienst zu stoppen und dann in einer extra-Konsole den Dienst im debug-Modus zu starten: # /etc/init.d/freeradius stop # /usr/sbin/freeradius -X Zum Abschalten der kompletten Firewall folgenden Befehl eingeben (Achtung: Sicherheitsproblematik beachten - nur zu Testzwecken, danach am besten Server neu booten): # iptables --flush Firewall-Regeln für die Radius-Ports anzeigen: # iptables -L -n | grep 181 Firewall neu initialisieren: # /etc/init.d/linuxmuster-base start Mit dem Tool **''radsniff''** werden die Pakete der Radius-Kommunikation angezeigt. Wenn die Radius-Anfragen vom Server selbst kommen (z.B. bei radtest) muss der Schalter "-i lo" angegeben werden. Ggf. das "secret" anpassen. # radsniff -x -s testing123 # radsniff -i lo -x -s testing123 Informationen zu einem User ausgeben: # sophomorix-user -u zell # smbldap-usershow zell ===== (J) Konsolenbefehle zur Clientsimulation ===== Das Paket **''freeradius-utils''** enthält den Befehl **''radtest''** mit dem von der Konsole freeradius abgefragt werden kann. Dieser Befehl kann aber __keine__ EAP-TLS oder EAP-PEAP Abfragen machen. # radtest steve testing 127.0.0.1:1812 10 testing123 # radtest zell muster localhost:1812 10 testing123 # radtest -t eap-md5 steve testing 127.0.0.1:1812 testing123 Für EAP-TLS oder EAP-PEAP muss ein zusätzliches Script "**''rad_eap_test''**" installiert werden. Ebenso benötigt man das Programm "**''eapol_test''**". Beide Programme findet man unter: [[http://wiki.eduroam.cz/rad_eap_test/]]. Dort findet man auch ein vor-kompiliertes **''eapol_test''**. \\ Kopieren Sie beide Programme nach **''/root/bin''**. \\ Zum Auflisten aller Parameter von **''rad_eap_test''** das Script ohne Parameter aufrufen. Nun kann man von der Konsole Testanfragen an den Radiusserver absetzen. (Im Script rad_eap_test ist der Pfad von eapol_test hardkodiert!) Auf Groß/Kleinschreibung der Parameter achten. Die Scripte müssen ausführbar sein. # cd /root # bin/rad_eap_test -H 127.0.0.1 -P 1812 -S testing123 -u steve -p testing -m IEEE8021X -e PEAP # bin/rad_eap_test -H 127.0.0.1 -P 1812 -S testing123 -u zell -p muster -m IEEE8021X -e TTLS