FreeRADIUS

A Unix/Linux szerverek üzemeltetése wikiből
(Változatok közti eltérés)
(Példa beállítás)
(Beállítási példa)
 
(2 szerkesztő 57 közbeeső változata nincs mutatva)
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özponzi 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ábban 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-server architekurájú protokoll, ahol a kliens egy NAS (Network Access Server), ami küld egy kérést, és a server (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 hazsnálni. A TCP megbizható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 RFC2866]
   
  +
'''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>
   
Mível 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, ilynkor 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:'''
 
 
Az összetartozó csomagokat azonosítja.
 
Az összetartozó csomagokat azonosítja.
   
 
'''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 (NAS Authenticator).
  +
# A szerver a válaszcsomagban a következő algoritmust használja fel, hogy hitelesítse magát:
  +
#* Response Authenticator = MD5(Code,ID,Length,NASAuthenticator,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:
  +
#* Request 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: 114. sor:
 
| Type | Length | Value ...
 
| Type | Length | Value ...
 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
+
</pre>
   
 
'''Type:'''
 
'''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
 
   
Accountig 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
 
   
'''Lenght:'''
+
'''Length:'''
   
Atrributum teljes hosszát adja meg.
+
Atrribútum teljes hosszát adja meg.
   
 
'''Value:'''
 
'''Value:'''
Mérete lehet nulla is. Vagy több byte is.
+
  +
Nulla vagy több byte, az attribútum értékét tartalmazza.
   
 
Típusai:
 
Típusai:
* text 1-253 byte<br>
+
* text 1-253 byte (UTF8 kodolt string)<br>
 
* string 1-253 byte<br>
 
* string 1-253 byte<br>
 
* address 32 bit<br>
 
* address 32 bit<br>
190. sor: 133. sor:
 
* time 32 bit (unix time: 1970. január 1. UTC 00:00:00 óta eltelt másodpercek)
 
* time 32 bit (unix time: 1970. január 1. UTC 00:00:00 óta eltelt másodpercek)
   
  +
=== RADIUS hitelesítés lépései ===
   
'''RADIUS hitelesítés lépései:'''
+
[[Kép:radius2.gif||center]]
<center>
 
[[Kép:radius2.gif]]
 
</center>
 
   
'''Lépések:'''
+
# NAS - Access-Request
  +
#* Code=Access-Request
  +
#* NAS Authenticator=NAS által generált random szám
  +
#* Attribútumok: User-Name, User-Password
  +
#** Password titkosítva=MD5(NAS Authenticator,Secret) XOR Password
  +
# RADIUS - Access-Accept vagy Access-Reject
  +
#* Code= Access-Accept vagy Access-Reject
  +
#* Authenticator=MD5(Code,ID,Length,NAS Authenticator,Attributes,Secret)
  +
#* Attribútomok (pl.: jogok, protokoll, stb) (opcionális)
   
'''1.''' NAS - Access-Request
+
=== RADIUS naplózás lépései ===
* 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
+
# NAS - Accounting-Request
* Code= Access-Accept vagy Access-Reject
+
#* Code=Accounting-Request
* Authenticator=MD5(Code,ID,Length,NASAuth,Attributes,Secret)
+
#* Authenticator=MD5(Code,Identifier,Length,16 zero octets,request attributes,shared secret)
* Attributomok (pl.: jogok, protokoll, stb) (opcionális)
+
#* Attribútumok
   
