FreeRADIUS

A Unix/Linux szerverek üzemeltetése wikiből
(Változatok közti eltérés)
(RADIUS protokoll)
(Beállítási példa)
 
(2 szerkesztő 90 közbeeső változata nincs mutatva)
1. sor: 1. sor:
 
== Általános bevezető ==
 
== Általános bevezető ==
<br>
+
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.<br>
+
FreeRADIUS hivatalos weboldala: http://www.freeradius.org/<br>
+
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:
Jelenlegi stabil verzió: 1.1.7 (2007.07.25)<br>
+
* authentication (hitelesítés),
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.<br>
+
* authorization (engedélyezés),
A FreeRADIUS által használt felhasználói adatok elérése:
+
* 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/ 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
 
* 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)
<br>
+
Hitelesítési protokollok:
+
Támogatott hitelesítési protokollok:
  +
 
* PAP
 
* PAP
 
* CHAP
 
* CHAP
 
* MSCHAP (v1, v2)
 
* MSCHAP (v1, v2)
 
* SIP Digest (Cisco VoIP)
 
* SIP Digest (Cisco VoIP)
* EAP <br><br>
+
* 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é?<br>
+
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.<br>
+
Vagy ki akarjuk használni a RADIUS adta lehetőségeket pl.: naplózás.
+
* Biztonsági megfontolásból.
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.).<br>
+
** 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.).
   
 
== 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). <br>
+
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. <br>
+
  +
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.
  +
  +
  +
== 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:
  +
* [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||center]]
   
== RADIUS protokoll ==
+
[[Kép:Client.gif||center]]
   
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.<br>
+
A RADIUS csomagformátuma:
RFC (2000): [http://www.ietf.org/rfc/rfc2865.txt?number=2865 2865], [http://www.ietf.org/rfc/rfc2866.txt?number=2866 2866]<br>
 
   
<b>Protokoll futam:</b><br>
+
<pre>
<center>
 
<br><br>
 
[[Kép:radius.gif]]
 
<br><br>
 
[[Kép:Client.gif]]
 
</center>
 
<br>
 
<br>
 
<b>RADIUS adat formátuma (mind a két esetben):</b>
 
 
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
52. sor: 52. sor:
 
| Attributes ...
 
| Attributes ...
 
+-+-+-+-+-+-+-+-+-+-+-+-+-
 
+-+-+-+-+-+-+-+-+-+-+-+-+-
  +
</pre>
   
<br>
+
'''RADIUS Codes (decimal) értékei:'''
<b>RADIUS Codes (decimal) értékei:</b><br>
+
<pre>
 
1 Access-Request
 
1 Access-Request
 
2 Access-Accept
 
2 Access-Accept
64. sor: 65. sor:
 
13 Status-Client (experimental)
 
13 Status-Client (experimental)
 
255 Reserved
 
255 Reserved
<br><br>
+
</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.<br>
 
<b>Identifier:</b>
 
Az összetartozó csomagokat azonosítja.<br>
 
   
<b>Length:</b>
+
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.
Az egész csomag méretét adja meg. A minimum méret 20, míg a maximális 4096 byte.
 
   
<b>Authenticator:</b>
+
'''Identifier:'''
A NAS és a RADIUS rendelkezik egy közös kulccsal (secret vagy key).
+
Az összetartozó csomagokat azonosítja.
Auth esetben:<br>
 
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).<br>
 
Acc esetében:<br>
 
A kliens (NAS) a következő algoritmus szerint generálja:<br>
 
Authenticator=MD5(Code,Identifier,Length,16 zero octets,request attributes,shared secret)<br>
 
A RADIUS a válasz csomagban Authenticator=MD5(Code,Identifier,Length,Request Authenticator,Secret)<br>
 
   
<br>
+
'''Length:'''
<b>Attributum:</b>
+
Az egész csomag méretét adja meg. A minimális méret 20, míg a maximális 4096 byte.
felépítése:
+
  +
'''Authenticator:'''
  +
A NAS és a RADIUS rendelkezik egy közös kulccsal ("secret" vagy "key").
  +
  +
Auth esetén:
  +
  +
# 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).
  +
  +
Acc esetén:
  +
  +
# 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)
  +
  +
'''Attribútum felépítése:'''
  +
<pre>
 
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
79. sor: 80. sor:
 
| Type | Length | Value ...
 
| Type | Length | Value ...
 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
<br>
+
</pre>
   
