Instalacja serwera autoryzacji
Ostatnia zmiana: 2019-07-28 10:13
RADIUS jest mechanizmem uwierzytelniania użytkowników w sieciach. Jego "wolna" implementacja, freeradius, dostępna jest także dla OpenWrt, a dzięki integracji z
hostapd możliwa jest autoryzacja zdalnych użytkowników bezprzewodowych, wymagając od nich dodatkowych parametrów. RADIUS w mniej lub bardziej skompilowanej konfiguracji używa się także do autoryzacji użytkowników w sieciach przewodowych oraz różnych procesach wymagających zbierania danych o użytkownikach. RADIUS używa koncepcji AAA (
authentication, authorization and accounting), dzięki czemu możliwe jest także gromadzenie informacji np. o ilości przesłanych danych przez użytkownika.
W tym poradniku jako RADIUSa wykorzystano pakiet
freeradius3 z danymi przechowywanymi w plikach tekstowych (nie bazie danych), choć oczywiście sam program ma takie możliwości. Autoryzacja klientów będzie z wykorzystaniem PEAP (
Protected EAP), czyli będzie wymagane podanie nazwy użytkownika i hasła. Freeradius oczywiście ma wiele innym metod uwierzytelniania, można wykorzystać certyfikaty itd, ale nie to jest tematem tego opracowania. Poradnik sprawdzono na OpenWrt 19.07.
Instalacja
# opkg update
# opkg install freeradius3 freeradius3-democerts freeradius3-mod-always freeradius3-mod-attr-filter freeradius3-mod-chap freeradius3-mod-detail
# opkg install freeradius3-mod-digest freeradius3-mod-eap-gtc freeradius3-mod-eap-leap freeradius3-mod-eap-md5 freeradius3-mod-eap-mschapv2
# opkg install freeradius3-mod-eap-peap freeradius3-mod-eap-tls freeradius3-mod-eap-ttls freeradius3-mod-eap freeradius3-mod-exec freeradius3-mod-expiration
# opkg install freeradius3-mod-expr freeradius3-mod-files freeradius3-mod-ldap freeradius3-mod-logintime freeradius3-mod-mschap freeradius3-mod-pap
# opkg install freeradius3-mod-passwd freeradius3-mod-preprocess freeradius3-mod-radutmp freeradius3-mod-realm freeradius3-mod-unix
Elementem przydatnym będzie zestaw narzędzi do testowania radiusa (można go w później odinstalować):
# opkg install freeradius3-utils
Konfiguracja
Należy wykonać kilka zmian w plikach konfiguracyjnych.
/etc/freeradius3/clients.conf
Zmieniamy adres z którego freeradius ma przyjmować żądania od klientów. W tym przykładzie: 192.168.1.1
# sed -i 's/ipaddr = 127.0.0.1/ipaddr = 192.168.1.1/g' /etc/freeradius3/clients.conf
Zmieniamy tzw. klucz wspólny, który domyślnie w pliku konfiguracyjnym podany jest jako
testing123. Klucz wybieramy jako dowolny ciąg znaków:
# sed -i 's/secret.*= testing123/secret = Edca3cdk45/g' /etc/freeradius3/clients.conf
Użytkownicy (/etc/freeradius3/mods-config/files/authorize)
Dodajemy nowego użytkownika. Składnia wyjaśniona jest w w/w pliku, dla przykładu zakładamy użytkownika
malgosia z hasłem
alamakota123
# echo 'malgosia Cleartext-Password := "alamakota123"' >> /etc/freeradius3/mods-config/files/authorize
W analogiczny sposób dodajemy kolejnych wymaganych użytkowników.
Testy
Uruchamiany freeradiusa w trybie diagnostycznym:
# /etc/init.d/radiusd stop
# LD_LIBRARY_PATH=/usr/lib/freeradius3:$LD_LIBRARY_PATH radiusd -XXX
Powinien uruchomić się, wyświetlić dużą ilość komunikatów i potwierdzić gotowość do działania linią:
Info: Ready to process requests.
Jeżeli wyświetlił jakikolwiek błąd - należy ponownie sprawdzić pliki konfiguracyjne. Demon będzie nasłuchiwał i wyświetlał komunikaty na konsoli, więc należy zalogować się na kolejnym terminalu (utworzyć kolejną sesję).
Do testów przyda się wspomniany pakiet
freeradius3-utils, ponieważ dostarcza on narzędzie
radclient. Nie czekając dłużej wykonujemy test autoryzacji dla naszego użytkownika:
# echo "User-Name = malgosia, User-Password = alamakota123" | LD_LIBRARY_PATH=/usr/lib/freeradius3:$LD_LIBRARY_PATH radclient -x 192.168.1.1 auth Edca3cdk45
Jako odpowiedź powinniśmy dostać coś w rodzaju:
Sent Access-Request Id 151 from 0.0.0.0:35006 to 192.168.1.1:1812 length 49
User-Name = "malgosia"
User-Password = "alamakota123"
Cleartext-Password = "alamakota123"
Received Access-Accept Id 151 from 192.168.1.1:1812 to 192.168.1.1:35006 length 20
Jeżeli tak jest - możemy sobie pogratulować.
Uruchomienie
Po przetestowaniu działania, jeżeli nie została zmieniona adresacja i nazwy interfejsów, to wystarczy standardowe uruchomienie procesu:
# /etc/init.d/radiusd enable
# /etc/init.d/radiusd start
Podsumowanie
Oczywiście konfigurację można (i trzeba) dostosować do własnych potrzeb. Należy samodzielnie wygenerować i podmienić certyfikaty z pakietu
freeradius3-democerts. Dobrze jest też "uszczelnić" definicję interfejsów na których freeradius nasłuchuje i oczekuje na żądania od klientów.
Konfiguracja AP
Freeradius sam w sobie jest tylko uruchomionym procesem; dobrze jest więc z niego skorzystać do praktycznych celów. OpenWrt daje możliwość autoryzacji użytkowników bezprzewodowych z wykorzystaniem tzw. trybu "WPA2 Enterprise", który właśnie korzysta z RADIUSa w tym celu. Prezentowana poniżej konfiguracja to punkt dostępowy z autoryzacją użytkowników przez radiusa.
W OpenWrt często wykorzystuje się pakiet
wpad-mini, który nie zawiera opcji związanych uwierzytelnianiem EAP. Należy więc go odinstalować i zainstalować pełną wersję tego programu:
# opkg remove wpad-mini
# opkg install wpad
W OpenWrt występuje kilka różnych odmian pakietu
wpad, niektóre z nich mogą posiadać obsługę EAP.
Konfiguracja AP nie odbiega zbytnio od normalniej konfiguracji - w opcji
encryption podajemy tym razem "wpa2" (czyli wspomniany WPA2 Enterprise) zamiast "psk2" (WPA2 Personal z autoryzacją przez hasło):
# uci set wireless.radio0.disabled=0
# uci set wireless.@wifi-iface[0].network=lan
# uci set wireless.@wifi-iface[0].mode=ap
# uci set wireless.@wifi-iface[0].ssid=OpenWrt
# uci set wireless.@wifi-iface[0].encryption=wpa2
# uci set wireless.@wifi-iface[0].auth_server=192.168.1.1
# uci set wireless.@wifi-iface[0].auth_port=1812
# uci set wireless.@wifi-iface[0].auth_secret=Edca3cdk45
# uci commit
# wifi
Gdzie:
- encryption - wpa2 (WPA2 Enterprise/CCMP)
- auth_server - adres IP serwera RADIUS
- auth_port - port nasłuchu serwera RADIUS
- auth_secret - hasło współdzielone, ustawione wcześniej w konfiguracji radiusa
Parametry te oczywiście należy dostosować do tych wprowadzonych wcześniej w konfiguracji.
W OpenWrt 19.07 należy jeszcze dodatkowo zrobić
# sed -i 's/append bss_conf "multi_ap=$multi_ap" "$N"/#/' /lib/netifd/hostapd.sh
Przy próbie połączenia, sieć bezprzewodowa będzie widoczna jako "Zabezpieczona przy pomocy protokołu 802.1x" czy "802.1x EAP". Przy próbie połączenia do takiego AP będziemy zmuszeni podać nazwę użytkownika i hasło (często określane jako "tożsamość") oraz wybrać metodę EAP - tu może zostać domyślna lub należy jawnie wybrać "PEAP". Dodatkowe pola takie jak certyfikat, tożsamość anonimowa, druga faza autoryzacji może zostać pusta, jeżeli wykonaliśmy konfigurację zgodną z wyżej przedstawionym poradnikiem.