Erinevus lehekülje "Radius" redaktsioonide vahel
(→SQL käsud) |
(→SQL käsud) |
||
374. rida: | 374. rida: | ||
TODO | TODO | ||
− | |||
Näide, kuidas omaloodud sql käskude abil kasutaja teatud hulga ebaõnnestunud logimiskordade järel lukustada https://wiki.freeradius.org/guide/lockout | Näide, kuidas omaloodud sql käskude abil kasutaja teatud hulga ebaõnnestunud logimiskordade järel lukustada https://wiki.freeradius.org/guide/lockout |
Redaktsioon: 21. juuni 2018, kell 00:25
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. Seal tasub ühtlasi tähele panna, et konfikataloog asub /usr/local/etc/raddb
Kasutame näites versiooni freeradius 3
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 = "password" NAS-IP-Address = 127.0.1.1 NAS-Port = 1812 Message-Authenticator = 0x00 Cleartext-Password = "password" 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 { listen { type = auth ipaddr = * # 0 means "use /etc/services for the proper port" port = 0 limit { max_connections = 16 lifetime = 0 idle_timeout = 30 } } listen { ipaddr = * port = 0 type = acct limit { idle_timeout = 0 lifetime = 0 max_connections = 0 } } 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
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
Olulisemad tabelid mis tekivad
- nas - wifi APde info
- radacct - Radius accounting, iga wifiruuteriga ei toimi
- radcheck - wifi kasutajad
- radgroupreply - erinevad parameetrid mida kliendile saadetakse, kas ta siis aksepteerib või ei on tema teha
- radpostauth - autentimise logi, mis ap peale ja kes
- radusergroup - mis kasutaja mis grupis
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', \ '%{Client-IP-Address}')" }
Ja mysqlis
ALTER TABLE radpostauth ADD nasip varchar(64);
Võimalus on lisada sinna veel erinevaid parameetreid.
Kasutajate seadistus ning grupid
Kasutajad saab panna teatud kuupäeval aeguma
insert into radcheck (username,attribute,op,value) values("test", "Expiration", ":=", "21 Dets 2017");
Misjärel teatatakse logis
(20) expiration: ERROR: Account expired at 'Dets 21 2017 12:00:00 EEST'
Ja kliendile öeldakse
(22) Sent Access-Reject Id 217 from 77.72.149.123:1812 to 88.196.30.219:39891 length 20
Infot võib lisada veel igasugust, nt
INSERT INTO radreply (UserName, Attribute, op, Value) VALUES ('guest', 'Max-Daily-Session', '==', '600'); INSERT INTO radreply (UserName, Attribute, op, Value) VALUES ('guest', 'Session-Timeout', '==', '120'); INSERT INTO radreply (UserName, Attribute, op, Value) VALUES ('guest', 'Idle-Timeout', '==', '60');
Kõikide atribuutide nimekirja leiab http://freeradius.org/rfc/attributes.html
Radiusesse saab ka ise muutujaid lisada ning hiljem kasutada, näiteks tekitame uue muutuja Wifi-AP ja defineerime sinna ühe aadressi
insert into radcheck (username,attribute,op,value) values("test", "Wifi-IP", ":=", "192.168.1.1");
Defineime dictionary faili uue muutuja
ATTRIBUTE Wifi-IP 3011 string
Logist näeme, et muutuja loeti kenasti sqlist välja ning defineeriti ära
(9) sql: Wifi-IP := "192.168.1.1"
Seda muutujat saame juba edaspidi kasutada mitmesuguste if/else võrdluste korral. Näiteks saame siduda teatud kasutajad teatud wifi AP-dega nii, et nad ei saaks logida mujalt. kui Wifi-IP muutujaga andmebaasis defineeritud ruuteri tagant.
if ("%{control:Wifi-IP}" != "%{Client-IP-Address}"){ reject }
Sellejärel peaks saama kasutaja mart logida ainult 192.168.1.1 aadressiga wifi AP küljes olles. Logis näeb see protsess välja järgnev
(30) if ("%{control:Wifi-IP}" != "%{Client-IP-Address}"){ (30) EXPAND %{control:Wifi-IP} (30) --> 192.168.1.1 (30) EXPAND %{Client-IP-Address} (30) --> 192.168.1.1 (30) if ("%{control:Wifi-IP}" != "%{Client-IP-Address}") -> FALSE
Krüpto ja paroolid
- WEP - peetakse tänapäev vananekuks ja väga vigaseks. Kasutab krüptimiseks RC4 algoritmi.
- WPA - vanema põlvkonna lahendus. kasutab krüptimiseks AES algoritmi, autentimiseks EAP protokolli ja tkip ajutiste võtmete terviklikkuse protokolli
- WPA2 - Kasutab krüpteerimiseks AES põhist CCMP algoritmi.
Kuidas paroole hoida ja mis formaadis on omaette teema. Iga parooliformaat ei toeta iga autentimise meetodit
Parooliformaat tuleb defineerida ka konfis nt järgnevalt
pap { encryption_scheme = sha1 }
NT parooli geneerimine
smbencrypt passme
Loodud parooli võib kasutada nt sellisel kujul kasutajate failis
"alice" NT-Password := "CED46D3B902D60F779ED78BFD90ED00A"
Ühekorsete paroolide ehk OPT (one-time password) loomiseks on moodul rlm_otp
http://deployingradius.com/documents/protocols/compatibility.html
SQL käsud
TODO
Näide, kuidas omaloodud sql käskude abil kasutaja teatud hulga ebaõnnestunud logimiskordade järel lukustada https://wiki.freeradius.org/guide/lockout
Cluster ja kõrgkäideldavus
Feeradius on väga paindlik süsteem, ta kasutab udpd mida on kerge haproxydega jagada serverite vahele, lisaks toetab ta vaikimisi juba enda sees päringute jagamist mitmetele mysql serveritele laiali, võimalik on teha eraldi poliitikaid vastavalt erinevatele konfiblokkidele. Näiteks kasutada natuke erinevaid sql seadeid autentimisel ja accountingu
Radius pakub võimaluse defineerida mitu mysql serverit
modules { sql sql1 { # configuration to connect to SQL database one } sql sql2 { # configuration to connect to SQL database two } always handled { rcode = handled } }
redundant moodul proovib järjest enda sektsiooni defineeritud ridu, kuni esimene neist õnnestub
# Handle accounting packets accounting { # always log to detail, stopping if it fails detail redundant { # try module sql1 sql1 # if that's down, try module sql2 sql2 # otherwise drop the request as # it's been "handled" by the "always" # module (see doc/rlm_always) handled } }
https://wiki.freeradius.org/config/Fail-over
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/
https://github.com/hotbaby/hostapd-authenticator/wiki/Hostapd-RADIUS-EAP-authentication-server tarkvaralise wifiruuteri seadistamine radiuse vastu
http://manpages.ubuntu.com/manpages/zesty/man5/unlang.5.html