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.