+
# RADIUS - Accounting-Response
'''RADIUS naplózás lépései:'''
+
#* Code=Accounting-Response
+
#* Authenticator=MD5(Code,Identifier,Length,Request Authenticator,Secret)
'''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)
 
   
 
== Beállítás ==
 
== Beállítás ==
   
Forrásból telepített FreeRADIUS könyvtár szerkezette:
+
Forrásból telepített FreeRADIUS könyvtár alkönyvtárai:
bin
+
<pre>
etc
+
bin/
include
+
etc/
lib
+
include/
man
+
lib/
sbin
+
man/
share
+
sbin/
var
+
share/
+
var/
  +
</pre>
   
A konfig fájlok alapértelmezésben a etc/raddb könyvtárban vannak. A konfig fájlok listája:
+
A konfigurációs fájlok alapértelmezés szerint az <tt>etc/raddb</tt> könyvtárban vannak. A fájlok listája:
  +
<pre>
 
acct_users
 
acct_users
 
attrs
 
attrs
251. sor: 195. sor:
 
sqlippool.conf
 
sqlippool.conf
 
users
 
users
  +
</pre>
  +
  +
A listából is látszik, hogy mennyire moduláris a konfiguráció. A fő konfigurációs fájl a <tt>radiusd.conf</tt>; ez töltődik be alapból, és tölti be a szükséges többi konfigurációs fájlt.
   
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 felépítése:
   
Radiusd.conf fájlból részletek:
+
először általános beállítások
  +
pl.: IP cím, maximum kiszolgálható konkurens kliensek száma, stb.
  +
modulok megadása
  +
modulnév {
  +
modul beéllításai, paraméterei (opcionális)
  +
$INCLUDE "fájl" (opcionális)
  +
}
  +
AAA methodus (itt megadott modulokat sorban dolgozza fel, kivéve, ha Auth-Type van megadva a modulnál,
  +
mert akkor csak azt használja, és nem megy a következőhöz)
  +
authorize {
  +
modulnév
  +
.
  +
.
  +
}
  +
authenticate {
  +
modulnév
  +
.
  +
.
  +
}
  +
preacct {
  +
modulnév
  +
.
  +
.
  +
}
  +
accounting {
  +
modulnév
  +
.
  +
.
  +
}
  +
post-auth {
  +
modulnév
  +
.
  +
.
  +
}
  +
pre-proxy {
  +
modulnév
  +
.
  +
.
  +
}
  +
post-proxy {
  +
modulnév
  +
.
  +
.
  +
}
   
  +
'''Néhány <tt>radiusd.conf</tt>-részlet:'''
  +
<pre>
  +
#általános rész:
 
prefix = /usr/local/freeradius-1.1.7
 
prefix = /usr/local/freeradius-1.1.7
 
exec_prefix = ${prefix}
 
exec_prefix = ${prefix}
269. sor: 219. sor:
 
pidfile = ${run_dir}/radiusd.pid
 
pidfile = ${run_dir}/radiusd.pid
   
Amivel futni fog a RADIUS szerver.
+
#ilyen userként és groupként fog futni:
 
user = nobody
 
user = nobody
 
group = nobody
 
group = nobody
   
IP címe a szervernek:
+
#melyik IP-n figyeljen:
bind_address = 152.66.208.218
+
bind_address = 152.66.x.y
   
Modulok beállítása következik.
+
#proxy: ("igen",ha használni akarjuk a RADIUS proxy szolgáltatását, különben "nem")
+
#Ha proxy szolgáltatást választjuk, akkor a AAA methodusnál a RADIUS szerverünk, csak "átjátszóként" fog viselkedni,
Proxy:
+
#és egy másik RADIUS-hoz továbbítja a NAS-tól kapott csomagokat, és fordítva is.)
 
proxy_requests = yes
 
proxy_requests = yes
 
$INCLUDE ${confdir}/proxy.conf
 
$INCLUDE ${confdir}/proxy.conf
   
kliensek:
+
#kliensek (NAS-ok):
 
$INCLUDE ${confdir}/clients.conf
 
$INCLUDE ${confdir}/clients.conf
   
Unix /etc/passwd alapú hitelesítés:
+
#Modulok megadása, beállítása:
  +
#Unix /etc/passwd alapú hitelesítés:
 
unix {
 
unix {
 
passwd = /etc/passwd
 
passwd = /etc/passwd
 
}
 
}
   
AAA metodus előtt elvégzett műveletek pl.: IP cím ellenörzés
+
#AAA metódus előtt elvégzett műveletek pl.: IP cím-ellenőrzés
 
preprocess {
 
preprocess {
 
huntgroups = ${confdir}/huntgroups
 
huntgroups = ${confdir}/huntgroups
296. sor: 246. sor:
 
}
 
}
   
LDAP:
+
#LDAP:
 
ldap {
 
ldap {
 
server = "ldap.your.domain"
 
server = "ldap.your.domain"
313. sor: 263. sor:
 
}
 
}
   
felhasználók megadása:
+
#felhasználók megadása:
 
files {
 
files {
 
usersfile = ${confdir}/users
 
usersfile = ${confdir}/users
320. sor: 270. sor:
 
}
 
}
   
Naplózás:
+
#Naplózás:
 
detail {
 
detail {
 
detailfile = ${radacctdir}/%{Client-IP-Address}/detail-%Y%m%d
 
detailfile = ${radacctdir}/%{Client-IP-Address}/detail-%Y%m%d
350. sor: 300. sor:
 
'%{reply:Packet-Type}', '%S');"
 
'%{reply:Packet-Type}', '%S');"
 
}
 
}
+
#AAA methodus
A már megismert AAA metodus kerul megint elő. Egyenként tudjuk megadni, hogy melyik modullt akarjuk használni.
 
Az Auth-Type beállításnál csak az ott megadott modullt használja, és nem probálja meg a többi felsorolt modullt használni.
 
 
 
authorize {
 
authorize {
file
+
preprocess
  +
files
 
ldap
 
ldap
 
eap
 
eap
387. sor: 337. sor:
 
post_proxy_log
 
post_proxy_log
 
}
 
}
  +
</pre>
   
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"
+
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.
   
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égprobálkozik hitelsíteni a RADIUS.
+
A authorize-nál megadott modulok segítségével a RADIUS eldönti, hogy engedélyezi-e a felhasználó hitelesítését.
  +
A preprocess (előfeladatok) a hints, huntgroup és a realm modulok alapján végez ellenőrzést.
   
A pre-proxy és post-proxy a RADIUS-Proxy előtt és után elvégzett modulokat lehet megadni.
+
A preacct a naplózás előtt elvégzendő műveletek
  +
-egyedi kulcsot generál a felhasználónak, amit a sql naplózásnál használnak acct_unique = "User-Name, Acct-Session-Id, NAS-IP-Address, Client-IP-Address, NAS-Port"
  +
-preprocess: a naplózás előtt elvégezendő műveleteket adhatunk meg pl.: IP cím ellenörzés
  +
  +
A post-auth az eredményesen hitelesített felhasználók utólagos műveleteit tartalmazza pl.: IPcím-osztás. Vagy a nem eredményesen hitelesített felhasználókat a "Post-Auth-Type REJECT"-nél megadott modullal még megpróbálja hitelsíteni a RADIUS.
  +
  +
A pre-proxynál és post-proxynál a RADIUS-Proxy előtt és után elvégzett modulokat lehet megadni.
   
Azonosításnál mindenképpen használt modullok: clients, realms, huntgroups, users.
 
   
 
'''clients'''
 
'''clients'''
400. sor: 350. sor:
 
A NAS beállításait lehet megadni: IP, secret, nastype.
 
A NAS beállításait lehet megadni: IP, secret, nastype.
   
Támogatott nastype:
+
Támogatott NAS-típusok:
cisco
+
* cisco
computone
+
* computone
livingston
+
* livingston
max40xx
+
* max40xx
multitech
+
* multitech
netserver
+
* netserver
pathras
+
* pathras
patton
+
* patton
portslave
+
* portslave
tc
+
* tc
usrhiper
+
* usrhiper
other
+
* other
  +
  +
<pre>
  +
általános forma:
  +
client IP {
  +
secret = key
  +
shortname = megnevezés
  +
nastype = NAS type
  +
}
  +
</pre>
   
 
'''realms'''
 
'''realms'''
   
 
A felhasználónév@realm formátumban megadott felhasználóneveknél használatos.
 
A felhasználónév@realm formátumban megadott felhasználóneveknél használatos.
  +
Felhasználói csoportokat hozz hatunk létre, és különböző jogosultságokat, beállításokat adhatunk a csoportoknak.
   
 
'''huntgroups'''
 
'''huntgroups'''
   
A NAS-hoz kapcsolodó felhasználók "paraméreit" adhatjuk meg pl.: IP
+
A NAS-kat csoportokba szervezhetjük, és a kapcsolatot kezdeményezhető IP címeket, vagy felhazsnálóneveket adhatjuk meg.
  +
Itt tudjuk szabályozni, hogy milyen felhasználónévvel és IP címmel, milyen NAS-okhoz lehet kapcsolodni.
  +
Általános forma:
  +
<pre>
  +
csoportnév NAS-IP-Address == IP1, Calling-Station-Id == IP2
  +
User-Name = felhasznaélónév1, User-Name = felhasználónév1, ...
  +
</pre>
   
 
'''users'''
 
'''users'''
   
Itt lehet összefogni, az előbb tárgyalt hármast (clients, realm, huntgroups).
+
A felhasználók hitelesítési beállításait adhatjuk meg, ezenkívül a felhasználónévhez tartozó jelszót is megadhatjuk.
   
'''Egyébb modullok'''
+
A kezdhetjük a felhasználónévvel, vagy DEFAULT kulcsszó megadással. A DEFAULT joker bejegyzésként viselkedik, és minden felhasználónévre illesszkedik.
   
A modullok beállításait, ha a radiusd.conf-ban nem lehet megtenni, akkor a modullal azonos nevű fájlban tudjuk megtenni.
+
Általános forma:
  +
  +
Felhasználónév (DEFAULT mindenre illeszkedik) utána az Attributtumokat kell megadni veszővel elválasztva.
  +
  +
Az attributumok megadásánál a következő [http://wiki.freeradius.org/Operators operátorok] használhatók: =,==.:=.+=,<,>,<=,>=,!=,=~,=*,!~,!*
  +
  +
A FreeRADIUS-ban használt attributumok: [http://www.freeradius.org/rfc/attributes.html attributes]
  +
  +
  +
{| border="1"
  +
|+ Leggyakrabban használt attributumok
  +
|-
  +
!attributtum név !!leírás !!érték !!példa
  +
|-
  +
|Auth-Type || authentikáció típusa || Accept, Reject, Local, EAP || Auth-Type == Local
  +
|-
  +
|User-Password || jelszó megadása || sztring || User-Password == "jelszo"
  +
|-
  +
|Service-Type || szolgáltatás típusa || Login, Outbound-User, Framed-User || Service-Type == Login
  +
|-
  +
|Huntgroup-Name || csoport megadás || sztrinh || Huntgroup-Name == "csoport név"
  +
|-
  +
|Simultaneous-Use || max kunkurens kapcsolatok szama || integer || Simultaneous-Use :=5
  +
|-
  +
|}
   
 
Példa:
 
Példa:
  +
<pre>
  +
JohnDoe Auth-Type := Local, User-Password == "hello"
  +
</pre>
  +
  +
'''Egyéb modulok'''
  +
  +
A modulok beállításait, ha a radiusd.conf-ban nem lehet, vagy nem akarjuk megtenni, akkor általábban a modullal azonos nevű fájlban tudjuk megtenni. Ilyenkor a fájlt includolni kell a radiusd.conf-ban.
  +
  +
Példa:
  +
$INCLUDE ${confdir}/fájlnév
  +
  +
 
'''SQL:'''
 
'''SQL:'''
   
A radiusd.confban meg kell adni, hogy milyen sql-t szeretne használni. Támogatott: PostgreSQL, MySQL, MSSQL, Oracle.
+
A radiusd.conf-ban meg kell adni, hogy milyen sql-t szeretnénk használni. Támogatott: PostgreSQL, MySQL, MSSQL, Oracle.
   
Példaul, ha postgresql-t szeretnénk használni, akkor a postgresql.conf-ot kell betölteni.
+
Például, ha postgresql-t szeretnénk használni, akkor a postgresql.conf-ba az alábbi sort kell megadni:
  +
$INCLUDE ${confdir}/postgresql.conf
   
 
A fájlban kell megadni a postgreSQL szerver beállításait pl.: hostnév, felhasználó, jelszó, adatbázis, stb..
 
A fájlban kell megadni a postgreSQL szerver beállításait pl.: hostnév, felhasználó, jelszó, adatbázis, stb..
441. sor: 404. sor:
 
Az adatbázis séma elérési útja a fájl elején található pl.: doc/examples/postgresql.sql
 
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:
+
A postgresql.conf az alábbi módon épül fel:
   
  +
<pre>
 
sql {
 
sql {
  +
 
driver = "rlm_sql_postgresql"
 
driver = "rlm_sql_postgresql"
 
server = "localhost"
 
server = "localhost"
 
login = "postgres"
 
login = "postgres"
password = ""
+
password = "diddgozs!!"
 
radius_db = "radius"
 
radius_db = "radius"
[...]
+
   
Majd az AAA methodnál megismert események SQL műveletei vannak:
+
</pre>
   
Egy kapcsolat felépítésének a naplózása:
+
Majd az AAA metódusnál megismert események SQL műveletei vannak:
  +
  +
Egy kapcsolat felépítésének a naplózása:
  +
<pre>
 
accounting_start_query = "INSERT into ${acct_table1} \
 
accounting_start_query = "INSERT into ${acct_table1} \
 
AcctSessionId, AcctUniqueId, UserName, Realm, NASIPAddress, NASPortId, NASPortType, AcctStartTime, AcctAuthentic, \
 
AcctSessionId, AcctUniqueId, UserName, Realm, NASIPAddress, NASPortId, NASPortType, AcctStartTime, AcctAuthentic, \
461. sor: 426. sor:
 
'%{Called-Station-Id}', '%{Calling-Station-Id}', '%{Service-Type}', '%{Framed-Protocol}', \
 
'%{Called-Station-Id}', '%{Calling-Station-Id}', '%{Service-Type}', '%{Framed-Protocol}', \
 
NULLIF('%{Framed-IP-Address}', '')::inet, 0, '%{X-Ascend-Session-Svr-Key}')"
 
NULLIF('%{Framed-IP-Address}', '')::inet, 0, '%{X-Ascend-Session-Svr-Key}')"
  +
</pre>
   
== Példa beállítás ==
+
Eyg sor a PostgreSQL-ból:
  +
<pre>
  +
radacctid | acctsessionid | acctuniqueid | username | realm | nasipaddress | nasportid | nasporttype | acctstarttime | acctstoptime | acctsessiontime | acctauthentic | connectinfo_start | connectinfo_stop | acctinputoctets | acctoutputoctets | calledstationid | callingstationid | acctterminatecause | servicetype | framedprotocol | framedipaddress | acctstartdelay | acctstopdelay
  +
-----------+------------------+--------------+----------+-------+----------------+-----------+-------------+------------------------+------------------------+-----------------+---------------+-------------------+------------------+-----------------+------------------+-----------------+------------------+--------------------+-----------------+----------------+-----------------+----------------+---------------
  +
1 | 0400000000000055 | | farki | | 152.66.209.185 | 0 | Virtual | 2006-07-29 14:55:59+02 | 2006-07-29 14:56:01+02 | 1 | RADIUS | | | 0 | 0 | | 152.66.213.10 | User-Request | NAS-Prompt-User | | | 0 | 0
  +
(1 sor)
  +
</pre>
  +
  +
== Beállítási példa ==
   
 
A példában a következőket valósítjuk meg:
 
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.
+
* Adott
+
** néhány Cisco hálózati eszköz (switch, router, VPN-koncentrátor)
  +
** néhány gép, amikről ezeket szeretnék SSH-n keresztül konfigurálni.
  +
* A felhasználónév-jelszó párt fájlban tároljuk.
  +
* A kapcsolatokat naplózni szeretnénk fájlba és sql-be is.
  +
* A VPN-koncetrá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:
 
Cisco IOS konfig:
   
  +
<pre>
 
aaa authentication login default group radius local
 
aaa authentication login default group radius local
 
aaa authorization exec default group radius local
 
aaa authorization exec default group radius local
 
aaa accounting exec default start-stop group radius
 
aaa accounting exec default start-stop group radius
radius-server 152.66.208.218 auth-port 1812 acct-port 1813 key xxxxx
+
radius-server 152.66.x.y auth-port 1812 acct-port 1813 key neduddmi!
 
radius-server timeout 10
 
radius-server timeout 10
 
radius-server retry 3
 
radius-server retry 3
  +
</pre>
   
  +
radiusd.conf:
   
radiusd.conf
+
<pre>
+
#ldap szerver beállítása
 
ldap {
 
ldap {
 
server = "ldaps://ldap.sch.bme.hu"
 
server = "ldaps://ldap.sch.bme.hu"
494. sor: 463. sor:
 
timeout = 20
 
timeout = 20
 
}
 
}
  +
#felhasználónév-jelszó pár
 
files {
 
files {
 
usersfile = ${confdir}/users
 
usersfile = ${confdir}/users
 
}
 
}
  +
#log (fájl)
 
detail {
 
detail {
 
detailfile = ${radacctdir}/%{Client-IP-Address}/detail-%Y%m%d
 
detailfile = ${radacctdir}/%{Client-IP-Address}/detail-%Y%m%d
515. sor: 486. sor:
 
}
 
}
 
authorize {
 
authorize {
  +
preprocess
 
auth_log
 
auth_log
 
files
 
files
532. sor: 504. sor:
 
sql
 
sql
 
}
 
}
  +
</pre>
   
 
clients.conf:
 
clients.conf:
+
#NAS beállításai
  +
<pre>
 
client 152.66.208.141 {
 
client 152.66.208.141 {
secret = xxxx
+
secret = neduddmi!
 
shortname = router-1
 
shortname = router-1
 
nastype = cisco
 
nastype = cisco
 
}
 
}
 
client 152.66.208.146 {
 
client 152.66.208.146 {
secret = xxxx
+
secret = neduddmi!
 
shortname = router-1
 
shortname = router-1
 
nastype = cisco
 
nastype = cisco
 
}
 
}
A többi hálózati eszköz hasonló módon felsorolva.
+
</pre>
  +
  +
A többi hálózati eszközt hasonló módon felsoroljuk.
   
 
huntgroups:
 
huntgroups:
   
  +
<pre>
 
(group név, IP):
 
(group név, IP):
aclip Calling-Station-Id == 152.66.208.218
+
ssh Calling-Station-Id == 152.66.208.218
  +
# a többi IP cím felsorolása, ahhonan engedni akarjuk az ssh kapcsolatot
  +
</pre>
  +
  +
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:'''
  +
  +
