123788
Goto Top

PfSense: Freeradius, EAP-TLS, VLAN-Zuordnung

Hallo zusammen,

ich verwende nun Freeradius auf pfSense, um ein EAP-TLS für's WLAN zu stellen.
In Zukunft möchte ich den Radius-Server auch nutzen, um dem AP mitzuteilen, in welches VLAN ein User geschubst werden soll.
Problem ist im Moment: Ich habe zwar pfSense-User angelegt, aber man kann sich auch problemlos mit einem Phantasie-Usernamen einloggen, solange man auf dem Clientgerät das korrekt Zertifikat nutzt.
Kann man das verhindern? Quasi Username+PW+Zertifikat verwenden?
Oder die VLAN-ID an das Zertifikat binden, statt an den Usernamen?

Content-Key: 324867

Url: https://administrator.de/contentid/324867

Printed on: April 20, 2024 at 04:04 o'clock

Member: aqui
aqui Dec 26, 2016, updated at May 15, 2023 at 14:53:54 (UTC)
Goto Top
aber man kann sich auch problemlos mit einem Phantasie-Usernamen einloggen, solange man auf dem Clientgerät das korrekt Zertifikat nutzt.
Das ist natürlich Quatsch und zeigt das du gar kein WPA Enterprise machst, bzw. der Radius oder aber auch der AP falsch konfiguriert ist !
Die hiesigen Tutorials zu dem Thema beschreiben das entsprechend:
Freeradius Management mit WebGUI
Sichere 802.1x WLAN-Benutzer Authentisierung über Radius
Netzwerk Zugangskontrolle mit 802.1x und FreeRadius am LAN Switch
Letzteres beschreibt auch die dynamische Zuordnung von VLANs auf die Clients.
Ohne eine entsprechende Userkonfig ist es unmöglich sich in das WLAN einzubuchen eine korrekt Radius Konfig vorausgesetzt.
Bei dir stimmt also ganz grundsätzlich was nicht.
Auch hier findest du noch ein paar Grundlagen zu dem Thema:
Netzwerk Management Server mit Raspberry Pi
Mitglied: 123788
123788 Dec 26, 2016 updated at 13:26:33 (UTC)
Goto Top
Nun, der Radius entspricht der Standard-Konfiguration von pfSense (mit der Ausnahme, dass ich eigene Zertifikate über den Cert-Manager von pfSense importiert habe). Der AP ist momentan noch ein schlichter TP-Link, da gibt's nicht viel zu konfigurieren, dem trägt man den Radius-Server, sowie das zugehörige Passwort ein und fertig.

Edit: Die Tutorials behandeln Dinge, die pfSense schon von selbst übernimmt (Anpassen der eap.conf etc.) und drehen sich auch nur um EAP-TTLS/PEAP, oder? Ich sehe jedenfalls auf den ersten Blick nichts für reines EAP-TLS.

Vielleicht siehst du ja etwas, das ich übersehe:

Edit: Ich habe einen Menüpunkt "Check Client Certificate CN" gefunden.
Wenn ich diesen aktiviere wird überprüft, ob das User-Zertifikat den selben CN-Namen hat wie ein angelegter Benutzer.
Heißt das Zertifikat also "wlanuser", muss es auch einen "wlanuser" unter den Benutzern im Freeradius geben.
Mehr wir damit allerdings auch nicht überprüft.

Edit2: Ich lasse nun zusätzlich "Check Cert Issuer" machen. Dies führt zu dem unten aufgeführten Fehler im Radius-Log.
Was mich verwundert: Die Werte sind doch identisch? Außerdem sind die Zertifikate definitiv korrekt...

Mon Dec 26 13:50:51 2016 : Auth: rlm_eap_tls: Certificate issuer (/C=AB/ST=CD/L=EF/O=GH/CN=GH CA/name=MN/emailAddress=I@J) does not match specified value (/C=AB/ST=CD/L=EF/O=GH/emailAddress=I@J/CN=GH CA)!
Mon Dec 26 13:50:51 2016 : Error: TLS Alert write:fatal:certificate unknown
Mon Dec 26 13:50:51 2016 : Error:     TLS_accept: error in error
Mon Dec 26 13:50:51 2016 : Error: rlm_eap: SSL error error:140890B2:SSL routines:SSL3_GET_CLIENT_CERTIFICATE:no certificate returned
Mon Dec 26 13:50:51 2016 : Error: SSL: SSL_read failed in a system call (-1), TLS session fails.
Mon Dec 26 13:50:51 2016 : Auth: Login incorrect (TLS Alert write:fatal:certificate unknown): [username/<via Auth-Type = EAP>] (from client AP port 0 cli xx-xx-xx-xx-xx-xx)

