====== Konfigurace programu WPA Supplicant pro připojení k eduroamu ======
[[http://w1.fi/wpa_supplicant/|WPA Supplicant]] je program, který se v Linuxu stará o podporu WPA zabezpečení Wi-Fi sítí. Pokud máte grafické rozhraní, pravděpodobně v něm máte i NetworkManager který konfiguruje ''wpa_supplicant'' z grafického prostředí.
===== Konfigurační soubor =====
Jednotlivé bezdrátové sítě se definují v konfiguračním souboru, obvykle ''/etc/wpa_supplicant/wpa_supplicant.conf''. Je jich možno definovat libovolně mnoho, program se připojí k té, která je dostupná a zároveň má největší prioritu. Základní definice sítě ''eduroam'' s nejběžnější konfigurací WPA2/PEAP/MSCHAPv2 vypadá takto:
network={
ssid="eduroam"
key_mgmt=WPA-EAP
eap=PEAP
phase2="auth=MSCHAPV2"
pairwise=CCMP
group=CCMP TKIP
ca_cert="/etc/ssl/example_CA.pem"
domain_match="radius.example.org"
identity="user@example.org"
password="CorrectHorseBatteryStaple"
}
==== Správné ověřování identity RADIUS serveru ====
**Správné nastavení ověřování identity RADIUS serveru**, se kterým váš suplikant komunikuje, je **nezbytné pro ochranu vašeho hesla** i pro ochranu před únosem Wi-Fi provozu. Věnujte mu proto náležitou pozornost! Další informace naleznete na stránce [[cs:uzivatel:sw:certifikaty]].
K ověření identity autentizačního serveru je nutný certifikát certifikační autority, která vydala certifikát RADIUS serveru vaší organizace. Program ''wpa_supplicant'' pracuje pouze s certifikáty formátu PEM. Ve výše uvedeném příkladu konfigurace jde o soubor ''/etc/ssl/example_CA.pem''. Pokud organizace používá certifikáty veřejných autorit, důvěryhodné v operačním systému, je možné nastavit důvěru také volbou ''ca_path'', směřující k adresáři obsahujícím veškeré důvěryhodné certifikáty (včetně symbolických odkazů vygenerovaných utilitou [[https://www.openssl.org/docs/man1.1.0/apps/c_rehash.html|c_rehash]]). Například takto:
ca_path="/etc/ssl/certs"
Abyste měli jistotu, že se připojujete, //a především že posíláte své heslo// pouze svému domácímu RADIUS serveru, je třeba nastavit také **kontrolu jména/jmen autentizačních serverů**. Bez této konfigurace **bude akceptován jakýkoli certifikát** vydaný důvěryhodnou autoritou, což zejména v případě veřejných autorit znamená miliony certifikátů.
Kontrolu je možné nastavit různými způsoby. Výše uvedený příklad předpokládá certifikát vystavený na jediné jméno ''radius.example.org''. Pokud organizace používá víc autentizačních serverů, kde se každý prokazuje certifikátem vystaveným na jiné jméno, ale sdílí společnou koncovku (například ''r1.radius.example.org'' a ''r2.radius.example.org'') je možné nastavit mírnější kontrolu na společnou koncovku, například:
domain_suffix_match="radius.example.org"
Třetí možností je vyjmenovat přímo kompletní jména autentizačních serverů volbou ''altsubject_match''. Tato volba je vhodná v případě, kdy autentizační servery nesdílí společnou koncovku. Tento způsob nasazení není doporučován pro nové instalace, ale na spoustě institucí přežívá z historických důvodů. Kontrolu pak lze nastavit takto: (**Pozor!** V řetězci se nesmí vyskytovat mezery!)
altsubject_match="DNS:radius1.example.org;DNS:radius2.example.org"
==== Ukládání hesla ve formě hashe ====
Standardně se heslo ukládá do konfiguračního souboru v otevřené podobě. Při použítí nejběžnějšího protokolu MSCHAPv2 to však není nutné, neboť k ověření hesla se použije pouze jeho NTLM hash. Hash ve formátu vhodném pro vložení do konfiguračního souboru je možné získat například tímto jednořádkovým skriptem:
$ python -c 'import getpass,hashlib; print("password=hash:"+hashlib.new("md4",getpass.getpass().encode("utf-16le")).hexdigest())'
Password: CorrectHorseBatteryStaple
password=hash:012c9edfb06b543233745c9aff836490
Uložení hashe **nepředstavuje žádnou ochranu před zneužitím hesla**. Útočník, který se zmocní hashe jej může přímo použít k přihlášení (technika [[https://en.wikipedia.org/wiki/Pass_the_hash|pass the hash]]). Jde tak spíše o ochranu před odcizením hesla letmým pohledem.
===== Konfigurace sítě se sdíleným klíčem =====
Do konfiguračního souboru také můžeme snadno uložit konfiguraci bezdrátových sítí zabezpečených jednoduchým sdíleným tajemstvím WPA. K vygenerování potřebného fragmentu konfigurace je možné využít utilitu ''wpa_passphrase'':
$ wpa_passphrase HomeNetwork
# reading passphrase from stdin
CorrectHorseBatteryStaple
network={
ssid="HomeNetwork"
#psk="CorrectHorseBatteryStaple"
psk=a14c6fb42d868ab1d1fb62373e6cc8d3bf0b3fa79e187d7226f1b22eaa784660
}
Poskytnuté heslo je rovnou převedeno do 256bitového sdíleného tajemství WPA, takže původní heslo může být z konfigurace odstraněno.
Do konfigurace WPA suplikanta **nepřidávejte sítě, které nepoužívají žádné šifrování!** Vystavili byste se tak riziku přesměrování na falešný přístupový bod a kompromitace Wi-Fi provozu. V případě, že nešifrovanou síť musíte pravidelně používat, definujte ji s volbou ''disabled=1'' a povolujte za běhu pouze podle potřeby.
===== Připojení =====
Vlastní spuštění WPA suplikanta je nejlepší přenechat spouštěcím skriptům daného operačního systému a tedy postupovat podle návodu konkrétní distribuce. Pro ruční vyzkoušení funkčnosti můžeme zkusit spustit suplikanta i ručně:
# wpa_supplicant -iwlan0 -c/etc/wpa_supplicant/wpa_supplicant.conf -d
Pokud autentizace proběhla úspěšně (poslední stav suplikanta je ''COMPLETED''), stačí na daném rozhraní spustit DHCP klienta, např. takto:
# dhcpcd wlan0
===== Ovládání za běhu =====
Součástí distribuce ''wpa_supplicant'' jsou i programy ''wpa_cli'' a ''wpa_gui'', poskytující řádkové, resp. grafické rozhraní k dálkovému ovládání běžícího suplikanta. Při správném nastavení oprávnění komunikačního soketu (vizte [[https://w1.fi/cgit/hostap/plain/wpa_supplicant/wpa_supplicant.conf|dokumentaci]]) je možné tyto utility používat i jako neprivilegovaný uživatel a snadno tak za chodu přepínat mezi Wi-Fi sítěmi. Je také možné za chodu přidávat nové sítě. Taková konfigurace se však po ukončení suplikanta ztratí, není-li nastavena volba ''update_config=1''. Neukládání konfigurace však může být výhodné pro dočasné připojení k nezabezpečeným sítím.
Utilita ''wpa_cli'' standardně vypisuje na obrazovku každý krok během připojování a dokáže tak posloužit při hledání problémů. Základními příkazy jsou:
* ''status'' – vypíše aktuální stav suplikanta
* ''scan'' – spustí skenování dostupných sítí v okolí (skenování je asynchronní)
* ''scan_results'' – vypíše výsledky posledního skenování
* ''list_networks'' – vypíše seznam konfigurovaných sítí
* ''select_network '' – vynutí připojení ke konkrétní síti
* ''roam '' – vynutí přechod na konkrétní přístupový bod s daným BSSID (MAC adresou)
======
--- //[[caletka@cesnet.cz|Ondřej Caletka]] 2017/03/17 22:32// přepracování a rozšíření návodu \\