====== WPA-EAP ======
Dieser Artikel soll das Setup einer [[http://en.wikipedia.org/wiki/Wi-Fi_Protected_Access#EAP_extensions_under_WPA_and_WPA2_Enterprise | WPA-EAP]] Authentifizierung für WLAN-Accesspoints beschreiben.\\
Das Setup wird ein "heimnetz" und "gastnetz" erstellen, wobei man sich im "heimnetz" per Zertifikat ([[http://en.wikipedia.org/wiki/Extensible_Authentication_Protocol#EAP-TLS | EAP-TLS]]) authentifiziert und im "gastnetz" per Username und Passwort ([[http://en.wikipedia.org/wiki/Extensible_Authentication_Protocol#PEAP | EAP-PEAP]]).
{{ :it:linux:wpa_eap_overview.svg?600 |Strukturübersicht}}
Die beiden Netze ("gastnetz" und "heimnetz") werden zwischen den APs (Accesspoints) und dem zentralen Router über [[http://en.wikipedia.org/wiki/Virtual_LAN|VLAN]] gekapselt.\\
Als Hardware wird ein OpenWRT kompatibles Gerät, der [[http://www.tp-link.com/en/products/details/?model=TL-WR1043ND|TL-1043ND]] von TP-Link, eingesetzt. Des Weiteren wird als Betriebssystem der APs OpenWrt Backfire 10.03.1 eingesetzt.\\
Als Radius-Server wird [[http://freeradius.org/|Freeradius]] verwendet.
===== Freeradius Konfiguration =====
==== /etc/freeradius/clients.conf ====
Will ein Client (in unserem Beispiel ein AP) eine Verbindung zum Radiusserver aufbauen, benötigt man einen entsprechenden Eintrag in der Datei "/etc/freeradius/clients.conf".
...
client 10.0.0.1 {
secret = changeme
shortname = ap-main
nastype = other
}
...
==== /etc/freeradius/eap.conf ====
Des Weiteren ist EAP zu konfigurieren.
"/etc/freeradius/eap.conf"
eap {
default_eap_type = tls
timer_expire = 60
ignore_unknown_eap_types = no
cisco_accounting_username_bug = no
max_sessions = 4096
tls {
certdir = ${confdir}/certs
cadir = ${confdir}/certs
private_key_file = ${certdir}/freeradius.key
certificate_file = ${certdir}/freeradius.crt
CA_file = ${cadir}/ca.crt
dh_file = ${certdir}/dh2048.pem
random_file = /dev/urandom
check_crl = no
CA_path = ${cadir}
cipher_list = "DEFAULT"
cache {
enable = no
lifetime = 24 # hours
max_entries = 255
}
}
peap {
default_eap_type = mschapv2
copy_request_to_tunnel = no
use_tunneled_reply = no
virtual_server = "inner-tunnel"
}
mschapv2 {
}
}
==== /etc/freeradius/sites-available/myconfig ====
authorize {
preprocess
if("%{NAS-Identifier}" == "homenet") {
update control {
EAP-TLS-Require-Client-Cert = Yes
}
eap
}
if("%{NAS-Identifier}" == "guestnet") {
files
eap
}
}
authenticate {
eap
}
preacct {
preprocess
acct_unique
suffix
files
}
accounting {
detail
unix
radutmp
exec
attr_filter.accounting_response
}
session {
radutmp
}
post-auth {
exec
Post-Auth-Type REJECT {
attr_filter.access_reject
}
}
pre-proxy {
}
post-proxy {
eap
}
Das hier ist die zentrale Konfig des Radiusservers.
Es wird zwischen zwei NAS-Identifier unterschieden: "guestnet" und "homenet".
Beim Anmelden im "homenet" wird ein Client-Zertifikat verlangt.
Config aktivieren:
cd /etc/freeradius
rm sites-enabled/default
ln -s sites-available/myconfig sites-enabled
===== PKI =====
Wie in der Konfigdatei zu sehen ist, benötigt man eine Art [[http://en.wikipedia.org/wiki/Public_key_infrastructure|PKI]].
Um diese Anzulegen wird [[http://openvpn.net/index.php/open-source/documentation/miscellaneous/77-rsa-key-management.html|easy-rsa]] verwendet.
Bei Verwendung von Ubuntu findet man easy-rsa nach der Installation des Pakets "openvpn" unter "/usr/share/doc/openvpn/examples/easy-rsa/".
- "vars" editieren: ...
export KEY_COUNTRY="DE"
export KEY_PROVINCE="BY"
export KEY_CITY="MeinStadt"
export KEY_ORG="ex23"
export KEY_EMAIL=pki@home.local
export KEY_CN=wpa-eap-pki
export KEY_NAME=ex23
export KEY_OU=it_linux
- Vorbereiten: source ./vars
./build-dh && ./build-ca
- Zertifikat für den Server erzeugen:./build-key-server freeradius
- Zertifikat für einen Client erzeugen:./build-key client01
- Zertifikat ([[http://en.wikipedia.org/wiki/PKCS12|PKCS12]]) für einen Client (z.B. IPhone, Windows, ...) erzeugen:./build-key client02
Alle erzeugten Dateien befinden sich anschließend im Verzeichniss "keys":
/tmp/easy-rsa/2.0 % ls keys
01.pem client01.crt client02.p12 freeradius.csr serial
02.pem client01.csr client-new.crt freeradius.key serial.old
03.pem client01.key client-new.csr index.txt
04.pem client02.crt client-new.key index.txt.attr
ca.crt client02.csr dh1024.pem index.txt.attr.old
ca.key client02.key freeradius.crt index.txt.old
==== Dateien für den Radiusserver ====
* ca.crt: Das Certificate-Authority Zertifikat
* freeradius.key: Der Private Schlüssel des Radiusservers
* freeradius.crt: Das Zertifikat des Radiusservers
* dh1024.pem: [[http://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange|Diffie-Hellman-Parameter]]
Diese Dateien werden unter "/etc/freeradius/certs" abgelegt.
==== Dateien für den Client ====
* ca.crt: Das Certificate-Authority Zertifikat
* client01.key: Der Private Schlüssel des Clients
* client01.crt: Das Zertifikat des Clients
Im Falle einer PKCS12 Datei, muss nur diese verteilt werden.
===== Accesspoints =====
Nach dem Installieren von OpenWRT muss noch das Paket "wpad" installiert werden:
opkg update
opkg remove wpad-mini
opkg install wpad
==== /etc/config/network ====
config 'interface' 'loopback'
option 'ifname' 'lo'
option 'proto' 'static'
option 'ipaddr' '127.0.0.1'
option 'netmask' '255.0.0.0'
config 'switch'
option 'name' 'rtl8366rb'
option 'reset' '1'
option 'enable_vlan' '1'
#VLAN ID 4 shall be the guestnet
#VLAN is tagged for CPU (@5) and WAN Port (@0)
config 'switch_vlan'
option 'device' 'rtl8366rb'
option 'vlan' '4'
option 'ports' '0t 5t'
#VLAN ID 5 shall be the homenet
#VLAN is tagged for CPU (@5) and WAN Port (@0)
config 'switch_vlan'
option 'device' 'rtl8366rb'
option 'vlan' '5'
option 'ports' '0t 5t'
#IP config for homenet
config 'interface' 'home_net'
option 'proto' 'static'
option 'ifname' 'eth0.5'
option 'netmask' '255.255.255.0'
option 'type' 'bridge'
option 'gateway' '10.0.3.250'
option 'dns' '10.0.3.1'
option 'ipaddr' '10.0.3.250'
#IP config for guestnet
config 'interface' 'guest_net'
option 'type' 'bridge'
option 'proto' 'static'
option 'ifname' 'eth0.4'
option 'netmask' '255.255.255.0'
option 'ipaddr' '10.0.2.250'
==== /etc/config/wireless ====
...
config 'wifi-iface'
option 'device' 'radio0'
option 'mode' 'ap'
option 'ssid' 'gastnetz'
option 'network' 'guest_net'
option 'encryption' 'wpa2'
option 'auth_secret' 'changeme'
option 'auth_server' '10.0.3.1'
option 'acct_server' '10.0.3.1'
option 'acct_secret' 'changeme'
option 'nasid' 'guestnet'
config 'wifi-iface'
option 'device' 'radio0'
option 'mode' 'ap'
option 'ssid' 'heimnetz'
option 'network' 'home_net'
option 'encryption' 'wpa2'
option 'auth_secret' 'changeme'
option 'auth_server' '10.0.3.1'
option 'acct_server' '10.0.3.1'
option 'acct_secret' 'changeme'
option 'nasid' 'homenet'
**HINWEISE:**
* Der Radiusserver ist unter der IP 10.0.3.1 zu erreichen.
* Der gemeinsame Schlüssel zwischen Radiusserver und Client ist "changeme"
* Der NAS-Identifier für das "gastnetz" ist "guestnet" und für das "heimnetz" ist er "homenet"
==== wpa_supplicant ====
=== /etc/network/interfaces ===
...
auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-driver wext
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
...
=== EAP-TLS ===
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=DE
fast_reauth=1
p2p_disabled=1
network={
ssid=""
eap=TLS
key_mgmt=WPA-EAP
pairwise=CCMP TKIP
proto=RSN
group=CCMP TKIP
identity=""
ca_cert="/etc/cert/ca.crt"
client_cert="/etc/cert/device.crt"
private_key="/etc/cert/device.key"
private_key_passwd=""
}
====== Links ======
* [[http://en.wikipedia.org/wiki/Wi-Fi_Protected_Access#EAP_extensions_under_WPA_and_WPA2_Enterprise]]
* [[http://en.wikipedia.org/wiki/Extensible_Authentication_Protocol]]
* [[http://en.wikipedia.org/wiki/Extensible_Authentication_Protocol#PEAP]]
* [[http://www.tp-link.com/en/products/details/?model=TL-WR1043ND]]
* [[http://en.wikipedia.org/wiki/Virtual_LAN]]
* [[http://freeradius.org/]]