<pre>
  +
felhasználónév1 Auth-Type := Local, User-Password == "xxxxx", Simultaneous-Use := 10, Huntgroup-Name == "aclip"
  +
Service-Type = Login,
  +
cisco-avpair="shell:priv-lvl=0"
  +
</pre>
  +
  +
'''SSH admin felhasználó fájlból:'''
  +
  +
<pre>
  +
felhasználónév2 Auth-Type := Local, User-Password == "xxxxx", Simultaneous-Use := 10, Huntgroup-Name == "aclip"
  +
Service-Type = Login,
  +
cisco-avpair="shell:priv-lvl=15"
  +
</pre>
  +
  +
'''VPN felhasználó fájlból:'''
  +
<pre>
  +
felhasználónév3 Auth-Type := Local, User-Password == "xxxxx", Simultaneous-Use := 2
  +
Service-Type = Outbound-User
  +
</pre>
  +
  +
'''VPN felhasználó LDAP-ból:'''
  +
<pre>
  +
DEFAULT Simultaneous-Use := 100, Auth-Type := LDAP
  +
Service-Type = Outbound-User
  +
</pre>
  +
'''Logok:'''
  +
  +
'''fájl:'''
  +
* auth-detail-20071130:
  +
<pre>
  +
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"
  +
</pre>
  +
* detail-20071130:
  +
<pre>
  +
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
  +
</pre>
  +
  +
--[[User:Farkas|Farkas]] (farkas_pont_jozsef_kukac_sch_pont_bme_pont_hu)

A lap jelenlegi, 2008. január 30., 00:45-kori változata

Tartalomjegyzék

[szerkesztés] 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

[szerkesztés] 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.).

[szerkesztés] 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.


[szerkesztés] 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 (NAS Authenticator).
  2. A szerver a válaszcsomagban a következő algoritmust használja fel, hogy hitelesítse magát:
    • Response Authenticator = MD5(Code,ID,Length,NASAuthenticator,Attributes,Secret).

Acc esetén:

  1. A kliens (NAS) a következő algoritmus szerint generálja:
    • Request 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:


Length:

Atrribútum teljes hosszát adja meg.

Value:

Nulla vagy több byte, az attribútum értékét tartalmazza.

Típusai:

  • text 1-253 byte (UTF8 kodolt string)
  • 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)

[szerkesztés] 4.1 RADIUS hitelesítés lépései

  1. NAS - Access-Request
    • Code=Access-Request
    • NAS Authenticator=NAS által generált random szám
    • Attribútumok: User-Name, User-Password
      • Password titkosítva=MD5(NAS Authenticator,Secret) XOR Password
  2. RADIUS - Access-Accept vagy Access-Reject
    • Code= Access-Accept vagy Access-Reject
    • Authenticator=MD5(Code,ID,Length,NAS Authenticator,Attributes,Secret)
    • Attribútomok (pl.: jogok, protokoll, stb) (opcionális)

[szerkesztés] 4.2 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)
    • Attribútumok
  1. RADIUS - Accounting-Response
    • Code=Accounting-Response
    • Authenticator=MD5(Code,Identifier,Length,Request Authenticator,Secret)

[szerkesztés] 5 Beállítás

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

 bin/
 etc/
 include/
 lib/
 man/
 sbin/
 share/
 var/

A konfigurációs fájlok alapértelmezés szerint az etc/raddb könyvtárban vannak. A 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ó. 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 felépítése:

   először általános beállítások
        pl.: IP cím, maximum kiszolgálható konkurens kliensek száma, stb.
   modulok megadása
        modulnév {
             modul beéllításai, paraméterei (opcionális)
             $INCLUDE "fájl"  (opcionális)
        }
   AAA methodus (itt megadott modulokat sorban dolgozza fel, kivéve, ha Auth-Type van megadva a modulnál, 
                 mert akkor csak azt használja, és nem megy a következőhöz)
         authorize {
            modulnév
            . 
            .
         }
         authenticate {
            modulnév
            . 
            .
         }
         preacct {
            modulnév
            . 
            .
         }
         accounting {
            modulnév
            . 
            .
         }
         post-auth {
            modulnév
            . 
            .
         }       
         pre-proxy {
            modulnév
            . 
            .
         }
         post-proxy {
            modulnév
            . 
            .
         }

