FreeRADIUS

A Unix/Linux szerverek üzemeltetése wikiből
(Változatok közti eltérés)
(checkpoint)
2. sor: 2. sor:
   
   
A FreeRADIUS egy free open source RADIUS szerver. RADIUS (Remote Authentication Dial In User Service) egy authentication (hitelesítés), authorization (engedélyezés) and accounting (naplózás) kliens-szerver protokoll. Az authentication, authorization és accounting hármast csak AAA-nak szokás rövidíteni.
+
A FreeRADIUS egy free open source RADIUS-szerver. A RADIUS (Remote Authentication Dial In User Service) egy olyan kliens-szerver protokoll, amely a következő feladatok ellátásához nyújt segítséget:
  +
* authentication (hitelesítés),
  +
* authorization (engedélyezés),
  +
* and accounting (naplózás, számlázás).
   
FreeRADIUS hivatalos weboldala: http://www.freeradius.org/
+
Az authentication, authorization és accounting hármast csak AAA-nak szokás rövidíteni.
   
Jelenlegi stabil verzió: 1.1.7 (2007.07.25)
+
A FreeRADIUS hivatalos weboldala: [http://www.freeradius.org/ http://www.freeradius.org/].
   
Ez egy moduláris, gyors, gazdag protokoll készletű RADIUS szerver, és lehetőséget biztosít külső, így saját modulok használatára is.
+
A cikk írásakor (2007. december 2.) az aktuális stabil verzió az 1.1.7 (2007.07.25-én jelent meg).
  +
  +
A FreeRADIUS egy moduláris, gyors, gazdag protokollkészletű RADIUS-szerver, amely lehetőséget biztosít külső, így saját modulok használatára is.
  +
  +
A FreeRADIUS a felhasználói adatokat a következő forrásokból tudja kiolvasni:
   
A FreeRADIUS által használt felhasználói adatok elérése:
 
 
* LDAP
 
* LDAP
 
* Kerberos
 
* Kerberos
* SQl (MySQL, PostgreSQL, MSSQl, Oracle)
+
* SQL (MySQL, PostgreSQL, MSSQL, Oracle)
* /etc/passwd
+
* <tt>/etc/passwd</tt>
 
* PAM
 
* PAM
* fájl
+
* sima szövegfájl
 
* ProxyRadius
 
* ProxyRadius
* DC (domain controller)
+
* DC (Windows domain controller)
* program (perl, python)
+
* külső program (perl, python)
  +
  +
Támogatott hitelesítési protokollok:
   
Hitelesítési protokollok:
 
 
* PAP
 
* PAP
 
* CHAP
 
* CHAP
 
* MSCHAP (v1, v2)
 
* MSCHAP (v1, v2)
 
* SIP Digest (Cisco VoIP)
 
* SIP Digest (Cisco VoIP)
* EAP
+
* EAP, PEAP
   
 
== Mikor használják? ==
 
== Mikor használják? ==
   
Felmerülhet a kérdés, hogy ha van pl.: egy LDAP szerverünk, akkor miért teszünk meg egy szervert (RADIUS) a hálózati erőforrás és az LDAP közé?
+
Felmerülhet a kérdés, hogy ha van pl. egy LDAP-szerverünk, akkor miért teszünk még egy szervert (RADIUSt) a hálózati erőforrás és az LDAP közé?
   
Biztonsági megfontolásból pl.: az adott alkalmazást feltörik, akkor nem tudnak közvetlenül hozzá férni az LDAP-hoz, ilyenkor a RADIUS szerver bástya hostként (Bastion host) viselkedik.
+
* Biztonsági megfontolásból.
Vagy ki akarjuk használni a RADIUS adta lehetőségeket: központi felhasználó és jogosultság kezelés, és naplózás.
+
** Pl. ha az adott alkalmazást feltörik, akkor nem tudnak közvetlenül hozzáférni az LDAP-hoz, ilyenkor a RADIUS-szerver egyfajta bástyahostként (Bastion host) viselkedik.
  +
* Vagy: ki akarjuk használni a RADIUS adta lehetőségeket:
  +
** központi felhasználó-
  +
** és jogosultságkezelés,
  +
** naplózás.
   
Viszont a leggyakoribb alkalmazási területe, azoknál a hálózati erőforrásoknál használják, ahol nincsen lehetőség, vagy mód a fent felsorolt azonosítási protokollok implementálására pl.: hálózati eszközök (routerek, switchek, AP-k, stb.).
+
Leggyakoribb alkalmazási területe: azoknál a hálózati erőforrásoknál, ahol nincs lehetőség vagy mód a fent felsorolt azonosítási protokollok implementálására. Pl. hálózati eszközök (routerek, switchek, AP-k, stb.).
   
 
== Hogy lehet beszerezni? ==
 
== Hogy lehet beszerezni? ==
   
A letölthető a forrása a http://www.freeradius.org weboldalról és utána szokásos modon telepíthető (./configure, make, make install), vagy általában a distribucióknál létezik belőlük csomag (pl.: Debian, Fedora, SUSE, stb).
+
A letölthető a forrása a [http://www.freeradius.org/ http://www.freeradius.org/] weboldalról, és utána a szokásos modon telepíthető (<tt>./configure, make, make install</tt>), de általában a disztribúciókhoz is létezik belőle csomag (pl. Debian, Fedora, SUSE stb).
   
Létezik belőle Windows-os verzió is, csak azt FreeRADIUS.net néven terjesztik, ami letölthető a http://www.freeradius.net weboldalról.
+
Létezik belőle Windows-os verzió is, csak azt FreeRADIUS.net néven terjesztik, és a [http://www.freeradius.net/ http://www.freeradius.net/] weboldalról tölthető le.
   
   
== RADIUS protokoll ==
+
== A RADIUS-protokoll ==
   
Kliens-szerver architekurájú protokoll, ahol a kliens egy NAS (Network Access Server), ami küld egy kérést, és a szerver (RADIUS) válaszol kérésre. A RADIUS protokoll UDP-t használ. A kliens-szerver között átlagban egy kérés és válasz zajlik le, így fölösleges lenne TCP-t használni. A TCP megbízhatóbb, de nagyon lassítaná csak a protokoll válasz idejét. A protokoll 2 portot használ. A 1812-es porton az auth (authentication, authorization) folyamatokra használja, és a 1813-as portot meg a naplózáshoz (accounting) használja.
+
Kliens-szerver architekurájú protokoll, ahol:
  +
* a kliens egy NAS (Network Access Server),
  +
* a szerver pedig a RADIUS-szerver.
   
RFC (2000): [http://www.ietf.org/rfc/rfc2865.txt?number=2865 2865], [http://www.ietf.org/rfc/rfc2866.txt?number=2866 2866]
+
A RADIUS-protokoll UDP-t használ. A kliens és a szerver között egy-egy tranzakcióval kapcsolatban mindkét irányban csak egy-egy csomag megy át, így fölösleges lenne TCP-t használni.
  +
A TCP ugyan megbízhatóbb, de megnövelné a protokoll válaszidejét.
   
'''Protokoll futam:'''
+
A protokoll két portot használ:
  +
* 1812: auth (authentication, authorization) folyamatok;
  +
* 1813: naplózás, számlázás (accounting).
   
<center>
+
Két RFC foglalkozik vele:
  +
* [http://www.ietf.org/rfc/rfc2865.txt?number=2865 RFC2865],
  +
* [http://www.ietf.org/rfc/rfc2866.txt?number=2866 EFC2866]
   
  +
'''Protokollfutam:'''
   
[[Kép:radius.gif]]
+
[[Kép:radius.gif||center]]
   
  +
[[Kép:Client.gif||center]]
   
[[Kép:Client.gif]]
+
A RADIUS csomagformátuma:
</center>
 
   
+
<pre>
 
"RADIUS adat formátuma (mind a két esetben):"
 
 
0 1 2 3
 
0 1 2 3
 
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
73. sor: 73. sor:
 
| Attributes ...
 
| Attributes ...
 
+-+-+-+-+-+-+-+-+-+-+-+-+-
 
+-+-+-+-+-+-+-+-+-+-+-+-+-
+
</pre>
   
 
'''RADIUS Codes (decimal) értékei:'''
 
'''RADIUS Codes (decimal) értékei:'''
  +
<pre>
 
1 Access-Request
 
1 Access-Request
 
2 Access-Accept
 
2 Access-Accept
85. sor: 86. sor:
 
13 Status-Client (experimental)
 
13 Status-Client (experimental)
 
255 Reserved
 
255 Reserved
  +
</pre>
   
Mivel az UDP-ben nincsen nyugtázás, ezért a protokollba beépítették. Erre csak a naplózásnál (accounting) van szükség, ilyenkor a RADIUS nyugtázza, hogy megkapta a napló (accounting) csomagot.
+
Mivel az UDP-ben nincs nyugtázás, ezért a protokollba beépítették. Erre csak a naplózásnál (accounting) van szükség, ilyenkor a RADIUS-szerver nyugtázza, hogy megkapta a napló (accounting) csomagot.
   
 
'''Identifier:'''
 
'''Identifier:'''
93. sor: 95. sor:
   
 
'''Length:'''
 
'''Length:'''
Az egész csomag méretét adja meg. A minimum méret 20, míg a maximális 4096 byte.
+
Az egész csomag méretét adja meg. A minimális méret 20, míg a maximális 4096 byte.
   
 
'''Authenticator:'''
 
'''Authenticator:'''
A NAS és a RADIUS rendelkezik egy közös kulccsal (secret vagy key).
+
A NAS és a RADIUS rendelkezik egy közös kulccsal ("secret" vagy "key").
Auth esetben:
 
   
A kliens generál egy random számot, amit elküld a kérésben. Majd a szerver a válasz csomagban a következő algoritmust használja fel, hogy hitelesítse magát: ResponseAuth = MD5(Code,ID,Length,NASAuth,Attributes,Secret).
+
Auth esetén:
   
Acc esetében:
+
# A kliens generál egy véletlenszámot, amit elküld a kérésben.
  +
# A szerver a válaszcsomagban a következő algoritmust használja fel, hogy hitelesítse magát:
  +
#* ResponseAuth = MD5(Code,ID,Length,NASAuth,Attributes,Secret).
   
A kliens (NAS) a következő algoritmus szerint generálja:
+
Acc esetén:
   
Authenticator=MD5(Code,Identifier,Length,16 zero octets,request attributes,shared secret)
+
# A kliens (NAS) a következő algoritmus szerint generálja:
  +
#* Authenticator=MD5(Code,Identifier,Length,16 zero octets,request attributes,shared secret)
  +
# A RADIUS a válasza:
  +
#* Authenticator=MD5(Code,Identifier,Length,Request Authenticator,Secret)
   
A RADIUS a válasz csomagban Authenticator=MD5(Code,Identifier,Length,Request Authenticator,Secret)
+
'''Attribútum felépítése:'''
+
<pre>
 
 
'''Attributum:'''
 
felépítése:
 
 
0 1 2
 
0 1 2
 
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0
 
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0
113. sor: 115. sor:
 
| Type | Length | Value ...
 
| Type | Length | Value ...
 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
+
</pre>
   
 
'''Type:'''
 
'''Type:'''
Auth esetén:
+
Auth esetén:
  +
<pre>
 
1 User-Name
 
1 User-Name
 
2 User-Password
 
2 User-Password
161. sor: 163. sor:
 
62 Port-Limit
 
62 Port-Limit
 
63 Login-LAT-Port
 
63 Login-LAT-Port
+
</pre>
Accountig esetén:
+
Accounting esetén:
  +
<pre>
 
40 Acct-Status-Type
 
40 Acct-Status-Type
 
41 Acct-Delay-Time
 
41 Acct-Delay-Time
175. sor: 177. sor:
 
50 Acct-Multi-Session-Id
 
50 Acct-Multi-Session-Id
 
51 Acct-Link-Count
 
51 Acct-Link-Count
  +
</pre>
   
'''Lenght:'''
+
'''Length:'''
   
Atrributum teljes hosszát adja meg.
+
Atrribútum teljes hosszát adja meg.
   
 
'''Value:'''
 
'''Value:'''

A lap 2007. december 2., 23:24-kori változata

Tartalomjegyzék

1 Általános bevezető

A FreeRADIUS egy free open source RADIUS-szerver. A RADIUS (Remote Authentication Dial In User Service) egy olyan kliens-szerver protokoll, amely a következő feladatok ellátásához nyújt segítséget:

  • authentication (hitelesítés),
  • authorization (engedélyezés),
  • and accounting (naplózás, számlázás).

Az authentication, authorization és accounting hármast csak AAA-nak szokás rövidíteni.

A FreeRADIUS hivatalos weboldala: http://www.freeradius.org/.

A cikk írásakor (2007. december 2.) az aktuális stabil verzió az 1.1.7 (2007.07.25-én jelent meg).

A FreeRADIUS egy moduláris, gyors, gazdag protokollkészletű RADIUS-szerver, amely lehetőséget biztosít külső, így saját modulok használatára is.

A FreeRADIUS a felhasználói adatokat a következő forrásokból tudja kiolvasni:

  • LDAP
  • Kerberos
  • SQL (MySQL, PostgreSQL, MSSQL, Oracle)
  • /etc/passwd
  • PAM
  • sima szövegfájl
  • ProxyRadius
  • DC (Windows domain controller)
  • külső program (perl, python)

Támogatott hitelesítési protokollok:

  • PAP
  • CHAP
  • MSCHAP (v1, v2)
  • SIP Digest (Cisco VoIP)
  • EAP, PEAP

2 Mikor használják?

Felmerülhet a kérdés, hogy ha van pl. egy LDAP-szerverünk, akkor miért teszünk még egy szervert (RADIUSt) a hálózati erőforrás és az LDAP közé?

  • Biztonsági megfontolásból.
    • Pl. ha az adott alkalmazást feltörik, akkor nem tudnak közvetlenül hozzáférni az LDAP-hoz, ilyenkor a RADIUS-szerver egyfajta bástyahostként (Bastion host) viselkedik.
  • Vagy: ki akarjuk használni a RADIUS adta lehetőségeket:
    • központi felhasználó-
    • és jogosultságkezelés,
    • naplózás.

Leggyakoribb alkalmazási területe: azoknál a hálózati erőforrásoknál, ahol nincs lehetőség vagy mód a fent felsorolt azonosítási protokollok implementálására. Pl. hálózati eszközök (routerek, switchek, AP-k, stb.).

3 Hogy lehet beszerezni?

A letölthető a forrása a http://www.freeradius.org/ weboldalról, és utána a szokásos modon telepíthető (./configure, make, make install), de általában a disztribúciókhoz is létezik belőle csomag (pl. Debian, Fedora, SUSE stb).

Létezik belőle Windows-os verzió is, csak azt FreeRADIUS.net néven terjesztik, és a http://www.freeradius.net/ weboldalról tölthető le.


4 A RADIUS-protokoll

Kliens-szerver architekurájú protokoll, ahol:

  • a kliens egy NAS (Network Access Server),
  • a szerver pedig a RADIUS-szerver.

A RADIUS-protokoll UDP-t használ. A kliens és a szerver között egy-egy tranzakcióval kapcsolatban mindkét irányban csak egy-egy csomag megy át, így fölösleges lenne TCP-t használni. A TCP ugyan megbízhatóbb, de megnövelné a protokoll válaszidejét.

A protokoll két portot használ:

  • 1812: auth (authentication, authorization) folyamatok;
  • 1813: naplózás, számlázás (accounting).

Két RFC foglalkozik vele:

Protokollfutam:

Client.gif

A RADIUS csomagformátuma:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     Code      |  Identifier   |            Length             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   |                         Authenticator                         |
   |                                                               |
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  Attributes ...
   +-+-+-+-+-+-+-+-+-+-+-+-+-

RADIUS Codes (decimal) értékei:

        1       Access-Request
        2       Access-Accept
        3       Access-Reject
        4       Accounting-Request
        5       Accounting-Response
       11       Access-Challenge
       12       Status-Server (experimental)
       13       Status-Client (experimental)
      255       Reserved

Mivel az UDP-ben nincs nyugtázás, ezért a protokollba beépítették. Erre csak a naplózásnál (accounting) van szükség, ilyenkor a RADIUS-szerver nyugtázza, hogy megkapta a napló (accounting) csomagot.

Identifier:

Az összetartozó csomagokat azonosítja.

Length: Az egész csomag méretét adja meg. A minimális méret 20, míg a maximális 4096 byte.

Authenticator: A NAS és a RADIUS rendelkezik egy közös kulccsal ("secret" vagy "key").

Auth esetén:

  1. A kliens generál egy véletlenszámot, amit elküld a kérésben.
  2. A szerver a válaszcsomagban a következő algoritmust használja fel, hogy hitelesítse magát:
    • ResponseAuth = MD5(Code,ID,Length,NASAuth,Attributes,Secret).

Acc esetén:

  1. A kliens (NAS) a következő algoritmus szerint generálja:
    • Authenticator=MD5(Code,Identifier,Length,16 zero octets,request attributes,shared secret)
  2. A RADIUS a válasza:
    • Authenticator=MD5(Code,Identifier,Length,Request Authenticator,Secret)

Attribútum felépítése:

    0                   1                   2
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
   |     Type      |    Length     |  Value ...
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-

Type: Auth esetén:

          1      User-Name
          2      User-Password
          3      CHAP-Password
          4      NAS-IP-Address
          5      NAS-Port
          6      Service-Type
          7      Framed-Protocol
          8      Framed-IP-Address
          9      Framed-IP-Netmask
         10      Framed-Routing
         11      Filter-Id
         12      Framed-MTU
         13      Framed-Compression
         14      Login-IP-Host
         15      Login-Service
         16      Login-TCP-Port
         17      (unassigned)
         18      Reply-Message
         19      Callback-Number
         20      Callback-Id
         21      (unassigned)
         22      Framed-Route
         23      Framed-IPX-Network
         24      State
         25      Class
         26      Vendor-Specific
         27      Session-Timeout
         28      Idle-Timeout
         29      Termination-Action
         30      Called-Station-Id
         31      Calling-Station-Id
         32      NAS-Identifier
         33      Proxy-State
         34      Login-LAT-Service
         35      Login-LAT-Node
         36      Login-LAT-Group
         37      Framed-AppleTalk-Link
         38      Framed-AppleTalk-Network
         39      Framed-AppleTalk-Zone
         40-59   (reserved for accounting)
         60      CHAP-Challenge
         61      NAS-Port-Type
         62      Port-Limit
         63      Login-LAT-Port

Accounting esetén:

         40      Acct-Status-Type
         41      Acct-Delay-Time
         42      Acct-Input-Octets
         43      Acct-Output-Octets
         44      Acct-Session-Id
         45      Acct-Authentic
         46      Acct-Session-Time
         47      Acct-Input-Packets
         48      Acct-Output-Packets
         49      Acct-Terminate-Cause
         50      Acct-Multi-Session-Id
         51      Acct-Link-Count

Length:

Atrribútum teljes hosszát adja meg.

Value: Mérete lehet nulla is. Vagy több byte is.

Típusai:

  • text 1-253 byte
  • string 1-253 byte
  • address 32 bit
  • integer 32 bit
  • time 32 bit (unix time: 1970. január 1. UTC 00:00:00 óta eltelt másodpercek)


RADIUS hitelesítés lépései:

Fájl:radius2.gif

Lépések:

1. NAS - Access-Request

  • Code=Access-Request
  • Authenticator=NAS által generált random szám
  • Attributumok: User-Name, User-Password

Password titkosítva=MD5(NASAuth,Secret) XOR Password

2. RADIUS - Access-Accept vagy Access-Reject

  • Code= Access-Accept vagy Access-Reject
  • Authenticator=MD5(Code,ID,Length,NASAuth,Attributes,Secret)
  • Attributomok (pl.: jogok, protokoll, stb) (opcionális)


RADIUS naplózás lépései:

1. NAS - Accounting-Request

  • Code=Accounting-Request
  • Authenticator=MD5(Code,Identifier,Length,16 zero octets,request attributes,shared secret)
  • Attributumok

2. RADIUS - Accounting-Response

  • Code=Accounting-Response
  • Authenticator=MD5(Code,Identifier,Length,Request Authenticator,Secret)

5 Beállítás

Forrásból telepített FreeRADIUS könyvtár szerkezete:

bin
etc
include
lib
man
sbin
share
var


A konfig fájlok alapértelmezésben a etc/raddb könyvtárban vannak. A konfig fájlok listája:

acct_users
attrs
certs
clients
clients.conf
db.ipindex
db.ippool
dictionary
eap.conf
error2
example.pl
experimental.conf
hints
huntgroups
ldap.attrmap
mssql.conf
naslist
naspasswd
oraclesql.conf
otp.conf
otppasswd.sample
postgresql.conf
preproxy_users
proxy.conf
radiusd.conf
realms
services
snmp.conf
sql.conf
sqlippool.conf
users

A listából is látszik, hogy mennyire moduláris a konfigurációja. A fő konfigurációs fájl a radiusd.conf, ez töltődik be alapból, és tölti be a szükséges többi konfigurációs fájlt.

Radiusd.conf fájlból részletek:

prefix = /usr/local/freeradius-1.1.7
exec_prefix = ${prefix}
sysconfdir = ${prefix}/etc
localstatedir = ${prefix}/var
sbindir = ${exec_prefix}/sbin
logdir = ${localstatedir}/log/radius
raddbdir = ${sysconfdir}/raddb
radacctdir = ${logdir}/radacct
confdir = ${raddbdir}
run_dir = ${localstatedir}/run/radiusd
log_file = ${logdir}/radius.log
pidfile = ${run_dir}/radiusd.pid

Amivel futni fog a RADIUS szerver.

user = nobody
group = nobody

IP címe a szervernek:

bind_address = 152.66.208.218

Modulok beállítása következik.

Proxy:

proxy_requests  = yes
$INCLUDE  ${confdir}/proxy.conf

kliensek:

$INCLUDE  ${confdir}/clients.conf

Unix /etc/passwd alapú hitelesítés:

unix {
  passwd = /etc/passwd
}

AAA metódus előtt elvégzett műveletek pl.: IP cím ellenőrzés

   preprocess {
         huntgroups = ${confdir}/huntgroups
         hints = ${confdir}/hints
   }

LDAP:

 ldap {
    server = "ldap.your.domain"
    identity = "cn=admin,o=My Org,c=UA"
    basedn = "o=My Org,c=UA"
    filter = "(uid=%{Stripped-User-Name:-%{User-Name}})"
    base_filter = "(objectclass=radiusprofile)"
    start_tls = no
    tls_cacertfile        = /path/to/cacert.pem
    tls_cacertdir         = /path/to/ca/dir/
    tls_certfile          = /path/to/radius.crt
    tls_keyfile           = /path/to/radius.key
    tls_randfile          = /path/to/rnd
    tls_require_cert      = "demand"
    ldap_connections_number = 5
  }

felhasználók megadása:

 files {
    usersfile = ${confdir}/users
    acctusersfile = ${confdir}/acct_users
    preproxy_usersfile = ${confdir}/preproxy_users
 }

Naplózás:

 detail {
    detailfile = ${radacctdir}/%{Client-IP-Address}/detail-%Y%m%d
    detailperm = 0600
 }
 sql_log {
              path = ${radacctdir}/sql-relay
              acct_table = "radacct"
              postauth_table = "radpostauth"
              Start = "INSERT INTO ${acct_table} (AcctSessionId, UserName, \
               NASIPAddress, FramedIPAddress, AcctStartTime, AcctStopTime, \
               AcctSessionTime, AcctTerminateCause) VALUES                 \
               ('%{Acct-Session-Id}', '%{User-Name}', '%{NAS-IP-Address}', \
               '%{Framed-IP-Address}', '%S', '0', '0', );"
              Stop = "INSERT INTO ${acct_table} (AcctSessionId, UserName,  \
               NASIPAddress, FramedIPAddress, AcctStartTime, AcctStopTime, \
               AcctSessionTime, AcctTerminateCause) VALUES                 \
               ('%{Acct-Session-Id}', '%{User-Name}', '%{NAS-IP-Address}', \
               '%{Framed-IP-Address}', '0', '%S', '%{Acct-Session-Time}',  \
               '%{Acct-Terminate-Cause}');"
              Alive = "INSERT INTO ${acct_table} (AcctSessionId, UserName, \
               NASIPAddress, FramedIPAddress, AcctStartTime, AcctStopTime, \
               AcctSessionTime, AcctTerminateCause) VALUES                 \
               ('%{Acct-Session-Id}', '%{User-Name}', '%{NAS-IP-Address}', \
               '%{Framed-IP-Address}', '0', '0', '%{Acct-Session-Time}',);"
              Post-Auth = "INSERT INTO ${postauth_table}                   \
               (user, pass, reply, date) VALUES                            \
               ('%{User-Name}', '%{User-Password:-Chap-Password}',         \
               '%{reply:Packet-Type}', '%S');"
      }

A már megismert AAA metódus kerül megint elő. Egyenként tudjuk megadni, hogy melyik modult akarjuk használni. Az Auth-Type beállításnál csak az ott megadott modult használja, és nem próbálja meg a többi felsorolt modult használni.

authorize {
    file
    ldap
    eap
    sql
  }
authenticate {
       Auth-Type CHAP {
               chap
       }
       pam
       unix
   }
preacct {
       preprocess
       acct_unique
   }
accounting {
       detail
       sql
       sql_log
   }
post-auth {
       main_pool
       sqlippool
       Post-Auth-Type REJECT {
              insert-module-name-here
       }
   }
pre-proxy {
       files
       pre_proxy_log
   }
post-proxy {
       post_proxy_log
   }

A preacct a naplózás előtt elvégzendő műveletek pl.: egyedi kulcsot generál a felhasználónak key = "User-Name, Acct-Session-Id, NAS-IP-Address, Client-IP-Address, NAS-Port"

A post-auth az eredményesen hitelesített felhasználók utólagos műveleteit tartalmazza pl.: IP cím osztás. Vagy a nem eredményesen hitelesített felhasználók a "Post-Auth-Type REJECT" magadott modullal mégpróbálkozik hitelsíteni a RADIUS.

A pre-proxy és post-proxy a RADIUS-Proxy előtt és után elvégzett modulokat lehet megadni.

Azonosításnál mindenképpen használt modulok: clients, realms, huntgroups, users.

clients

A NAS beállításait lehet megadni: IP, secret, nastype.

Támogatott nastype:

              cisco
              computone
              livingston
              max40xx
              multitech
              netserver
              pathras
              patton
              portslave
              tc
              usrhiper
              other     

realms

A felhasználónév@realm formátumban megadott felhasználóneveknél használatos.

huntgroups

A NAS-hoz kapcsolódó felhasználók "paramétereit" adhatjuk meg pl.: IP

users

Itt lehet összefogni, az előbb tárgyalt hármast (clients, realm, huntgroups).

Egyébb modulok

A modulok beállításait, ha a radiusd.conf-ban nem lehet megtenni, akkor a modullal azonos nevű fájlban tudjuk megtenni.

Példa: SQL:

A radiusd.confban meg kell adni, hogy milyen sql-t szeretne használni. Támogatott: PostgreSQL, MySQL, MSSQL, Oracle.

Például, ha postgresql-t szeretnénk használni, akkor a postgresql.conf-ot kell betölteni.

A fájlban kell megadni a postgreSQL szerver beállításait pl.: hostnév, felhasználó, jelszó, adatbázis, stb..

Az adatbázis séma elérési útja a fájl elején található pl.: doc/examples/postgresql.sql

Részlet a postgresql.conf-ból:

 sql {
       driver = "rlm_sql_postgresql"
       server = "localhost"
       login = "postgres"
       password = ""
       radius_db = "radius"
    [...]

Majd az AAA metódusnál megismert események SQL műveletei vannak:

Egy kapcsolat felépítésének a naplózása:
accounting_start_query = "INSERT into ${acct_table1} \
   AcctSessionId, AcctUniqueId, UserName, Realm, NASIPAddress, NASPortId, NASPortType, AcctStartTime, AcctAuthentic, \
   ConnectInfo_start, CalledStationId, CallingStationId, ServiceType, FramedProtocol, FramedIPAddress, AcctStartDelay, AscendSessionSvrKey) \
   values('%{Acct-Session-Id}', '%{Acct-Unique-Session-Id}', '%{SQL-User-Name}', '%{Realm}', '%{NAS-IP-Address}', \
   '%{NAS-Port}', '%{NAS-Port-Type}', ('%S'::timestamp - '%{Acct-Delay-Time:-0}'::interval), '%{Acct-Authentic}', '%{Connect-Info}', \
   '%{Called-Station-Id}', '%{Calling-Station-Id}', '%{Service-Type}', '%{Framed-Protocol}', \
    NULLIF('%{Framed-IP-Address}', )::inet, 0, '%{X-Ascend-Session-Svr-Key}')"

6 Példa beállítás

A példában a következőket valósítjuk meg:

Adott néhány Cisco hálózati eszköz (switch, router, VPN Concentrátor), és néhány gép amiről ezeket szeretnék SSH-n keresztül konfigurálni. A felhasználókat fájlban tároljuk. A kapcsolatokat naplózni szeretnénk fájlba és sql-be is. Ezenkívül a VPN Concetrátornál szeretnénk, ha a VPN felhasználók azonosítása LDAP-ból történe, és ők ne tudjanak SSH-n keresztül belépni a hálózati eszközökre. A naplózás itt is követelmény.


Cisco IOS konfig:

aaa authentication login default group radius local
aaa authorization exec default group radius local
aaa accounting exec default start-stop group radius
radius-server 152.66.208.218 auth-port 1812 acct-port 1813 key xxxxx
radius-server timeout 10
radius-server retry 3


radiusd.conf

 ldap {
     server = "ldaps://ldap.sch.bme.hu"
     basedn = "dc=sch,dc=bme,dc=hu"
     port =636
     tls_mode = yes
     tls_cacertfile        = ca-cert path
     tls_certfile          = host-cert path
     tls_keyfile           = host-key path
     authtype = ldap
     ldap_connections_number = 20
     set_auth_type = yes
     timeout = 20
    }
 files {
      usersfile = ${confdir}/users
    }
 detail {
      detailfile = ${radacctdir}/%{Client-IP-Address}/detail-%Y%m%d
      detailperm = 0600
    }
 detail auth_log {
      detailfile = ${radacctdir}/%{Client-IP-Address}/auth-detail-%Y%m%d
      detailperm = 0600
    }
 acct_unique {
      key = "User-Name, Acct-Session-Id, NAS-IP-Address, Client-IP-Address, NAS-Port"
    }
 $INCLUDE  ${confdir}/clients.conf
 $INCLUDE  ${confdir}/postgresql.conf
 preprocess {
     huntgroups = ${confdir}/huntgroups
     hints = ${confdir}/hints
 }
 authorize {
      auth_log
      files
      ldap
   }
 authenticate {
      Auth-Type LDAP  {
              ldap
      }
   }
 preacct {
       preprocess
       acct_unique
   }
 accounting {
       detail
       sql
   }

clients.conf:

client 152.66.208.141 {
       secret = xxxx
       shortname = router-1
       nastype = cisco
}
client 152.66.208.146 {
       secret = xxxx
       shortname = router-1
       nastype = cisco
}
A többi hálózati eszközt, hasonló módon felsoroljuk.

huntgroups:

(group név, IP):
   ssh           Calling-Station-Id == 152.66.208.218
 a többi IP cím felsorolása, ahhonan engedni akarjuk az ssh kapcsolatot

postgresql.conf

A beállításoknál említett séma létrehozása, majd a fájl elején meg kell adni az SQL eléréséhez szükséges adatokat. Mást nem kell változtatni.


users:

 SSH normál felhasználó fájlból:
   felhasználó1  Auth-Type := Local, User-Password == "xxxxx", Simultaneous-Use := 10, Huntgroup-Name == "aclip"
                 Service-Type = Login,
                 cisco-avpair="shell:priv-lvl=0"
 SSH admin felhasználó fájlból:
   felhasználó2  Auth-Type := Local, User-Password == "xxxxx", Simultaneous-Use := 10, Huntgroup-Name == "aclip"
                 Service-Type = Login,
                 cisco-avpair="shell:priv-lvl=15"
 VPN felhasználó fájlból:
   felhasználó3  Auth-Type := Local, User-Password == "xxxxx", Simultaneous-Use := 2
                 Service-Type = Outbound-User
 VPN felhasználó LDAP-ból:
   DEFAULT       Simultaneous-Use := 100, Auth-Type := LDAP
                 Service-Type = Outbound-User

Logok:

fájl:

  • auth-detail-20071130
Packet-Type = Access-Request 
Fri Nov 30 02:09:00 2007
       User-Name = "guest"
       Reply-Message = "Password: "
       NAS-Port = 194
       NAS-Port-Id = "tty194"
       NAS-Port-Type = Virtual
       Calling-Station-Id = "152.66.208.218"
       NAS-IP-Address = 152.66.208.141
       Client-IP-Address = 152.66.208.141
       Huntgroup-Name = "ssh"
  • detail-20071130
Fri Nov 30 02:09:00 2007
       Acct-Session-Id = "0002F391"
       User-Name = "guest"
       Acct-Authentic = RADIUS
       Acct-Status-Type = Start
       NAS-Port = 194
       NAS-Port-Id = "tty194"
       NAS-Port-Type = Virtual
       Calling-Station-Id = "152.66.208.218"
       Service-Type = NAS-Prompt-User
       NAS-IP-Address = 152.66.208.141
       Acct-Delay-Time = 0
       Client-IP-Address = 152.66.208.141
       Timestamp = 1196384940
Fri Nov 30 02:17:05 2007
       Acct-Session-Id = "0002F391"
       User-Name = "guest"
       Acct-Authentic = RADIUS
       Acct-Terminate-Cause = User-Request
       Acct-Session-Time = 485
       Acct-Status-Type = Stop
       NAS-Port = 194
       NAS-Port-Id = "tty194"
       NAS-Port-Type = Virtual
       Calling-Station-Id = "152.66.208.218"
       Service-Type = NAS-Prompt-User
       NAS-IP-Address = 152.66.208.141
       Acct-Delay-Time = 0
       Client-IP-Address = 152.66.208.141
       Timestamp = 1196385425


--Farkas 2007. december 2., 22:00 (CET) (farkas_pont_jozsef_kukac_sch_pont_bme_pont_hu)

Személyes eszközök