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