Portál AbcLinuxu, 30. dubna 2025 10:28
V tomto zápisu popíšu jak zprovoznit unikátní Pre-Shared Key spojený s MAC adresou zařízení na access pointech Unifi od Ubiquiti.
Edit po prvních příspěvcích v diskusi: ano jsem si vědoma, že ověřování čistě na základě MAC adresy je vcelku na nic, o tom také blogpost není. Ano, jsem si vědoma, že u PSK je možno podvrhnout AP. Ano, skutečně doma používám klasické WPA2-Enterprise s ověřováním přes EAP-PEAP nebo EAP-TLS, je to dobré pro orientaci v technologiích a případné testování nastavení FreeRADIUSe.
Ale o tom tento zápis není. Je proto zbytečně se mě snažit v diskusi přesvědčovat o výše uvedeném, dobýváte se do otevřených dveří. Berte to tak, že pokud nemáte Unifi či se ho nechystáte pořídit, není tento zápis pro vás. Předpokládám, že sem stále ještě chodí i lidé, kteří dělají síťovou infrastrukturu a s těmito technologiemi do styku přijdou, pro ně to může být užitečné. Konec editu
Dlouhou dobu jsme ve firmě všude používali Mikrotiky jako univerzální švýcarský nožík pro routing i wifi. Bohužel s postupujícím časem se kvalita bezdrátových částí Mikrotiků postupně zhoršovala, stabilita snižovala, navíc obecně docházelo k technickému zastarávání. Protože se nám nechtělo čekat na wifiwave2/Wifi (které mě v současné době, kdy už je k dispozici pro více zařízení, stejně výkonnostně nijak nenadchlo), nakonec jsme dospěli k rozdělení: na routování Mikrotiky, pro bezdráty Ubiquiti.
Do firem zákazníků s tím nebyl problém, pro interní síť se použilo WPA2-Enterprise, pro hosty jeden sdílený klíč nebo hotspot. Nyní jsem se ovšem rozhodla k přechodu i u sebe doma a narazila na potíž. Notebooky i mobily si s WPA-Enterprise poradí snadno, bez problémů jim lze z RADIUSu přidělovat i VLAN ID, ale můj PocketBook konfiguraci s tunelovaným EAP-PEAP prostě nedává. Stejně jako různá IoT zařízení. Řešením je předsdílený klíč (PSK), ovšem ten pro změnu nechci trvale nechávat každému návštěvníkovi, který se mi mihne v domácnosti a bude se chtít připojit na wifi.
Mikrotiky v tomto směru nabízely snadné řešení: pomocí Access Listu se ve Winboxu nebo z promptu nechal každému zařízení přidělit vlastní PSK vázaný na MAC adresu, takže bylo bez problémů možné používat krátkodobé unikátní PSK pro konkrétního uživatele. V nastavení Unifi Network Serveru (UNS) jsem ovšem po podobné funkcionalitě koukala marně.
I nažhavila jsem strýčka Googla a začala pátrat. A vypátrala tuto stránku. která ukazuje, jak dynamické PSK zprovoznit. No a poté, co jsem to celé rozchodila, jsem se rozhodla jednak přepsat celý postup pro případ, že by odkazovaná “kuchařka” zmizela, jednak doplnit některé další postřehy.
V první řadě je potřeba mít rozběhaný RADIUS a na něm nastavené ověřování pomocí MAC adresy. Osobně používám FreeRADIUS, jeho konfigurace ovšem jde nad rámec tohoto blogpostu, takže jen odkážu na oficiální návod s popisem nastavení.
Na UNS si pak nastavte připojení k RADIUS serveru stejným způsobem, jako u WPA-Enterprise. Vytvořte nové SSID s ověřováním přes WPA2 (WPA3 jsem nezkoušela, nejspíš fugnuje také), povolte u něj volbu RADIUS MAC Authentication, vyberte profil RADIUS serveru a volbu MAC Address Format nastavte na aa-bb-cc-dd-ee-ff.
Vyzkoušejte si, že vám ověřování podle MAC adresy skutečně funguje.
Pokud vše pracuje jak má, změňte PSK na nějaký náhodný, dostatečně dlouhý. Máte k tomu poslední příležitost, po dalších krocích již nepůjde z webového rozhraní přenastavit, přičemž dříve nastavený PSK nadále zůstane funkční. Je proto vhodné ho mít co nejdelší a co nejnáhodnější. Tip pro Linux:
cat /dev/urandom | tr -dc A-Za-z0-9 | head -c${1:-63};echo;
Zazálohujte si pro jistotu aktuální konfiguraci, přihlašte se na terminál UNS a připojte se na MongoDB.
# mongo --port 27117
Nyní je potřeba nastavit pro dané SSID atribut attr_hidden_id na hodnotu UidIot, atribut wpa_psk_radius na required a pokud pomocí RADIUSu nastavujete VLAN ID, přepnout atribut vlan_wlan_mode též na hodnotu required (což je můj setup, bez toho jsem to nezkoušela).
use ace db.wlanconf.update( {name: "TvojeSSID"}, { $set: { "attr_hidden_id": "UidIot", "vlan_wlan_mode": "required", "wpa_psk_radius": "required" } } )
Řetězec TvojeSSID samozřejmě nahraďte svým SSID, pro které unikátní PSK nastavujete, a pokud nepoužíváte RADIUS pro nastavení VLAN, odmažte z příkazu řádek “vlan_wlan_mode”: “required”.
V USN obnovte stránku s konfigurací SSID. Položka Password by nyní měla mít u sebe zaškrtnutý neaktivní škrtbox s popiskem Auto a položka RADIUS MAC Authentication by neměla být dostupná. Pokud vidíte něco jiného, je to chyba a nejprve ji odstraňte.
Nyní je potřeba uploadovat konfiguraci do AP. Jednoduchý restart AP nepomůže, já nakonec šla cestou nejmenšího odporu a jednoduše přepla tam a zase zpátky hodnotu Wifi Band v nastavení SSID. AP se restartoval a zaktualizoval si konfiguraci z UNS.
Doplněno: v legacy UI je možné vnutit konfiguraci jednomu konkrétnímu AP přes Devices -> vybrat AP -> vpravo pod Manage volbou "Force provision".
Na FreeRADIUSu nyní do souboru authorized_macs (pokud jste použili výše odkazovaný návod, v případě jiných konfigurací to může být jinde) ke každé MAC adrese doplňte nastavení atributu Tunnel-Password. Pokud nastavujete i VLANu, doplňte i atributy s ní související.
aa:bb:cc:dd:ee:ff Cleartext-Password := "aa:bb:cc:dd:ee:ff" Tunnel-Type = 13, Tunnel-Medium-Type = 6, Tunnel-Private-Group-Id = 1234, Tunnel-Password = NejakyPSKProDaneZarizeni
(pokud VLAN nenastavujete, můžete atributy Tunnel-Type, Tunnel-Medium-Type a Tunnel-Private-Group-Id vynechat)
Restartujte FreeRADIUS a vyzkoušejte svoje zařízení, jestli se připojí.
Osobně nechápu, proč není tato možnost k dispozici přímo ve WebUI UNS a je nutné ručně upravovat nastavení v databázi. UNS tuto konfiguraci očividně interně zná a počítá s ní, stejně tak aktuální firmware APček. V každém případě je dobře, že už lze kýženého výsledku dosáhnout alespoň ručním zásahem do MongoDB; dříve se musel upravovat konfigurák Hostapd přímo v APčku a změny pak nepřežily restart AP. Což nebylo v ostrém provozu příliš použitelné.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.