WiFi s PSK a EAP v CentOS 6 – FreeRADIUS

V roce 2012 jsem ve skole (UHK) zpracoval vyberovy projekt, jehoz jedna cast se tykala vytvoreni WiFi AP na pocitaci s CentOS 6 se sdilenym heslem (WPA PSK) a 802.1x (WPA EAP) vcetne zakladni instalace a nastaveni FreeRADIUS serveru. Cely clanek je zpracovany jako skolni cviceni. Sice je uz 3 roky stary, ale vetsina veci jde stale pouzit. Bylo mi lito nechat text zapadnout, proto ho davam nyni na web.
Tady je ke stazeni 30 strankove PDF, je lepe citelne, nez clanek nize. Ten jsem vytvoril pouhym vlozenim celeho PDF do clanku na webu. Doporucuji tedy radeji stahnou ke cteni PDF.

 

Vytvoření WiFi přístupového bodu s PSK a s EAP, nastavení FreeRADIUS serveru

Teoretické znalosti

Bezdrátové sítě jsou dnes téměř všude. O to důležitější je zajistit jejich zabezpečení. Jsou dva základní typy, jak může být síť zabezpečená:

  • Sdílené heslo (WPA-PSK = WPA-Personal)

  • Samostatné ověření uživatele (WPA-EAP = WPA-Enterprise (využívá Extensible Authentication Protocol))

Nastavení sdíleného hesla (PSK) je velice jednoduché. Problém je, že všichni uživatelé budou mít stejné heslo. To se výborně hodí pro domácí použití, nebo firmy s několika málo zaměstnanci. Všude jinde toto řešení není možné – dřív nebo později heslo unikne. I dnes se najdou zařízení, která neumí nic jiného, než WPA-PSK. Příkladem může být čtečka elektronických knih Amazon Kindle 3 – WPA-EAP neumí.

Druhý způsob spočívá v ověření uživatel proti nějakému centrálnímu bodu, tím bývá nejčastěji RADIUS server. Zde máme prakticky neomezené možnosti v nastavování. Mezi základní typy ověření patří využití jména a hesla (každý uživatel své), nebo využití certifikátů pro každého uživatele.

Na rozdíl od koupených řešení, si můžeme v Linuxu vše přizpůsobit na míru požadavkům. Všechen potřebný software je navíc k dispozici zdarma.

Při nákupu WiFi karty je důležité vybírat karty s čipem Atheros – mají nejlepší podporu v Linuxu a ušetříme si spoustu možných potíží.

Použité šifrování je vždy nejlepší volit WPA2, není-li to kvůli staří hardware možné, tak za cenu nižší bezpečnosti WPA. Dnes už nikdy nepoužíváme WEP! Je totiž snadno prolomitelný během pár minut.

Interakci mezi klientem a serverem zpracovává program jménem wpa_supplicant. Ten je ve všech nových linuxových distribucích. Mac OS X a Windows mají své vlastní suplikanty.

 

Zadání cvičení

  1. Nastavte DHCP, rozsah přidělovaných adres bude 10.0.0.50 – 10.0.0.150/24

  2. Nastavte NAT

  3. Vytvořte WiFi přístupový bod se společným heslem PSK

  4. Vytvořte WiFi přístupový bod s WPA-EAP zabezpečením, nastavte FreeRADIUS

    1. Vytvořte nového uživatele, pro ověření použijte jméno a heslo

    2. Vytvořte nového uživatele, pro ověření použijte SSL certifikáty

  5. Zajistěte automatické spuštění všech potřebných služeb po startu po startu systému


 

Řešení

Zjištění dostupných WiFi karet

Nejdřív si zjistíme, jestli máme dostupnou nějakou WiFi kartu – iwconfig :


 

Můžeme se také příkazem lspci | grep „Network\|Ethernet“ podívat, jaký síťový hardware je v PC:


 

Nastavení IP adres

Síťové kartě připojené do Internetu (eth0) nastavíme IP adresu z DHCP a WiFi kartě (wlan0) nastavíme IP adresu staticky. Ty musí být uloženy v adresáři /etc/sysconfig/network-scripts/ a musí mít jméno ifcfg-JmenoSitoveKarty, tedy např. ifcfg-wan0 :


  • DEVICE – jméno fyzického zařízení

  • BOOTPROTOdhcp = získat nastavení z DHCP, none = ruční nastavení

  • IPADDR – IP adresa

  • PREFIX – místo prefixu je možné použít „NETMASK=255.255.255.0

  • ONBOOT – aktivovat zařízení při bootování

Na adrese https://www.centos.org/docs/2/rhl-rg-en-7.2/ch-networkscripts.html je k dispozici podrobný popis.

Zakážeme NetworkManager a povolíme network:

 

 

DHCP

Abychom nemuseli na všech klientských počítačích nastavovat IP adresy, nainstalujeme a nastavíme DHCP server. Výchozí dnsmasq vypneme a nainstalujeme a povolíme ISC DHCPD:

V souboru /etc/sysconfig/dhcpd nastavíme parametrem DHCPDARGS síťové rozhraní, na kterém bude DHCP server poslouchat:

Samotné nastavení je v souboru /etc/dhcp/dhcpd.conf :

 

V případě potřeby můžeme určitému počítači nastavit přidělení vždy stejné IP adresy (podle MAC adresy).

 

Firewall

Nastavíme jednoduchý firewall. Aby bylo možné použít počítač jako router, je nutné povolit předávání paketů. V souboru /etc/sysctl.conf změníme net.ipv4.ip_forward=0 na net.ipv4.ip_forward=1 . A znovu načteme nastavení příkazem sysctl -p .