Néhány radiusd.conf-részlet:

#általános rész:
 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

#ilyen userként és groupként fog futni:
 user = nobody
 group = nobody

#melyik IP-n figyeljen:
 bind_address = 152.66.x.y

#proxy: ("igen",ha használni akarjuk a RADIUS proxy szolgáltatását, különben "nem")
#Ha proxy szolgáltatást választjuk, akkor a AAA methodusnál a RADIUS szerverünk, csak "átjátszóként" fog viselkedni,
#és egy másik RADIUS-hoz továbbítja a NAS-tól kapott csomagokat, és fordítva is.)
 proxy_requests  = yes
 $INCLUDE  ${confdir}/proxy.conf

#kliensek (NAS-ok):
 $INCLUDE  ${confdir}/clients.conf

#Modulok megadása, beállítása:
#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');"
       }
#AAA methodus
 authorize {
     preprocess
     files
     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
    }

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.

A authorize-nál megadott modulok segítségével a RADIUS eldönti, hogy engedélyezi-e a felhasználó hitelesítését. A preprocess (előfeladatok) a hints, huntgroup és a realm modulok alapján végez ellenőrzést.

A preacct a naplózás előtt elvégzendő műveletek -egyedi kulcsot generál a felhasználónak, amit a sql naplózásnál használnak acct_unique = "User-Name, Acct-Session-Id, NAS-IP-Address, Client-IP-Address, NAS-Port" -preprocess: a naplózás előtt elvégezendő műveleteket adhatunk meg pl.: IP cím ellenörzés

