Instalacja serwera autoryzacji
Ostatnia zmiana: 2015-07-16 07:52

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 freeradius2 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.

Instalacja



    # opkg update
    # opkg install freeradius2 freeradius2-mod-eap freeradius2-mod-eap-mschapv2 freeradius2-mod-eap-peap
    # opkg install freeradius2-mod-eap-tls freeradius2-mod-eap-ttls freeradius2-mod-files freeradius2-mod-mschap
    # opkg install freeradius2-mod-radutmp freeradius2-mod-realm freeradius2-mod-exec freeradius2-mod-pap freeradius2-mod-chap

Jeżeli nie zamierzamy generować własnych certyfikatów, można posłużyć się tymi zawartymi w pakiecie freeradiusa, czyli należy doinstalować jeszcze jeden pakiet:


    # opkg install freeradius2-democerts

Elementem przydatnym będzie zestaw narzędzi do testowania radiusa (można go w później odinstalować):


    # opkg install freeradius2-utils

Konfiguracja

Należy wykonać kilka zmian w plikach konfiguracyjnych.

/etc/freeradius2/radiusd.conf

Odszukujemy w nim wszystkie linie zawierające interface = br-lan. Należy je wykomentować lub usunąć jeżeli chcemy aby freeradius nasłuchiwał na wszystkich dostępnych interfejsach lub wskazujemy konkretny na którym będzie działał. Dla tego poradnika przyjmujemy że ma słuchać na wszystkich:


    # sed -i 's/interface = br-lan/#interface = br-lan/g' /etc/freeradius2/radiusd.conf

/etc/freeradius2/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/freeradius2/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/freeradius2/clients.conf

Użytkownicy (/etc/freeradius2/users)

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/freeradius2/users

W analogiczny sposób dodajemy kolejnych wymaganych użytkowników.

Testy

Uruchamiany freeradiusa w trybie diagnostycznym:


    # 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 freeradius2-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" | radclient -x 192.168.1.1 auth Edca3cdk45

Jako odpowiedź powinniśmy dostać coś w rodzaju:


    Sending Access-Request of id 41 to 192.168.1.1 port 1812
        User-Name = "malgosia"
        User-Password = "alamakota123"
    rad_recv: Access-Accept packet from host 192.168.1.1 port 1812, id=41, length=20

Jeżeli tak jest - możemy sobie pogratulować. Na konsoli gdzie uruchomiliśmy freeradiusa powinna pojawić się większa ilość informacji:


    rad_recv: Access-Request packet from host 192.168.1.1 port 38262, id=41, length=48
        User-Name = "malgosia"
        User-Password = "alamakota123"
    Fri Oct 4 12:29:08 2013 : Info: # Executing section authorize from file /etc/freeradius2/sites/default
    Fri Oct 4 12:29:08 2013 : Info: +- entering group authorize {...}
    Fri Oct 4 12:29:08 2013 : Info: [eap] No EAP-Message, not doing EAP
    Fri Oct 4 12:29:08 2013 : Info: ++[eap] returns noop
    Fri Oct 4 12:29:08 2013 : Info: [files] users: Matched entry malgosia at line 204
    Fri Oct 4 12:29:08 2013 : Info: ++[files] returns ok
    Fri Oct 4 12:29:08 2013 : Info: ++[pap] returns updated
    Fri Oct 4 12:29:08 2013 : Info: Found Auth-Type = PAP
    Fri Oct 4 12:29:08 2013 : Info: # Executing group from file /etc/freeradius2/sites/default
    Fri Oct 4 12:29:08 2013 : Info: +- entering group PAP {...}
    Fri Oct 4 12:29:08 2013 : Info: [pap] login attempt with password "alamakota123"
    Fri Oct 4 12:29:08 2013 : Info: [pap] Using clear text password "alamakota123"
    Fri Oct 4 12:29:08 2013 : Info: [pap] User authenticated successfully
    Fri Oct 4 12:29:08 2013 : Info: ++[pap] returns ok
    Fri Oct 4 12:29:08 2013 : Info: WARNING: Empty post-auth section. Using default return values.
    Sending Access-Accept of id 41 to 192.168.1.1 port 38262
    Fri Oct 4 12:29:08 2013 : Info: Finished request 0.
    Fri Oct 4 12:29:08 2013 : Debug: Going to the next request
    Fri Oct 4 12:29:08 2013 : Debug: Waking up in 4.9 seconds.
    Fri Oct 4 12:29:13 2013 : Info: Cleaning up request 0 ID 41 with timestamp +337
    Fri Oct 4 12:29:13 2013 : Info: Ready to process requests.

Na tej konsoli pojawi się też szereg komunikatów jeżeli będzie problem z procesem uwierzytelniania, hasłami użytkowników czy czymś innym. Należy dokładnie prześledzić komunikaty i poprawić ew. błędy konfiguracyjne.

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

Jeżeli posługujemy się inną adresacją sieci i innymi portami niż domyślnie (1812, 1813), należy odpowiednio zmienić to w pliku /etc/init.d/radiusd.

Podsumowanie

Oczywiście konfigurację można (i trzeba) dostosować do własnych potrzeb. Należy samodzielnie wygenerować i podmienić certyfikaty z pakietu freeradius2-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

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.

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.