Spouštění firewallu zajistíme init skriptem. Vytvoříme soubor /etc/rc.d/init.d/firewall s následujícím obsahem:

esac exit

A skript s firewallem uložíme do /usr/local/bin/firewall.sh :

 

Přidáme právo spuštění pro /usr/local/bin/firewall.sh a /etc/rc.d/init.d/firewall a zapneme init skript chkconfig firewall on:

 

 

 

hostapd

Abychom mohli vytvořit WiFi přístupový bod, budeme potřebovat program hostapd. Protože v CentOS hostapd není, budeme si muset stáhnout zdrojové kódy z oficiálních stránek http://hostap.epitest.fi/hostapd/ a zkompilovat je.

Nejdřív si nainstalujeme všechny potřebné balíčky, bez kterých se nám hostapd nepodaří zkompilovat:

poté přejdeme do adresáře /usr/local/src , stáhneme zdrojové kódy a rozbalíme je:

v rozbaleném adresáři přejdeme do adresáře hostapd a soubor defconfig zkopírujeme do .config :

Nyní povolíme mac802111 ovladač pro Atheros karty. V první části souboru .config najdeme řádek #CONFIG_DRIVER_NL80211=y a odkomentujeme ho:

to je vše a můžeme spustit kompilaci a instalaci:

Protože se nenainstaluje init skript, vytvoříme si vlastní. Do souboru /etc/rc.d/init.d/hostapd vložíme následující kód:

a nastavíme automatické spouštění:

Hostapd je nutné spouštět před startem DHCP serveru!

 

WiFi se společným heslem

Nastavení přístupového bodu se společným heslem (PSK) je velice jednoduché. Nastavení pro hostapd umístíme do souboru /etc/hostapd.conf :

Nejbezpečnější je nastavit pouze WPA22: wpa=2 a wpa_pairwise=CCMP, ale velmi stará WiFi zařízení se nebudou umět připojit.

Pro zajištění kompatibility (za cenu nižší bezpečnosti) lze nastavit wpa=3 a wpa_pairwise=TKIP CCMP.

Řádek wpa_psk si vygenerujeme programem wpa_passphrase :


Vygenerované PSK je závislé na SSID!

WiFi s 802.1X a FreeRADIUS

FreeRADIUS je dostupný ve zdrojích distribuce, takže stačí nainstalovat příslušné balíčky:

Veškeré nastavení FreeRADIUSu je umístěno v adresáři /etc/raddb/

Nejdřív je nutné nastavit soubor clients.conf. V něm nastavíme radius klienty, jako hostapd, nebo různé WiFi krabičky.

Sekce localhost bude sloužit pro připojení hostapd. Samozřejmě je vhodné zvolit lepší heslo.

Místo jednotlivých počítačů je také možné specifikovat celou síť.

Je více způsobů, jak lze mít uloženou databázi s uživateli. Nejjednodušší je použít soubor users :

Na konec přidáme záznam pro nového uživatele se jménem ahoj a heslem svete.

Nyní si spustíme FreeRADIUS v debug módu radiusd -X a provedeme test:

Aby hostapd využíval radius, musíme ho k tomu nastavit. Opět v souboru /etc/hostapd.conf :

 

Pro otestování spustíme radiusd a hostapd v debug módu:

radiusd -X a hostapd -dd /etc/hostpad.conf

Vidíme tak celý průběh připojování klienta a případnou chybu:


 

Nastavení certifikátů

Nejbezpečnější ověření uživatele je při použití certifikátů. Uživatel má certifikát certifikační autority a svůj vlastní certifikát s klíčem, ten je navíc chráněný heslem.

Abychom mohli vydávat uživatelům certifikáty, musíme si vytvořit certifikační autoritu. Použijeme tu před-připravenou v adresáři /etc/raddb/certs/

Ihned po instalaci nejdeme v tomto adresáři nějaké hotové certifikáty, ty jsou však vydané na fiktivní jméno. Proto si vytvoříme vlastní autoritu.

Nejdřív smažeme všechny staré, pro nás nepotřebné soubory:

Pak upravíme soubor ca.cnf – jde o nastavení, podle kterého bude OpenSSL generovat certifikáty:

Důležité je nastavit heslo a informace o autoritě (organizationName musí být stejné i u ostatních certifikátů!).

Podobně upravíme nastavení pro serverový certifikát:

A spustíme bootstrap skript, který vytvoří vše potřebné:

Aby FreeRADIUS mohl pracovat s certifikátem, musíme mu sdělit heslo. V souboru /etc/raddb/eap.conf upravíme v sekci tls položku private_key_password:

 

Cesty k certifikátům nemusíme měnit.

Na závěr vygenerujeme certifikáty pro klienty. Vrátíme se do adresáře /etc/raddb/certs a tentokrát upravíme soubor client.cnf:

zajímají nás pouze tučně zvýrazněné řádky. Vytvoříme klientovi certifikát:

tím vznikne soubor uzivatel.DVA@example.com.pem (podle hodnoty emailAddress), ten spolu se souborem ca.pem předáme uživateli.


 

Když budeme generovat certifikát pro dalšího uživatele, upravíme v souboru client.cnf tučně označené řádky a znovu spustíme # make client.pem.

Nakonec nastavíme práva pro certifikáty, aby se k nim radius dostal a můžeme se z klienta připojit:

 

Připojení z klientského počítače

Při použití společného hesla stačí na klientském počítači vybrat WiFi síť a při připojení zadat heslo.

Při použití radiusu je to složitější.

Připojení v Linuxu

V appletu Network Manageru vybereme síť a připojíme se.

Použijeme PEAP, nebo Tunneled TLS3: