Radius
Toores. Ehk seda pala võib täiendada.
Radius on klient-server protokoll, mis defineerib võrguseadmete kommunikatsiooni. Tavaliselt koosneb üks radius süsteem kolmest komponendist
- NAS - võrguseade, mis vahendab kasutaja internetiliiklust, korraldab autentimist ning saadab radiusele tagasi informatsiooni.
- Radius server, millele NAS server saadab päringuid, mida siis Radius server vastavalt oma andmetele kas siis keelab või lubab
- data store - mysql, postgresql, database või lihtsalt hulk faile kaustas. Ehk koht kus Radiuse jaoks on kasutajanimed, logid ning õigused.
Accountingu informatsioon on see mida NAS saadab perioodiliselt serverile. Tasub tähele panna, et see on väga lihtne infokogum. Detailsema info jaoks on vajalik nt netflow vms tarkvara.
Tulemüürist tuleb radiuse toimimiseks lubada udp pordid 1812 mis autentimiseks ja 1813 mis accountinguks
Sisukord
Sissejuhatus
Use-case on järgnev: Plaan saada tööle radius server mis võtab kasutajad erinevates andmebaasidest nagu PAM, MySQL, Postgresql ja LDAP ning Wifi AP mis on seadistatud kasutama Radius serverit. Autentimiseks kasutuses TTLS-PAP.
Ehk siis visuaalselt on pilt selline
___ Radius server ja kasutajad | | |___| | | ___wifi AP |_____________| | kaabel |___| . ..... . ... ... .... ......Raadiovõrk ...... ..... ... ....... ___ ...... | | |___| wifi klient (nt laptop)
FreeRadius
Paigaldame FreeRadius serveri operatsioonisüsteemi vahenditega (abiks apt-get, emerge jms elementaarsed vahendid). See punkt ei tohiks pisutki Linux/Unix operatsioonisüsteeme tundvale inimesele olla raske.
FreeRadius install
* Redhat, Fedora, CentOS - yum install freeradius * Debian, Ubuntu - apt-get install freeradius * FreeBSD - cd /usr/ports/net/freeradius && make install clean
Kasutame näites versiooni freeradius 1.1.8
Lihtne seadistus failides olevate kasutajate ning NASidega
Olulised failid radiuse seadistamisel
* radiusd.conf - Radiuse peamine seadistusfail * clients.conf - Kontrollib mis AP'd võivad võtta Radius serveriga ühendust * users - klient kasutajate nimekiri * dictionary - * acct_users, db.daily, preproxy_users, hints, huntgroups -
raddb/radiusd.conf
TODO
raddb/clients.conf
Esiteks seadistame radiusesse enda wifi AP. Selleks tekitame selle IPga kliendi sektsiooni ning tekitame parooli.
client "192.168.1.20" { secret = testing123 shortname = (a name for logging, etc.) nastype = (your AP's NAS type; if unknown, try "other") }
WifiAP tuleb seadistada WPA-Enterprise (WPA-802.1x, RADIUS) peale. WPA-Personal (WPA-PSK) tähendab ühte wifi-ap peale seadistatud parooli, mida kõik kliendid kasutavad.
Tekitame testkasutaja, selleks lisame raddb/usersfaili rea
testkasutaja Cleartext-Password := "password"
Ja nüüd peaks juba saama testida. Paneme radius serveri tööle
# sudo freeradius -CX
Kuna radiuse vaikekonf lubab juba localhostist päringuid saata tekitame samas serveris, kuhu radiuse paigaltasime testpäringu kujul
radtest testkasutaja "parool" <ap ip> <suhtlusport> <ap parool>
See koos vastusega võiks välja näha järgnev
$ radtest testkasutaja "password" 127.0.0.1 1812 testing123 Sent Access-Request Id 220 from 0.0.0.0:44690 to 192.168.1.229:1812 length 74 User-Name = "test" User-Password = "test" NAS-IP-Address = 127.0.1.1 NAS-Port = 1812 Message-Authenticator = 0x00 Cleartext-Password = "test" Received Access-Accept Id 220 from 192.168.1.229:1812 to 0.0.0.0:0 length 50
FreeRadiuse seadistus koos info hoidmisega mysql andmebaasis
Siin on üldiselt kõik sama, ainult nüüd hoiame me kõike infot mysqli andmebaasis. Lisaks freeradiusele tuleb paigaldada ka mysql komponent, ubuntus ja debianis nt
# apt-get install freeradius freeradius-mysql
Seejärel avame /etc/freeradius/sites-enabled/default ja täiendame seda järgnevalt
server default { authorize { preprocess chap mschap digest suffix eap { ok = return } files sql # Uncomment This expiration logintime pap } authenticate { Auth-Type PAP { pap } Auth-Type CHAP { chap } Auth-Type MS-CHAP { mschap } digest eap } preacct { preprocess acct_unique suffix files } accounting { detail #unix # Uncomment This #radutmp # Uncomment This sql # Uncomment This exec } session { radutmp sql # Uncomment This } post-auth { sql # Uncomment This exec Post-Auth-Type REJECT { # log failed authentications in SQL, too. # sql # May want to Uncomment this attr_filter.access_reject } } pre-proxy { } post-proxy { eap } }
Seejärel tuleb meil lisada mysql moodul. Selleks /etc/freeradius kaustas
ln -s mods-available/sql mods-enabled/sql
Avame mods-enabled/sql faili ja muudame sead järgnevalt
dialect = "mysql" server = localhost; port = 3306 login = "radius" password = "parool" radius_db = "radius" driver = "rlm_sql_mysql"
Et saaks kliente ehk nase või täpsemalt wifi ap-sid kasutada mysqlist
read_clients = yes
Õige ip ja port /etc/freeradius/3.0/sites-enabled/inner-tunnel faili
listen { ipaddr = 192.168.1.229 port = 1813 type = acct }
Paigaldame mysql serveri
sudo apt-get install mysql-server
Tekitame kasutaja ning paroolid
CREATE DATABASE radius; CREATE USER 'radius'@'localhost' IDENTIFIED BY 'parool'; GRANT ALL ON radius.* TO 'radius'@'localhost' IDENTIFIED BY 'parool';
Tekitame baasi sobivad tabelid
mysql -u root -p radius < mods-config/sql/main/mysql/schema.sql
Ning nüüd võime tekitada esimese kasutaja, nt plaintext parooliga testimiseks
insert into radcheck (username,attribute,op,value) values("test", "Cleartext-Password", ":=", "test");
Lisame oma wifi ap
INSERT INTO nas VALUES (NULL , '192.168.0.15', 'myNAS', 'other', NULL , 'mysecret', NULL , NULL , 'RADIUS Client');
Ja paneme radiuse käima ning testime
sudo freeradius -CX
Accounting
Terve hulga erinevate wifi purkide omanikku huvitab kahtlemata ka kasutusstatistika. Kes logis mis wifi ap külge ja kauaks ning palju infot ta sellejooksul liigutas. Radius pakub asjale lahendust nagu accounting, lisaks sellele, et ta kuulab autoriseerimise küsimusi kuulab ta eraldi pordil ka tagasitulevaid accountingu päringuid.
Lubame accounting päringute kuulamise /etc/freeradius/3.0/sites-enabled/inner-tunnel failis ja seadisamine sinna õige ip ja pordi
listen { ipaddr = <radius serveri ip> port = 1813 type = acct }
Kui kasutuses on mysql siis salvestatakse päringud tabelisse radacct Selle tabeli info vaatamine on mysqli käsurealt kerge
USE radius; SELECT * FROM radacct;
Õnnetuseks tundub, et wifi purk peab toetama lisaks radiusele ka accountingut ja see tundub praegu trikiga koht. Tundub, et osadel wifi APdel see puudub ja ilmselt accountingut ei pakuta. Paistab, et see accounting on nii triviaalne, et tavalistes specides seda ka välja ei tooda.
On olemas alterantiivina küll tabel radpostauth, kuid sinna pannakse vaikimisi kirja vaid kasutajanimi, tema parool ning kas autentimine õnnestus või ei. Selleks, et salvestada antud tabelisse rohkem infot sessioonidest, nt ka wifi AP IP aadress tuleb natuke päringuid ja tabelistruktuuri muuta.
Failis mods-config/sql/main/mysql/queries.conf tuleb muuta lõpus olev post auth sektsioon järgnevaks
query = "\ INSERT INTO ${..postauth_table} \ (username, pass, reply, authdate, nasip) \ VALUES ( \ '%{SQL-User-Name}', \ '%{%{User-Password}:-%{Chap-Password}}', \ '%{reply:Packet-Type}', \ '%S', \ '%{NAS-IP-Address}')"
Ja mysqlis
ALTER TABLE radpostauth ADD nasip varchar(64);
Võimalus on lisada sinna veel erinevaid parameetreid
Paroolidest
Kuidas paroole hoida ja mis formaadis on omaette teema. Iga parooliformaat ei toeta iga autentimise meetodit
http://deployingradius.com/documents/protocols/compatibility.html
Parooliformaat tuleb defineerida ka konfis nt järgnevalt
pap { encryption_scheme = sha1 }
Lingid
http://wiki.freeradius.org/WPA_HOWTO
https://wiki.itcollege.ee/index.php/RADIUS_serveri_kasutamine_wifi_võrkudes
http://karman.homelinux.net/blog/archives/300
https://www.howtoforge.com/wifi-authentication-accounting-with-freeradius-on-centos5-p2
https://wiki.freeradius.org/guide/WPA-HOWTO
https://me.m01.eu/blog/2012/05/wpa-2-enterprise-from-scratch-on-a-raspberry-pi/