Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
Obě strany předchozí revize Předchozí verze Následující verze | Předchozí verze | ||
cs:uzivatel:sw:nix:wpa_supplicant [2017/03/10 14:18] jan.tomasek@cesnet.cz |
cs:uzivatel:sw:nix:wpa_supplicant [2018/10/04 10:55] (aktuální) caletka@cesnet.cz note -> wrap |
||
---|---|---|---|
Řádek 1: | Řádek 1: | ||
- | ====== Konfigurace WPA Supplicantu pro připojení k eduroamu ====== | + | ====== Konfigurace programu WPA Supplicant pro připojení k eduroamu ====== |
- | [[http://hostap.epitest.fi/wpa_supplicant/|WPA Supplicant]] je program, který se v linuxu stará o podporu WPA zabezpečení wi-fi sítí. Je standardní součástí distribucí, které podporují WPA šifrování, a tak je zahrnut i ve standardních spouštěcích skriptech wi-fi rozhraní. Pokud máte grafické rozhraní, pravděpodobně v něm máte i NetworkManager který se postará o konfiguraci wpa_supplikanta z grafického prostředí. | + | [[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 ===== | ===== Konfigurační soubor ===== | ||
- | Jednotlivé bedrátové sítě, ke kterým se chceme připojit, se definují v konfiguračním souboru ''/etc/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. Následující příklad ukazuje připojení k síti //eduroam// 802.1x s následným fallbackem lokální síť organizace bez hesla. | + | 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: |
<code> | <code> | ||
network={ | network={ | ||
- | priority=5 | + | ssid="eduroam" |
- | ssid="eduroam" | + | key_mgmt=WPA-EAP |
- | scan_ssid=1 | + | eap=PEAP |
- | key_mgmt=WPA-EAP | + | phase2="auth=MSCHAPV2" |
- | pairwise=CCMP | + | pairwise=CCMP |
- | eap=PEAP | + | group=CCMP TKIP |
- | identity="eduroam_jmeno@realm" | + | ca_cert="/etc/ssl/example_CA.pem" |
- | password="eduroam_heslo" | + | domain_match="radius.example.org" |
- | ca_cert="/etc/ssl/certs/CERTIFIKAT_CA.pem" | + | identity="user@example.org" |
- | altsubject_match="DNS:radius1.organizace.cz;DNS:radius2.organizace.cz" | + | password="CorrectHorseBatteryStaple" |
- | phase1="peaplabel=0" | + | |
- | phase2="auth=MSCHAPV2" | + | |
} | } | ||
+ | </code> | ||
+ | |||
+ | ==== Správné ověřování identity RADIUS serveru ==== | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | **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]]. | ||
+ | </WRAP> | ||
+ | |||
+ | |||
+ | 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: | ||
+ | |||
+ | <code> | ||
+ | ca_path="/etc/ssl/certs" | ||
+ | </code> | ||
+ | |||
+ | 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: | ||
+ | |||
+ | <code> | ||
+ | domain_suffix_match="radius.example.org" | ||
+ | </code> | ||
+ | |||
+ | 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!) | ||
+ | |||
+ | <code> | ||
+ | altsubject_match="DNS:radius1.example.org;DNS:radius2.example.org" | ||
+ | </code> | ||
+ | |||
+ | ==== 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: | ||
+ | |||
+ | <code> | ||
+ | $ python -c 'import getpass,hashlib; print("password=hash:"+hashlib.new("md4",getpass.getpass().encode("utf-16le")).hexdigest())' | ||
+ | Password: CorrectHorseBatteryStaple | ||
+ | password=hash:012c9edfb06b543233745c9aff836490 | ||
+ | </code> | ||
+ | |||
+ | <WRAP center round tip 60%> | ||
+ | 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. | ||
+ | </WRAP> | ||
+ | |||
+ | |||
+ | ===== 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'': | ||
+ | |||
+ | <code> | ||
+ | $ wpa_passphrase HomeNetwork | ||
+ | # reading passphrase from stdin | ||
+ | CorrectHorseBatteryStaple | ||
network={ | network={ | ||
- | ssid="organizace" | + | ssid="HomeNetwork" |
- | key_mgmt=NONE | + | #psk="CorrectHorseBatteryStaple" |
- | priority=4 | + | psk=a14c6fb42d868ab1d1fb62373e6cc8d3bf0b3fa79e187d7226f1b22eaa784660 |
} | } | ||
</code> | </code> | ||
- | K úspěšnému připojení k 802.1x síti //eduroam// 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. | + | 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. |
+ | |||
+ | <WRAP center round important 60%> | ||
+ | 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. | ||
+ | </WRAP> | ||
- | Abyste měli jistotu, že se připojujete, a především že posíláte své heslo vašemu domácímu RADIUS serveru, musíte uvést direktivu ''altsubject_match'' (**Pozor!** V řetězci se nesmí vyskytovat mezery). **Správné nastavení ověřování identity RADIUS serveru**, se kterým váš suplikant komunikuje, je **nezbytné pro ochranu vašeho hesla**. Věnujte tomu proto náležitou pozornost! Další informace nalezne na stránce "[[cs:uzivatel:sw:certifikaty]]". | ||
- | Provozuje-li vaše organizace víc než jeden RADIUS server, je pro správnou funkci nutné používat wpa_supplikant verze minimálně 0.5.6! Předchozí verze nezvládají ověřit více než jeden RADIUS server. wpa_supplikant musí být přeložen s OpenSSL nikoliv GNU TLS. | ||
===== Připojení ===== | ===== Připojení ===== | ||
- | Po uložení konfiguračního souboru můžeme zkusit připojení přes rozhraní wlan0 s generickým ovladačem příkazem | + | 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ě: |
<code> | <code> | ||
- | # wpa_supplicant -iwlan0 -c/etc/wpa_supplicant.conf -d | + | # wpa_supplicant -iwlan0 -c/etc/wpa_supplicant/wpa_supplicant.conf -d |
</code> | </code> | ||
- | Pokud autentifikace proběhla úspěšně, zbývá rozhraní přiřadit IP adresu pomocí DHCP klienta, např. takto: | + | Pokud autentizace proběhla úspěšně (poslední stav suplikanta je ''COMPLETED''), stačí na daném rozhraní spustit DHCP klienta, např. takto: |
<code> | <code> | ||
Řádek 49: | Řádek 101: | ||
</code> | </code> | ||
- | To je ovšem zapotřebí pouze pokud vaše distribuce nepodporuje wpa_supplicant ve svých spouštěcích skriptech. V opačném případě obvykle stačí upravit konfigurační soubor a spustit bezdrátovou síť spouštěcím skriptem distribuce. Průběh asociace je možné sledovat na příkazovém řádku programem wpa_cli, nebo v grafickém režimu pomocí programu //wpa_gui//. | + | ===== 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 <id sítě|any>'' – vynutí připojení ke konkrétní síti | ||
+ | * ''roam <bssid>'' – 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 \\ | ||