[[Vorlage(Getestet, )]] {{{#!vorlage Wissen [:Pakete_installieren: Installation von Paketen] [:Editor: Einen Editor öffnen] [:Terminal: Ein Terminal öffnen] [:sudo: Root-Rechte] }}} [[Inhaltsverzeichnis(1)]] [[Bild(Wiki/Icons/Oxygen/network-wireless.png, 48, align=left)]] [https://w1.fi/wpa_supplicant/ wpa_supplicant] {en} ist ein Linuxprogramm, das, wie der Name schon sagt, die im [wikipedia:Wi-Fi_Protected_Access:WPA-Standard] definierte Rolle des "supplicant" (engl. für Bittsteller) wahrnimmt. Zur Authentifizierung existieren eine ganze Reihe von Protokollen, die wpa_supplicant auch beherrscht, wenn sie von der Hardware (auf der Client-Seite aber auch auf dem Access-Point) unterstützt werden. Der wpa_supplicant unterstützt WEP-, WPA-, WPA2-verschlüsselte und unverschlüsselte Netze. Die Vielzahl der möglichen Kombinationen macht die Konfiguration von wpa_supplicant etwas knifflig. {{{#!vorlage Hinweis Die in diesem Artikel beschriebene Vorgehensweise wird benötigt, sofern der [:NetworkManager:] keine Verbindung zu einem WLAN herstellen können oder für kabelgebundenes Netzwerk [wikipedia:IEEE_802.1X:] Authentifizierung benötigt wird. Sollte man allerdings ausschließlich das veraltete und unsichere WEP in einem WLAN verwenden, so gibt es keinen Grund, auf einem Client in einem solchen WLAN wpa_supplicant zu konfigurieren. '''iwconfig''' und ``wireless-*``-Einträge in '''/etc/network/interfaces''' reichen in diesem (zu vermeidenden) Fall aus (siehe dazu [:wireless-tools:]). }}} {{{#!vorlage Warnung Soll auf einem Linux-Rechner ein WLAN-Access-Point betrieben werden, so wird [:WLAN_Router: hostapd] benötigt, nicht wpa_supplicant. }}} = Installation = wpa_supplicant ist Bestandteil der Standardinstallation. Baut man auf eine Minimalinstallation auf, muss folgendes Pakete installiert [1] werden: * '''wpasupplicant''' {{{#!vorlage Hinweis Im gesamten Artikel wird als Beispiel-Schnittstelle ``wlan0`` verwendet. Dies muss unbedingt durch die tatsächliche Schnittstelle ersetzt werden, die man selbst benutzt. Mehr dazu unter [:WLAN/Installation:]. Wenn der Treiber über Ndiswrapper installiert wurde, muss die Schnittstelle evtl. auch noch in der Datei '''/etc/modprobe.d/ndiswrapper''' angepasst werden [2]. Dort steht automatisch ``wlan0``. }}} = WLAN-Konfigurationen eintragen = Als erstes muss die Datei '''/etc/wpa_supplicant/wpa_supplicant.conf''' angelegt und bearbeitet werden. Hierzu benötigt man einen Editor mit Root-Rechten [2]. Es sollte auch darauf geachtet werden, dass der Datei entsprechende [:chmod:Zugriffsrechte] gegeben werden (0600), noch bevor im späteren Verlauf irgendwelche Schlüssel in ihr abgelegt werden. In dieser Datei lauten die ersten Zeilen: {{{ ctrl_interface=/var/run/wpa_supplicant ctrl_interface_group=benutzergruppe # Die Gruppe muss natürlich angepasst werden eapol_version=1 # 0: Der Treiber des Interfaces kümmert sich um das Scannen von Netzen und die AP-Auswahl. # Dieser Modus sollte benutzt werden, wenn man eine Verschlüsselung auf ein Kabelnetzwerk legt. # 1: wpa_supplicant kümmert sich um das Scannen von Netzen und die AP-Auswahl. # 2: Fast wie 0, es wird aber mit Hilfe von Sicherheitsrichtlinien und der SSID zu APs verbunden (BSSID wird nicht unterstützt) # # Normalerweise funktioniert entweder Modus 1 oder Modus 2. ap_scan=1 }}} Danach werden die verschiedenen Netzwerkkonfigurationen eingetragen. {{{#!vorlage Hinweis Bei den folgenden Beispielkonfigurationen sind folgende Änderungen vorzunehmen: * ``Netzwerkname`` muss durch die tatsächlich verwendete (E)SSID (ebenfalls in Anführungszeichen) ersetzt werden. * ``pre-shared key`` muss durch den tatsächlich verwendeten pre-shared key ersetzt werden. Je nach Konfiguration von WPA/WPA2 können die Parameter variieren. Wenn man die Zeilen für ``proto``, ``key_mgmt``, ``pairwise`` und ``group`` nicht hinzufügt, werden Standardwerte gesetzt, die fast immer funktionieren. }}} {{{#!vorlage Experten Wer mehr über die verfügbaren Optionen lernen möchte, kann sich diese Beispielkonfiguration mit ausführlichen englischen Kommentaren ansehen: [[Anhang(wpa_supplicant.conf.examples)]] {dl} }}} == Verschlüsselung == Um ein WPA2-verschlüsseltes Netzwerk einzutragen, wird folgender Text hinzugefügt: {{{network={ ssid="Netzwerkname" scan_ssid=1 proto=RSN key_mgmt=WPA-PSK pairwise=CCMP group=CCMP psk="meinschluessel" } }}} Je nach Konfiguration des Access-Points könnte es aber auch sein, dass noch eine gemischte Verschlüsselung mit veraltetem '''WPA1-TKIP''' verwendet wird {{{ proto=RSN WPA ... pairwise=CCMP group=TKIP }}} oder reine WPA1-Verschlüsselung: {{{ proto=WPA ... pairwise=TKIP group=TKIP }}} oder für alle möglichen Variationen {{{ proto=RSN WPA ... pairwise=CCMP TKIP group=CCMP TKIP }}} Der Supplicant handelt dann mit dem Access-Point die Verbindung entsprechend aus. Verschlüsselung nach '''WPA1-TKIP''' beruht auf der veralteten WEP-Verschlüselung, ist rel. unsicher und sollte nicht mehr verwendet werden!. Weitere Beschreibungen dazu in [:WLAN/#WLAN-Sicherheit:WLAN - ''WLAN-Sicherheit'']. Aktuell ist WPA2-Verschlüsselung die beste und sicherste Methode. Wie man die genaue Konfiguration des Access-Points herausfinden kann, steht im Abschnitt [#Verschluesselungskonfiguration-des-Access-Points-ermitteln Verschlüsselungskonfiguration des Access-Points ermitteln]. == WEP-Verschlüsselung == {{{#!vorlage Warnung Eine WEP-Verschlüsselung kann innerhalb weniger Minuten (abhängig vom Netzwerkverkehr) entschlüsselt werden und ist deshalb unsicher. Die WEP-Verschlüsselung sollte deshalb nicht eingesetzt werden. }}} {{{ network={ ssid="Netzwerkname" scan_ssid=1 key_mgmt=NONE wep_tx_keyidx=0 wep_key0="Netzwerkschlüssel" } }}} Erfolgt die Verschlüsselung als "WEP-shared", so sollte noch folgendes angefügt werden: {{{ auth_alg=SHARED priority=2 }}} == Unverschlüsselte Netzwerke == {{{#!vorlage Warnung Bei einem unverschlüsselten WLAN kann jeder den Datenstrom zwischen PC und Router mitschneiden. Ein unverschlüsseltes WLAN sollte deshalb nicht eingesetzt werden. Deshalb gibt es an dieser Stelle auch keine Beispielkonfiguration. Man beachte auch mögliche [:WLAN:rechtliche Konsequenzen]. }}} In bestimmten Situationen muss man sich mit unverschlüsselten Netzen verbinden (z.B. Universitätsfunknetze mit SSH-Authentifikation). Zur Verbindung mit einem unverschlüsselten Netz ist wpa_supplicant jedoch nicht nötig. Siehe [:wireless-tools:]. === 802.1X Netzwerke === [wikipedia:IEEE_802.1X:] Netzwerke werden in Firmen sowie Hochschulen eingesetzt. Durch die große Anzahl an Authentifizierungsarten kann hier nur beispielhaft eine Konfiguration eines unverschlüsselten Netzwerkes mit 802.1X Authentifizierung angeführt werden. Diese Konfiguration dürfte für alle Hochschulen, die am DFN-Roaming ([http://airoserv4.dfn.de/ Hochschulen die am DFN-Roaming teilnehmen] {de}, [https://www.dfn.de/dienstleistungen/dfnroaming/ Beschreibung des Dienstes] {de}) teilnehmen, stimmen. Für die Authentifizierung wird zusätzlich das Paket '''openssl''' (Standard von wpa_supplicant) oder '''gnutls''' benötigt. Um sich mit Funknetzwerken mit 802.1X Authentifizierung anzumelden, bedarf es eines Eintrages folgender Art: {{{ network={ ssid="Netzwerkname" key_mgmt=IEEE8021X eap=TTLS #Verschlüsselung während der Authentifizierung anonymous_identity="anonymous" #Äussere Identität identity="Benutzer@Authentifizierungs-Server" #Innere Identität password="Passwort" #Passwort phase2="auth=PAP" #ca_cert="PFAD_ZUM_STAMMZERTIZIKAT/ZERTIFIKAT" #optionale Angabe des zu verwendenden Stammzertifikats } }}} Es ist ebenfalls möglich einen externen Supplikanten für 802.1X Netzwerke zu verwenden, z.B. [http://open1x.sourceforge.net/ xsupplicant] {en}. In diesem Fall ist die Option ``-e`` in dem Aufruf von '''wpasupplicant''' zu verwenden. Siehe hierzu: Hilfe zu wpa_supplicant, zu erreichen mit: {{{#!vorlage Befehl man wpa_supplicant }}} ==== Beispiel Fachhochschule Südwestfalen (NRW) ==== {{{ network={ ssid="802.1X" key_mgmt=IEEE8021X eap=TTLS anonymous_identity="anonymous" identity="Benutzername@urmel.fh-swf.de" password="swordfish" ca_cert="/etc/wpa_supplicant/wlanCA.dvz.fh-swf.de.pem" phase2="auth=PAP" } }}} Das Stammzertifikat (wlanCA.dvz.fh-swf.de.pem) sowie das standortabhängige Zertifikat (Meschede: `meswlangate.dvz.fh-swf.de.pem`, Soest: `sowlangate.dvz.fh-swf.de.pem`) liegen im Ordner '''/etc/wpa_supplicant'''. In dieser Beispielkonfiguration wurden die benutzerspezifischen Daten durch die Worte ``Benutzername`` und ``swordfish`` ersetzt. Die Dateiendungen können je nach Quelle der Zertifikate variieren (z.B. wenn diese aus MS Windows exportiert wurden). == Verschlüsselungskonfiguration des Access-Points ermitteln == Der Befehl {{{#!vorlage Befehl sudo iwlist scanning # oder sudo iwlist scan # oder gefiltert und übersichtlicher mit den wesentlichen Informationen sudo iwlist wlan0 scan | egrep -i 'cell|chan|essid|wpa|cipher|qual' # der Network-Manager zeigt das ebenfalls bei manueller Abfrage nmcli dev wifi list }}} Bei Geräten die durch das mac80211-Subsystem unterstützt werden, zeigt [:iw:] alle Details: {{{#!vorlage Befehl sudo iw dev [WLAN-Interface] scan }}} zeigt alle WLAN-Netze in Reichweite, inklusive ihrer Verschlüsselungskonfiguration, an. Für diese Aktion sind Root-Rechte [4] notwendig. Die Konfiguration der WLAN-Verschlüsselung wird in folgender Form ausgegeben: {{{ IE: IEEE 802.11i/WPA2 Version 1 Group Cipher : TKIP Pairwise Ciphers (2) : CCMP TKIP Authentication Suites (1) : PSK }}} In diesem Fall wird WPA2 benutzt (proto=RSN), wie die erste Zeile verrät. Die Angabe bei "Group Cipher" muss der Option "group=" in der wpa_supplicant.conf entsprechen. Die Angabe bei "Pairwise Ciphers" zeigt einem, welche Verschlüsselungsalgorithmen der Access-Point anbietet. In diesem Fall CCMP oder TKIP. Die Option, die man benutzen will, muss man entsprechend bei "pairwise=" angeben. Die letzte Zeile gibt an, welches Authentifizierungsverfahren eingesetzt wird: in diesem Fall ein vorher verteilter Schlüssel (key_mgmt=WPA-PSK). Zusammengefasst handelt es sich hierbei um ein WLAN, das WPA2 mit "Pre Shared Key" (PSK) verwendet und bei dem die Clients sich bei dem Verschlüsselungsalgorithmus zwischen CCMP (AES) und TKIP (RC4) entscheiden können. Für WPA mit nur CCMP sieht die Ausgabe folgendermaßen aus: {{{ IE: WPA Version 1 Group Cipher : CCMP Pairwise Ciphers (1) : CCMP Authentication Suites (1) : PSK }}} Wenn ein Access-Point sowohl WPA als auch WPA2 anbietet, können auch zwei solche Abschnitte in der Ausgabe für ein WLAN erscheinen. Die Angaben in der Datei ``wpa_supplicant.conf`` entscheiden dann darüber, ob der Client für die Verbindung mit dem Access-Point WPA oder WPA2 benutzt. Wichtig ist, darauf zu achten, welche "Ciphers" angeboten werden, und die wpa_supplicant.conf entsprechend zu bearbeiten. Werden bei "Pairwise Ciphers" CCMP und TKIP angezeigt, so kann. je nachdem was man in der wpa_supplicant.conf bei "pairwise" angibt, TKIP oder CCMP für die Verschlüsselung zwischen Client und Access-Point genutzt werden. Wenn bei "Pairwise Ciphers" CCMP und TKIP angeboten werden, ist der "Group Cipher" immer TKIP, damit es abwärtskompatibel bleibt. Wenn ausschließlich CCMP benutzt wird, ist auch der "Group Cipher" CCMP. = wpa_supplicant testen und manuell starten = {{{#!vorlage Hinweis Sollte zuvor schon einmal eine WLAN-Verbindung über WEP eingerichtet gewesen sein, so muss diese deaktiviert werden. Es kann sonst zu Problemen beim Verbindungstest kommen. Unter GNOME findet man die Option dafür am einfachsten unter ''"System -> Systemverwaltung/Administration -> Netzwerk"''. }}} {{{#!vorlage Hinweis Im Folgenden wird die Option ``-D wext`` verwendet. Diese ist ggf. auf den richtigen Treiber einzustellen! }}} Bevor nun der wpa_supplicant fest eingebunden wird, sollte er getestet werden. Dies kann über die Debugging-Funktion geschehen, indem man Folgendes in ein Terminal [3] eingibt: {{{#!vorlage Befehl sudo wpa_supplicant -i wlan0 -D wext -c /etc/wpa_supplicant/wpa_supplicant.conf -d }}} Dabei ist ``-i`` der Name des Wireless Interface, ``-D`` der Name des Treibers (siehe auch Tabelle unten), ``-c`` Pfad zur Konfigurationsdatei und ``-d`` Debug Modus. Falls nun Fehler auftreten sollten, werden diese aufgelistet; um noch weitere Informationen zu erhalten, kann auch ``-dd`` als Debug Modus verwendet werden. Um nun zu überprüfen, ob eine Verbindung ordnungsgemäß aufgebaut wurde, sollte in einem neuen Terminal der Befehl {{{#!vorlage Befehl iwconfig }}} eingegeben werden. Die Verbindung war erfolgreich, wenngleich nach dem Interface nicht mehr "unassociated", sondern die Art des Drahtlosnetzwerkes steht, z.B. "IEEE 802.11g." Um die Verbindung nun zu benutzen, ohne sie fest in das System einzubinden, muss der WPA-Supplicant im Daemon-Modus gestartet werden (``-B`` Daemon (Background) Modus): {{{#!vorlage Befehl sudo wpa_supplicant -i wlan0 -D wext -c /etc/wpa_supplicant/wpa_supplicant.conf -B }}} Als letztes ist noch der DHCP-Client für das ''Wireless Interface'' zu starten (damit man eine IP-Adresse bekommt): {{{#!vorlage Befehl sudo dhclient wlan0 }}} Der DHCP-Client sollte dann eine IP-Adresse liefern, und die Verbindung ist somit hergestellt. = wpa_supplicant aktivieren = Um den wpa_supplicant zu aktivieren, fehlt noch ein entsprechender Verweis in der Datei '''/etc/network/interfaces'''. Diese wird mit einem Editor mit Root-Rechten geöffnet [2] und folgende Zeile zum entsprechenden Interface hinzugefügt: {{{ wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf }}} Alternativ kann folgender Eintrag angefügt werden: {{{ wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf }}} Die vollständige Datei kann so aussehen: {{{# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto wlan0 iface wlan0 inet dhcp wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf }}} Mehr Informationen zur '''/etc/network/interfaces''' gibt es in einem [:interfaces:gesonderten Artikel]. == Treiber == ##++ Ausgelagert nach [:interfaces:]++ Falls ''wpa_supplicant'' nicht läuft, muss noch ein Treiber gewählt werden. Dies geschieht in der '''/etc/network/interfaces''' (siehe Artikel [:interfaces#Treiber:interfaces]) mit der ``wpa-driver``-Option, welche vor der Zeile mit ``wpa-conf`` stehen sollte. Bei der Wahl des richtigen Treibers können die Artikel [:WLAN/Karten: Karten] und [:WLAN/Chipsätze:Chipsatztabelle] hilfreich sein. Eine vollständige Kofiguration kann z.B. wie folgt aussehen: {{{ auto wlan0 iface wlan0 inet dhcp wpa-driver wext wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf }}} Wird kein Treiber angegeben, wird automatisch der generische wext-Treiber genutzt. Dieser funktioniert bei vielen Karten sehr gut (und ist auch empfohlen). Bei neueren Versionen von ndiswrapper (> 1.16) und ipw __muss__ der wext-Treiber verwendet werden. ==Verbindung aufbauen== Danach muss das entsprechende Interface (hier wlan0 - durch das tatsächliche Interface ersetzen) neu gestartet werden. Dies kann durch einen Neustart des Rechners geschehen oder durch Eingabe folgender Befehle in einem Terminal [3]: {{{#!vorlage Befehl sudo ifdown wlan0 sudo ifup wlan0 }}} ==Verbindung automatisch aufbauen== Normalerweise sollte die Anweisung ``auto wlan0`` in der Datei '''/etc/network/interfaces''' bereits dafür sorgen, dass die Verbindung beim Systemstart automatisch hergestellt wird. Zumindest mit manchen Geräten scheint dies aber nicht zu funktionieren. In diesem Fall kann mit folgenden Schritten möglicherweise nachgeholfen werden: In der Datei '''/etc/rc.local''' als root [2] über die Zeile ``exit =0`` entsprechend dem Interface (hier wlan0 - durch das tatsächliche Interface ersetzen) {{{ ifdown wlan0 ifup wlan0 }}} einfügen und abspeichern. =Roaming= Eine automatische Umschaltung zwischen bekannten Netzwerken ist ebenfalls möglich. Zusätzliche Pakete müssen nicht installiert werden. '''wpasupplicant''' führt bei entsprechender Konfiguration die Skripte '''wpa_action''' und '''wpa_cli''' im Verzeichnis '''/sbin''' aus, und verbindet sich automatisch mit dem in Reichweite befindlichen Netzwerk. Gemischte Konfigurationen mit statischer IP-Adresse und automatischer Zuordnung über DHCP (engl. Dynamic Host Configuration Protocol) sind ebenfalls möglich. Damit '''wpa_supplicant''' die Mehrfachkonfiguration erkennt und die Umgebung nach bekannten Netzwerken absucht, sind besondere Einstellungen in der Datei '''/etc/network/interfaces''' vorzunehmen. Der Name des Netzwerks ist frei wählbar, deutsche Umlaute und Sonderzeichen sollten aber vermieden werden. Statische IP-Adressen sind den tatsächlichen Gegebenheiten anzupassen. Hier eine Beispielkonfiguration für Netzwerke mit statischer IP-Adresse, automatischer Zuordnung über DHCP, WPA- und WPA2 Verschlüsselung und offene Netzwerke: {{{ auto lo iface lo inet loopback iface eth1 inet dhcp iface eth2 inet dhcp iface ath0 inet dhcp # Schnittstelle prüfen pre-up ifconfig wlan0 up pre-up ifconfig wlan0 down # Mehrfachkonfiguration aktivieren iface wlan0 inet manual # Roaming aktivieren wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf # erstes bekanntes WLAN Name:zuhause mit DHCP iface zuhause inet dhcp # zweites bekanntes WLAN Name:uni mit statischer IP-Adresse iface uni inet static address 192.168.0.20 netmask 255.255.255.0 network 192.168.0.255 gateway 192.168.0.1 # verbindet sich mit allen unverschlüsselten Netzwerken über DHCP iface offen inet dhcp # Optional - Schnittstelle automatisch aktivieren auto wlan0 }}} Wird die Zeile ``auto wlan0`` weggelassen kann das WLAN zunächst mit Networkmanager verwendet werden. Zum aktivieren/deaktivieren werden dann folgende Befehle verwendet: {{{#!vorlage Befehl sudo ifup wlan0 # aktiviert die WLAN-Schnittstelle sudo ifdown wlan0 # deaktiviert die WLAN-Schnittstelle }}} Für jedes zu nutzende Funknetzwerk ist ein eigener Eintrag mit den Angaben von SSID, Verschlüsselungsart und Netzwerkschlüssel zu erstellen. Der Eintrag id_str="Name" muß mit den Einstellungen in der Datei '''interfaces''' übereinstimmen. Entsprechende Konfiguration der '''/etc/wpa_supplicant/wpa_supplicant.conf''': {{{ ctrl_interface=/var/run/wpa_supplicant eapol_version=1 ap_scan=1 # erstes bekanntes WLAN Name:zuhause mit WPA2-Verschlüsselung network={ ssid="WLAN-ID 1" id_str="zuhause" scan_ssid=1 proto=RSN key_mgmt=WPA-PSK pairwise=CCMP group=TKIP CCMP psk="WPA2 Netzwerkschlüssel" } # zweites bekanntes WLAN Name:uni mit WPA-Verschlüsselung network={ ssid="WLAN-ID 2" id_str="uni" scan_ssid=1 proto=WPA key_mgmt=WPA-PSK pairwise=TKIP group=TKIP psk="WPA Netzwerkschlüssel" } # unverschlüsselte Netzwerke network={ ssid="" id_str="offen" scan_ssid=1 key_mgmt=NONE } }}} Werden Einträge angepasst, um Fehler zu beheben oder um ein neues Netzwerk einzufügen, kann der Vorgang im laufenden Betrieb mit folgenden Befehlen[3] unterbrochen und mit den geänderten Werten neu gestartet werden: {{{#!vorlage Befehl sudo wpa_action wlan0 stop sudo wpa_action wlan0 reload sudo ifup wlan0 }}} {{{#!vorlage Experten Unter '''/usr/share/doc/wpasupplicant/README.modes''' findet man Informationen, wie die Einstellungen für die '''/etc/wpa_supplicant/wpa_supplicant.conf''' auch direkt in der '''/etc/network/interfaces''' eingetragen werden können. }}} = Links = * [https://w1.fi/wpa_supplicant/ Projektseite] {en} * [:WLAN:] {Übersicht} Übersichtsartikel # tag: System, Netzwerk, WLAN