Det här sätter du upp
En RADIUS-server kontrollerar inloggningar åt andra enheter. Åtkomstpunkter för wifi använder den för WPA2 och WPA3 Enterprise, där alla har eget användarnamn och lösenord i stället för ett gemensamt wifi-lösenord. Många VPN-servrar, brandväggar och switchar kan också använda den. När någon slutar tar du bort deras rad, och inloggningen slutar fungera överallt.
FreeRADIUS är den mest använda RADIUS-servern med öppen källkod. Här körs den som en container, under en egen användare som heter radius, med certifikat som du skapar själv, så att enheterna kan kontrollera att de pratar med din server innan de skickar ett lösenord.
Varje steg nedan har körts på en server hos Melonslab med Debian 13:
- En Linux-klient på en annan adress loggade in med PEAP och MSCHAPv2, den metod som wifi använder. Inloggningen gjordes med
eapol_test, testverktyget från wpa_supplicant, som är wifi-klienten i Linux och Android. Den kontrollerade serverns certifikat mot vår egen CA och vägrade logga in när den fick en annan CA. - Inloggningar med lösenord godkändes, ett felaktigt lösenord nekades, och en felaktig delad hemlighet eller en adress som inte stod på listan fick inget svar.
- Uppgifterna klienten skickade när den anslöt sparades, i en fil för varje enhet.
- Ett förnyat servercertifikat fungerade utan någon ändring på klienten, och allt startade igen av sig självt efter en omstart av servern.
FreeRADIUS använde omkring 45 MB minne. Stegen för telefoner, datorer och åtkomstpunkter följer tillverkarnas egen dokumentation.
Innan du börjar
Du behöver:
- en server uppsatt som i Podman-guiden, med ufw från säkerhetsguiden. FreeRADIUS behöver inte Caddy;
- den publika IP-adressen för varje enhet som ska skicka inloggningar till servern, till exempel kontorets adress för dess åtkomstpunkter. Enheter bakom samma router skickar alla från routerns adress.
Exemplen använder 203.0.113.10 för din server, 198.51.100.20 för ditt kontor och radius.example.com som serverns namn i dess certifikat. Namnet behöver ingen DNS-post. Byt ut dem genomgående.
RADIUS gjordes för lokala nätverk. Med wifi-metoden i den här guiden går lösenordet i en krypterad anslutning hela vägen från enheten till servern, men andra uppgifter, som användarnamnet, skyddas bara av den delade hemligheten. Därför släpper den här guiden bara fram kontorets adress till servern och använder en lång slumpmässig hemlighet. Vill du ha mer skydd, eller ändras kontorets adress, ansluter du kontoret till servern med WireGuard och skickar RADIUS genom tunneln.
1. Släpp fram dina enheter
Som root släpper du bara fram kontorets adress till de två RADIUS-portarna, 1812 för inloggningar och 1813 för loggning av anslutningar:
ufw allow from 198.51.100.20 to any port 1812:1813 proto udp
Lägg till samma regel för varje adress som inloggningarna kommer från.
2. Skapa användaren
useradd -m -s /bin/bash radius
loginctl enable-linger radius
machinectl shell radius@
Allt från och med nu körs som radius.
3. Kopiera ut inställningarna ur avbilden
FreeRADIUS har sina inställningar i sin avbild. Kopiera ut de två delarna du ändrar, certifikatmallarna och inställningarna för EAP, de metoder som wifi använder:
mkdir -p ~/radius ~/.config/containers/systemd
cd ~/radius
podman create --name radius-tmp docker.io/freeradius/freeradius-server:latest-3.2
podman cp radius-tmp:/etc/freeradius/certs ./certs
podman cp radius-tmp:/etc/freeradius/mods-available/eap ./eap
podman rm radius-tmp
4. Skapa egna certifikat
Avbilden levereras med testcertifikat, som är desamma för alla som laddar ner den och gäller i 60 dagar. Skapa egna: en CA (certifikatutfärdare), som enheterna litar på, och ett servercertifikat som CA:n signerar. Sätt ett slumpmässigt lösenord för deras nycklar, en giltighetstid på tio år för CA:n och 825 dagar för servercertifikatet, Apples gräns för servercertifikat, och dina namn:
KEYPW=$(openssl rand -hex 16)
sed -i "s/= whatever/= $KEYPW/" certs/ca.cnf certs/server.cnf eap
sed -i 's/^default_days.*/default_days = 3650/; s/"Example Certificate Authority"/"example.com RADIUS CA"/' certs/ca.cnf
sed -i 's/^default_days.*/default_days = 825/; s/"Example Server Certificate"/"radius.example.com"/' certs/server.cnf
Ta sedan bort testcertifikaten, skapa dina egna med verktygen i avbilden och låt FreeRADIUS läsa dem:
podman run --rm -v ./certs:/etc/freeradius/certs --entrypoint sh docker.io/freeradius/freeradius-server:latest-3.2 -c 'cd /etc/freeradius/certs && make destroycerts && ./bootstrap'
podman unshare chgrp -R 101 certs
chmod -R g+rX certs
openssl x509 -in certs/server.crt -noout -subject -enddate
Det sista kommandot visar CN=radius.example.com och datumet då certifikatet går ut. De andra fälten, som O=Example Inc., syns bara i certifikatets detaljer. FreeRADIUS körs som användare 101 i sin container, och chgrp ger den användarens grupp tillgång till nycklarna.
5. Lägg till dina enheter och användare
Skapa en delad hemlighet för kontoret, och en till för att testa från själva servern, genom att köra det här två gånger:
openssl rand -hex 16
Skapa ~/radius/clients.conf, med den första hemligheten i stället för SHARED_SECRET och den andra i stället för LOCAL_SECRET:
# The devices that may ask this server to check logins: one block each.
client office {
ipaddr = 198.51.100.20
secret = SHARED_SECRET
}
# For testing from the server itself
client localhost {
ipaddr = 127.0.0.1
secret = LOCAL_SECRET
}
Skapa ~/radius/users, med en rad för varje person:
# One line per user.
anna Cleartext-Password := "PASSWORD"
Hemkatalogen för radius kan bara läsas av den användaren och root, så lösenorden förblir privata.
6. Definiera containern
Skapa ~/.config/containers/systemd/radius.container:
[Unit]
Description=FreeRADIUS
[Container]
ContainerName=radius
Image=docker.io/freeradius/freeradius-server:latest-3.2
Volume=%h/radius/clients.conf:/etc/freeradius/clients.conf:ro
Volume=%h/radius/users:/etc/freeradius/mods-config/files/authorize:ro
Volume=%h/radius/eap:/etc/freeradius/mods-available/eap:ro
Volume=%h/radius/certs:/etc/freeradius/certs:ro
Volume=radius-log:/var/log/freeradius
PublishPort=1812:1812/udp
PublishPort=1813:1813/udp
Exec=-l stdout
AutoUpdate=registry
[Service]
Restart=always
[Install]
WantedBy=default.target
Dina filer ersätter dem i avbilden, och volymen radius-log sparar loggen över anslutningar. -l stdout skickar FreeRADIUS logg till podman logs. Starta den:
systemctl --user daemon-reload
systemctl --user start radius
podman logs radius
Loggen slutar med Ready to process requests.
7. Testa den
Logga in som anna inifrån containern, först med lösenordet i klartext och sedan med MSCHAPv2, som wifi använder inuti sin krypterade anslutning:
podman exec radius radtest anna PASSWORD 127.0.0.1 0 LOCAL_SECRET
podman exec radius radtest -t mschap anna PASSWORD 127.0.0.1 0 LOCAL_SECRET
Båda svarar Received Access-Accept. Med fel lösenord blir svaret Access-Reject.
För att lägga till en användare, eller byta ett lösenord, redigerar du ~/radius/users och kör systemctl --user restart radius. Detsamma gäller clients.conf.
8. Anslut wifi
Välj WPA2-Enterprise eller WPA3-Enterprise som säkerhet för nätverket i din åtkomstpunkt eller router. Vissa kallar det 802.1X. Ange sedan:
- RADIUS-server:
203.0.113.10, port1812; - Delad hemlighet: kontorets hemlighet från steg 5;
- Accounting-server, om det finns en: samma adress, port
1813och samma hemlighet.
Med accounting rapporterar åtkomstpunkten när varje person ansluter och kopplar ner. FreeRADIUS sparar rapporterna i en katalog för varje enhet, som podman exec radius ls /var/log/freeradius/radacct visar.
Vissa enheter behöver din CA för att kontrollera att de pratar med din server. Skriv ut den:
cat ~/radius/certs/ca.pem
Kopiera allt, från -----BEGIN CERTIFICATE----- till -----END CERTIFICATE-----, till en fil som heter radius-ca.crt, och för över den till enheterna som frågar efter den. Välj nätverket på varje enhet och logga in med användarnamnet och lösenordet från steg 5:
- Android: installera
radius-ca.crtsom ett wifi-certifikat under Installera ett certifikat i säkerhetsinställningarna. Var det finns skiljer sig mellan telefoner. När du ansluter väljer du PEAP som EAP-metod, MSCHAPV2 som Fas 2-autentisering, certifikatet som CA-certifikat ochradius.example.comsom Domän. - iPhone, iPad och Mac: efter användarnamnet och lösenordet visar enheten serverns certifikat. Kontrollera att det står
radius.example.comoch välj Lita på. - Windows: Windows frågar om du vill fortsätta ansluta. Välj Visa certifikatinformation, kontrollera att det står
radius.example.comoch välj Anslut. - Linux: välj Protected EAP (PEAP) i nätverksinställningarna, filen som CA-certifikat och MSCHAPv2 som Inre autentisering.
En enhet som inte får CA:n ber dig antingen att lita på certifikatet, som Apples enheter och Windows gör, eller vägrar ansluta, som Android gör. Stäng aldrig av certifikatkontrollen på en enhet: då kan vem som helst utge sig för att vara ditt nätverk och samla in lösenord.
9. Håll den uppdaterad
Slå på Podmans dagliga uppdateringar:
systemctl --user enable --now podman-auto-update.timer
Med taggen latest-3.2 får du varje ny version av FreeRADIUS 3.2. podman auto-update --dry-run visar om en uppdatering väntar.
10. Förnya servercertifikatet
Servercertifikatet från steg 4 går ut efter 825 dagar, och openssl x509 -in ~/radius/certs/server.crt -noout -enddate visar när. Skapa ett nytt med samma CA innan dess, så att inget ändras på dina enheter:
cd ~/radius
podman run --rm -v ./certs:/etc/freeradius/certs --entrypoint sh docker.io/freeradius/freeradius-server:latest-3.2 -c 'cd /etc/freeradius/certs && echo "unique_subject = no" > index.txt.attr && rm -f server.crt server.csr server.key server.p12 server.pem && make server'
podman unshare chgrp -R 101 certs
chmod -R g+rX certs
systemctl --user restart radius
Början av kommandot låter CA:n signera ett andra certifikat med samma namn. CA:n själv håller i tio år.
11. Säkerhetskopiera
Som radius:
mkdir -p ~/backup
tar -czf ~/backup/radius.tar.gz radius
Det sparar användarna, enheterna och deras hemligheter, och certifikaten, med CA:ns nyckel. Kopiera ~/backup till en annan maskin och förvara den säkert: med CA:ns nyckel kan vem som helst skapa ett certifikat som dina enheter litar på.
Felsökning
En enhet får inget svar, och loggen visar from unknown client med en adress. Enheten skickar från den adressen, inte den i clients.conf. Ange den adressen i enhetens client-block och i ufw-regeln från steg 1.
Loggen visar Shared secret is incorrect. Hemligheten i enheten skiljer sig från den i clients.conf.
En enhet får inget svar, och loggen visar ingenting. Kontrollera ufw-regeln från steg 1. Stämmer den kan enheten vara för gammal för att skicka Message-Authenticator, som den här versionen av FreeRADIUS kräver som skydd mot Blast-RADIUS-attacken som publicerades 2024. Uppdatera dess firmware. Om det inte finns någon uppdatering och enheten inte används för wifi-inloggningar kan du lägga till require_message_authenticator = no i dess client-block, men tänk på att det försvagar skyddet för just den enheten.
Containern stannar med Permission denied för ett certifikat. Kör raderna chgrp och chmod från steg 4 igen.
En telefon vägrar ansluta. Kontrollera att den har radius-ca.crt som CA-certifikat och radius.example.com, namnet i servercertifikatet, som domän.