cs:uzivatel:sw:nix:wpa_supplicant

Konfigurace programu WPA Supplicant pro připojení k eduroamu

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 Práce s certifikáty v eduroamu.

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 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 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 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)

Ondřej Caletka 2017/03/17 22:32 přepracování a rozšíření návodu

Poslední úprava:: 2018/10/04 10:55