A post-auth az eredményesen hitelesített felhasználók utólagos műveleteit tartalmazza pl.: IPcím-osztás. Vagy a nem eredményesen hitelesített felhasználókat a "Post-Auth-Type REJECT"-nél megadott modullal még megpróbálja hitelsíteni a RADIUS.

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


clients

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

Támogatott NAS-típusok:

  • cisco
  • computone
  • livingston
  • max40xx
  • multitech
  • netserver
  • pathras
  • patton
  • portslave
  • tc
  • usrhiper
  • other
általános forma:
client IP {
        secret = key
        shortname = megnevezés
        nastype = NAS type
}

realms

A felhasználónév@realm formátumban megadott felhasználóneveknél használatos. Felhasználói csoportokat hozz hatunk létre, és különböző jogosultságokat, beállításokat adhatunk a csoportoknak.

huntgroups

A NAS-kat csoportokba szervezhetjük, és a kapcsolatot kezdeményezhető IP címeket, vagy felhazsnálóneveket adhatjuk meg. Itt tudjuk szabályozni, hogy milyen felhasználónévvel és IP címmel, milyen NAS-okhoz lehet kapcsolodni. Általános forma:

csoportnév  NAS-IP-Address == IP1, Calling-Station-Id == IP2
            User-Name = felhasznaélónév1,  User-Name = felhasználónév1, ...

users

A felhasználók hitelesítési beállításait adhatjuk meg, ezenkívül a felhasználónévhez tartozó jelszót is megadhatjuk.

A kezdhetjük a felhasználónévvel, vagy DEFAULT kulcsszó megadással. A DEFAULT joker bejegyzésként viselkedik, és minden felhasználónévre illesszkedik.