<b>Type:</b>
+
'''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
+
'''Length:'''
41 Acct-Delay-Time
+
42 Acct-Input-Octets
+
Atrribútum teljes hosszát adja meg.
43 Acct-Output-Octets
+
44 Acct-Session-Id
+
'''Value:'''
45 Acct-Authentic
+
46 Acct-Session-Time
+
Nulla vagy több byte, az attribútum értékét tartalmazza.
47 Acct-Input-Packets
+
48 Acct-Output-Packets
+
Típusai:
49 Acct-Terminate-Cause
+
* text 1-253 byte (UTF8 kodolt string)<br>
50 Acct-Multi-Session-Id
+
* string 1-253 byte<br>
51 Acct-Link-Count
 
<br>
 
<b>Lenght:</b><br>
 
Atrributum teljes hosszát adja meg.<br>
 
<b>Value:</b><br>
 
Mérete lehet nulla is. Vagy több byte is.<br>
 
Típusai:<br>
 
* text 1-253 byte<br>
 
* string 1*253 byte<br>
 
 
* address 32 bit<br>
 
* address 32 bit<br>
 
* integer 32 bit<br>
 
* integer 32 bit<br>
* time 32 bit (unix time: 1970, január 1. UTC 00:00:00 óta eltelt másodpercek)<br>
+
* time 32 bit (unix time: 1970. január 1. UTC 00:00:00 óta eltelt másodpercek)
<br>
 
<br>
 
<b>RADIUS hitelesítés lépései:</b><br>
 
<center>
 
[[Kép:radius2.gif]]
 
</center>
 
   
<b>Lépések:<br>
+
=== RADIUS hitelesítés lépései ===
1.</b> 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
 
<br>
 
<b>2.</b> 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)
 
<br><br>
 
<b>RADIUS naplózás lépései:<br>
 
1.</b>NAS - Accounting-Request
 
* Code=Accounting-Request
 
* Authenticator=MD5(Code,Identifier,Length,16 zero octets,request attributes,shared secret)
 
* Attributumok
 
<b>2.</b> RADIUS - Accounting-Response
 
* Code=Accounting-Response
 
* Authenticator=MD5(Code,Identifier,Length,Request Authenticator,Secret)
 
<br>
 
   
== Beállítás ==
+
[[Kép:radius2.gif||center]]
   
Forrásból telepített FreeRADIUS könyvtár szerkezette:
+
# NAS - Access-Request
bin
+
#* Code=Access-Request
etc
+
#* NAS Authenticator=NAS által generált random szám
include
+
#* Attribútumok: User-Name, User-Password
lib
+
#** Password titkosítva=MD5(NAS Authenticator,Secret) XOR Password
man
+
# RADIUS - Access-Accept vagy Access-Reject
sbin
+
#* Code= Access-Accept vagy Access-Reject
share
+
#* Authenticator=MD5(Code,ID,Length,NAS Authenticator,Attributes,Secret)
var
+
#* Attribútomok (pl.: jogok, protokoll, stb) (opcionális)
   
  +
=== RADIUS naplózás lépései ===
   
A konfig fájlok alapértelmezésben a etc/raddb könyvtárban vannak. A konfig fájlok listája:
+
# NAS - Accounting-Request
  +
#* Code=Accounting-Request
  +
#* Authenticator=MD5(Code,Identifier,Length,16 zero octets,request attributes,shared secret)
  +
#* Attribútumok
  +
  +
# RADIUS - Accounting-Response
  +
#* Code=Accounting-Response
  +
#* Authenticator=MD5(Code,Identifier,Length,Request Authenticator,Secret)
  +
  +
== Beállítás ==
  +
  +
Forrásból telepített FreeRADIUS könyvtár alkönyvtárai:
  +
<pre>
  +
bin/
  +
etc/
  +
include/
  +
lib/
  +
man/
  +
sbin/
  +
share/
  +
var/
  +
</pre>
  +
  +
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
146. sor: 148. 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.
  +
  +
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 <tt>radiusd.conf</tt>-részlet:'''
  +
<pre>
  +
#á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
  +
}
  +
</pre>
  +
  +
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
  +
  +
<pre>
  +
általános forma:
  +
client IP {
  +
secret = key
  +
shortname = megnevezés
  +
nastype = NAS type
  +
}
  +
</pre>
  +
  +
'''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:
  +
<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'''
  +
  +
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ő [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:
  +
<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:'''
  +
  +
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:
  +
  +
<pre>
  +
sql {
  +
  +
driver = "rlm_sql_postgresql"
  +
server = "localhost"
  +
login = "postgres"
  +
password = "diddgozs!!"
  +
radius_db = "radius"
  +
  +
  +
</pre>
  +
  +
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} \
  +
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}')"
  +
</pre>
  +
  +
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:
  +
  +
* 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:
  +
  +
<pre>
  +
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
  +
</pre>
  +
  +
radiusd.conf:
  +
  +
<pre>
  +
#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
  +
}
  +
</pre>
  +
  +
clients.conf:
  +
#NAS beállításai
  +
<pre>
  +
client 152.66.208.141 {
  +
secret = neduddmi!
  +
shortname = router-1
  +
nastype = cisco
  +
}
  +
client 152.66.208.146 {
  +
secret = neduddmi!
  +
shortname = router-1
  +
nastype = cisco
  +
}
  +
</pre>
  +
  +
A többi hálózati eszközt hasonló módon felsoroljuk.
  +
  +
huntgroups:
  +
  +
<pre>
  +
(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
  +
</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>
   
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.<br>
+
--[[User:Farkas|Farkas]] (farkas_pont_jozsef_kukac_sch_pont_bme_pont_hu)
Radiusd.conf fájlból részletek:
 

A lap jelenlegi, 2008. január 30., 01: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