Radius

Allikas: Kuutõrvaja
Redaktsioon seisuga 22. november 2017, kell 17:53 kasutajalt Jj (arutelu | kaastöö) (Cluster ja kõrgkäideldavus)
                                        Roheline.jpg 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

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 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 {
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

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

http://deployingradius.com/documents/protocols/compatibility.html

Parooliformaat tuleb defineerida ka konfis nt järgnevalt

        pap { 
                encryption_scheme = sha1 
        }

Cluster ja kõrgkäideldavus

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/