Edit3: Absolut idiotisch... passe ich die Zeile händisch in der eap.conf an, funktioniert alles. Und das, obwohl die übergebenen Werte ja absolut identisch sind... Hat das einen tieferen Sinn?

check_cert_issuer = "/C=AB/ST=CD/L=EF/O=GH/CN=GH CA/name=MN/emailAddress=I@J"  

Hier außerdem meine eap.conf:

/usr/local/etc/raddb/eap.conf
Array	### EAP
	eap {
		default_eap_type = tls
		timer_expire     = 60
		ignore_unknown_eap_types = no
		cisco_accounting_username_bug = no
		max_sessions = 4096
		
		### DISABLED WEAK EAP TYPES MD5, GTC, LEAP ###


		### EAP-TLS and EAP-TLS with OCSP support
		tls {
			certdir = ${confdir}/certs
			cadir = ${confdir}/certs
			private_key_password = whatever
			private_key_file = ${certdir}/server_key.pem
			certificate_file = ${certdir}/server_cert.pem
			CA_file = ${cadir}/ca_cert.pem
			dh_file = ${certdir}/dh
			random_file = ${certdir}/random
			fragment_size = 1024
			include_length = yes
			check_crl = no
			CA_path = ${cadir}
			check_cert_issuer = "/C=US/ST=CD/L=EF/O=GH/OU=KL/CN=GH CA/name=MN/emailAddress=I@J"  
			check_cert_cn = %{User-Name}
			cipher_list = "DEFAULT"  
			ecdh_curve = "prime256v1"  
			cache {
			      enable = no
			      lifetime = 24
			      max_entries = 255
			}
			verify {
		#     		tmpdir = /tmp/radiusd
		#    		client = "/path/to/openssl verify -CApath  %{TLS-Client-Cert-Filename}" 
			}
			ocsp {
			      enable = no
			      override_cert_url = no
			      url = "http://127.0.0.1/ocsp/"  
			}
		}
	
	}


Bin ich denn grundsätzlich auf dem richtigen Wege? Also die CN des User-Certs gegenzuchecken mit einem User aus dem Radius und außerdem das Zertifikat des Users gegen meine CA zu prüfen?
Dem letzten Wege traue ich noch nicht so recht, weil mich diese händische Anpassung irritiert...
Member: aqui
aqui Dec 26, 2016 at 20:48:04 (UTC)
Goto Top
Nun, der Radius entspricht der Standard-Konfiguration von pfSense
Das tut wie immer nix zur Sache...ist ja ein Freeradius der da werkelt.
Hier zählt das Zertifikat und wie die users.conf, clients, con und die lap.conf eingestellt ist und noch ein paar andere Konf Dateien.
Siehe Raspeberry Pi Tutorial oben was die Details dazu hat.
Es ist auf alle Fälle unmöglich in einem solchen Setaup das man sich mit x-beliebigen User Credentials da einloggen kann.
Wäre ja auch Schwachsinn, denn genau DAS will man ja mit einer wasserdichten Radius Authentisierung genau verhindern....
Die oben zitierten Tutorials beschreiben ja genau die Zertifikats Generierung.
Bedneke das da nur die Radius Server Zertifizierung ist und KEIN Client Zertifikats Generierung !
Das ist ne andere Baustelle...
Mitglied: 123788
123788 Dec 26, 2016 at 22:39:26 (UTC)
Goto Top
Nabend!

Habe die Zertifikate zum Testen einfach mal mit easy-RSA erstellt, was man ja sonst eher für z.B. openVPN nutzt.
Funktioniert auch ansonsten wunderbar aber ich hab's gerade mal getestet: Sofern ich den Client-CN nicht gegenchecken lasse, kann ich einen beliebigen Nutzernamen wählen und der Radius lässt mich durch:


Mon Dec 26 23:36:00 2016 : Auth: Login OK: [yksbbkv] (from client AP port 0 cli xx-xx-xx-xx-xx-xx)

Leider finde ich aber nirgendwo ein vernünftiges Tutorial für "echtes" EAP-TLS. Höchstens was aus dem Jahre 2002 für Windows XP...
Gibt's da irgendwo etwas vernünftiges, das ich mir anschauen kann?
Member: aqui
aqui Dec 28, 2016 at 14:21:15 (UTC)
Goto Top
Hier mit hats auf Anhieb geklappt:
PFSense 2.3.2 Freeradius