Általános forma:

Felhasználónév (DEFAULT mindenre illeszkedik) utána az Attributtumokat kell megadni veszővel elválasztva.

Az attributumok megadásánál a következő operátorok használhatók: =,==.:=.+=,<,>,<=,>=,!=,=~,=*,!~,!*

A FreeRADIUS-ban használt attributumok: attributes


Leggyakrabban használt attributumok
attributtum név leírás érték példa
Auth-Type authentikáció típusa Accept, Reject, Local, EAP Auth-Type == Local
User-Password jelszó megadása sztring User-Password == "jelszo"
Service-Type szolgáltatás típusa Login, Outbound-User, Framed-User Service-Type == Login
Huntgroup-Name csoport megadás sztrinh Huntgroup-Name == "csoport név"
Simultaneous-Use max kunkurens kapcsolatok szama integer Simultaneous-Use :=5

Példa:

JohnDoe     Auth-Type := Local, User-Password == "hello"

Egyéb modulok

A modulok beállításait, ha a radiusd.conf-ban nem lehet, vagy nem akarjuk megtenni, akkor általábban a modullal azonos nevű fájlban tudjuk megtenni. Ilyenkor a fájlt includolni kell a radiusd.conf-ban.

Példa:

 $INCLUDE  ${confdir}/fájlnév


SQL:

A radiusd.conf-ban meg kell adni, hogy milyen sql-t szeretnénk használni. Támogatott: PostgreSQL, MySQL, MSSQL, Oracle.

Például, ha postgresql-t szeretnénk használni, akkor a postgresql.conf-ba az alábbi sort kell megadni:

$INCLUDE  ${confdir}/postgresql.conf

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

A postgresql.conf az alábbi módon épül fel:

  sql {
        
        driver = "rlm_sql_postgresql"
        server = "localhost"
        login = "postgres"
        password = "diddgozs!!"
        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}')"

Eyg sor a PostgreSQL-ból:

 radacctid |  acctsessionid   | acctuniqueid | username | realm |  nasipaddress  | nasportid | nasporttype |     acctstarttime      |      acctstoptime      | acctsessiontime | acctauthentic | connectinfo_start | connectinfo_stop | acctinputoctets | acctoutputoctets | calledstationid | callingstationid | acctterminatecause |   servicetype   | framedprotocol | framedipaddress | acctstartdelay | acctstopdelay
-----------+------------------+--------------+----------+-------+----------------+-----------+-------------+------------------------+------------------------+-----------------+---------------+-------------------+------------------+-----------------+------------------+-----------------+------------------+--------------------+-----------------+----------------+-----------------+----------------+---------------
         1 | 0400000000000055 |              | farki    |       | 152.66.209.185 |         0 | Virtual     | 2006-07-29 14:55:59+02 | 2006-07-29 14:56:01+02 |               1 | RADIUS        |                   |                  |               0 |                0 |                 | 152.66.213.10    | User-Request       | NAS-Prompt-User |                |                 |              0 |             0
(1 sor)

[szerkesztés] 6 Beállítási példa

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-koncentrátor)
    • néhány gép, amikről ezeket szeretnék SSH-n keresztül konfigurálni.
  • A felhasználónév-jelszó párt fájlban tároljuk.
  • A kapcsolatokat naplózni szeretnénk fájlba és sql-be is.
  • A VPN-koncetrá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.x.y auth-port 1812 acct-port 1813 key neduddmi!
 radius-server timeout 10
 radius-server retry 3

radiusd.conf:

  #ldap szerver beállítása
  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
     }
  #felhasználónév-jelszó pár
  files {
       usersfile = ${confdir}/users
     }
  #log (fájl)
  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 {
       preprocess
       auth_log
       files
       ldap
    }
  authenticate {
       Auth-Type LDAP  {
               ldap
       }
    }
  preacct {
        preprocess
        acct_unique
    }
  accounting {
        detail
        sql
    }

clients.conf:

  1. NAS beállításai
 client 152.66.208.141 {
        secret = neduddmi!
        shortname = router-1
        nastype = cisco
 }
 client 152.66.208.146 {
        secret = neduddmi!
        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ónév1  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ónév2  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ónév3  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 (farkas_pont_jozsef_kukac_sch_pont_bme_pont_hu)

Személyes eszközök