FreeRADIUS

A Unix/Linux szerverek üzemeltetése wikiből
(Változatok közti eltérés)
(checkpoint)
(checkpoint)
211. sor: 211. sor:
   
 
'''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:
220. sor: 220. 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
  +
#* Authenticator=NAS által generált random szám
  +
#* Attribútumok: User-Name, User-Password
  +
#** Password titkosítva=MD5(NASAuth,Secret) XOR Password
  +
# RADIUS - Access-Accept vagy Access-Reject
  +
#* Code= Access-Accept vagy Access-Reject
  +
#* Authenticator=MD5(Code,ID,Length,NASAuth,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 szerkezete:
+
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
281. sor: 282. sor:
 
sqlippool.conf
 
sqlippool.conf
 
users
 
users
  +
</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.
+
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 fájlból részletek:
 
   
  +
Néhány <tt>radiusd.conf</tt>-részlet:
  +
<pre>
 
prefix = /usr/local/freeradius-1.1.7
 
prefix = /usr/local/freeradius-1.1.7
 
exec_prefix = ${prefix}
 
exec_prefix = ${prefix}
296. sor: 300. sor:
 
log_file = ${logdir}/radius.log
 
log_file = ${logdir}/radius.log
 
pidfile = ${run_dir}/radiusd.pid
 
pidfile = ${run_dir}/radiusd.pid
+
# ilyen userként és groupként fog futni:
Amivel futni fog a RADIUS szerver.
 
 
user = nobody
 
user = nobody
 
group = nobody
 
group = nobody
+
# melyik IP-n figyeljen:
IP címe a szervernek:
+
bind_address = 152.66.x.y
bind_address = 152.66.208.218
+
# állítsuk be a modulokat.
+
# proxy:
Modulok beállítása következik.
 
 
Proxy:
 
 
proxy_requests = yes
 
proxy_requests = yes
 
$INCLUDE ${confdir}/proxy.conf
 
$INCLUDE ${confdir}/proxy.conf
+
# kliensek (NAS-ok):
kliensek:
 
 
$INCLUDE ${confdir}/clients.conf
 
$INCLUDE ${confdir}/clients.conf
+
# Unix /etc/passwd alapú hitelesítés:
Unix /etc/passwd alapú hitelesítés:
 
 
unix {
 
unix {
 
passwd = /etc/passwd
 
passwd = /etc/passwd
 
}
 
}
+
# AAA metódus előtt elvégzett műveletek pl.: IPcí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
 
hints = ${confdir}/hints
 
hints = ${confdir}/hints
 
}
 
}
+
# LDAP:
LDAP:
 
 
ldap {
 
ldap {
 
server = "ldap.your.domain"
 
server = "ldap.your.domain"
332. sor: 336. sor:
 
ldap_connections_number = 5
 
ldap_connections_number = 5
 
}
 
}
+
# felhasználók megadása:
felhasználók megadása:
 
 
files {
 
files {
 
usersfile = ${confdir}/users
 
usersfile = ${confdir}/users
338. sor: 342. sor:
 
preproxy_usersfile = ${confdir}/preproxy_users
 
preproxy_usersfile = ${confdir}/preproxy_users
 
}
 
}
+
# 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
368. sor: 372. sor:
 
'%{reply:Packet-Type}', '%S');"
 
'%{reply:Packet-Type}', '%S');"
 
}
 
}
  +
</pre>
   
 
A már megismert AAA metódus kerül megint elő. Egyenként tudjuk megadni, hogy melyik modult akarjuk használni.
 
A már megismert AAA metódus kerül megint elő. Egyenként tudjuk megadni, hogy melyik modult akarjuk használni.
 
Az Auth-Type beállításnál csak az ott megadott modult használja, és nem próbálja meg a többi felsorolt modult használni.
 
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.
   
  +
<pre>
 
authorize {
 
authorize {
 
file
 
file
408. sor: 414. sor:
 
post_proxy_log
 
post_proxy_log
 
}
 
}
  +
</őre>
   
 
A preacct a naplózás előtt elvégzendő műveletek pl.: egyedi kulcsot generál a felhasználónak key = "User-Name, Acct-Session-Id, NAS-IP-Address, Client-IP-Address, NAS-Port"
 
A preacct a naplózás előtt elvégzendő műveletek pl.: egyedi kulcsot generál a felhasználónak key = "User-Name, Acct-Session-Id, NAS-IP-Address, Client-IP-Address, NAS-Port"
   
A post-auth az eredményesen hitelesített felhasználók utólagos műveleteit tartalmazza pl.: IP cím osztás. Vagy a nem eredményesen hitelesített felhasználók a "Post-Auth-Type REJECT" magadott modullal mégpróbálkozik hitelsíteni a RADIUS.
+
A 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-proxy és post-proxy a RADIUS-Proxy előtt és után elvégzett modulokat lehet megadni.
+
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 modulok: clients, realms, huntgroups, users.
 
Azonosításnál mindenképpen használt modulok: clients, realms, huntgroups, users.
421. sor: 428. 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
   
 
'''realms'''
 
'''realms'''
441. sor: 448. sor:
 
'''huntgroups'''
 
'''huntgroups'''
   
A NAS-hoz kapcsolódó felhasználók "paramétereit" adhatjuk meg pl.: IP
+
A NAS-hoz kapcsolódó felhasználók "paramétereit" adhatjuk meg pl.: IP-címek.
   
 
'''users'''
 
'''users'''
   
Itt lehet összefogni, az előbb tárgyalt hármast (clients, realm, huntgroups).
+
Itt lehet összefogni az előbb tárgyalt hármast (clients, realm, huntgroups).
   
'''Egyébb modulok'''
+
'''Egyéb modulok'''
   
 
A modulok beállításait, ha a radiusd.conf-ban nem lehet megtenni, akkor a modullal azonos nevű fájlban tudjuk megtenni.
 
A modulok beállításait, ha a radiusd.conf-ban nem lehet megtenni, akkor a modullal azonos nevű fájlban tudjuk megtenni.
454. sor: 461. sor:
 
'''SQL:'''
 
'''SQL:'''
   
A radiusd.confban meg kell adni, hogy milyen sql-t szeretne használni. Támogatott: PostgreSQL, MySQL, MSSQL, Oracle.
+
A radiusd.confban 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-ot kell betölteni.
 
Például, ha postgresql-t szeretnénk használni, akkor a postgresql.conf-ot kell betölteni.
464. sor: 471. sor:
 
Részlet a postgresql.conf-ból:
 
Részlet a postgresql.conf-ból:
   
  +
<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"
 
[...]
 
[...]
  +
</pre>
   
 
Majd az AAA metódusnál megismert események SQL műveletei vannak:
 
Majd az AAA metódusnál megismert események SQL műveletei vannak:
   
Egy kapcsolat felépítésének a naplózása:
+
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, \
482. sor: 491. 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 ==
+
== 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), és
  +
** néhány gép, amikrő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.
  +
* A VPN-koncetrátornál szeretnénk, ha
  +
** a VPN-felhasználók azonosítása LDAP-ból törtémne, é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 {
 
ldap {
 
server = "ldaps://ldap.sch.bme.hu"
 
server = "ldaps://ldap.sch.bme.hu"
552. sor: 565. sor:
 
sql
 
sql
 
}
 
}
  +
</pre>
   
 
clients.conf:
 
clients.conf:
+
  +
<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özt, hasonló módon felsoroljuk.
+
</pre>
  +
  +
A többi hálózati eszközt hasonló módon felsoroljuk.
   
 
huntgroups:
 
huntgroups:
   
  +
<pre>
 
(group név, IP):
 
(group név, IP):
 
ssh 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
+
# a többi IP cím felsorolása, ahhonan engedni akarjuk az ssh kapcsolatot
  +
</pre>
   
postgresql.conf
+
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.
 
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:
 
users:
   
'''SSH normál felhasználó fájlból:'''
+
'''SSH normál felhasználó fájlból:'''
  +
  +
<pre>
 
felhasználó1 Auth-Type := Local, User-Password == "xxxxx", Simultaneous-Use := 10, Huntgroup-Name == "aclip"
 
felhasználó1 Auth-Type := Local, User-Password == "xxxxx", Simultaneous-Use := 10, Huntgroup-Name == "aclip"
 
Service-Type = Login,
 
Service-Type = Login,
 
cisco-avpair="shell:priv-lvl=0"
 
cisco-avpair="shell:priv-lvl=0"
  +
</pre>
   
'''SSH admin felhasználó fájlból:'''
+
'''SSH admin felhasználó fájlból:'''
  +
  +
<pre>
 
felhasználó2 Auth-Type := Local, User-Password == "xxxxx", Simultaneous-Use := 10, Huntgroup-Name == "aclip"
 
felhasználó2 Auth-Type := Local, User-Password == "xxxxx", Simultaneous-Use := 10, Huntgroup-Name == "aclip"
 
Service-Type = Login,
 
Service-Type = Login,
 
cisco-avpair="shell:priv-lvl=15"
 
cisco-avpair="shell:priv-lvl=15"
  +
</pre>
   
'''VPN felhasználó fájlból:'''
+
'''VPN felhasználó fájlból:'''
  +
<pre>
 
felhasználó3 Auth-Type := Local, User-Password == "xxxxx", Simultaneous-Use := 2
 
felhasználó3 Auth-Type := Local, User-Password == "xxxxx", Simultaneous-Use := 2
 
Service-Type = Outbound-User
 
Service-Type = Outbound-User
+
</pre>
 
'''VPN felhasználó LDAP-ból:'''
 
'''VPN felhasználó LDAP-ból:'''
  +
<pre>
 
DEFAULT Simultaneous-Use := 100, Auth-Type := LDAP
 
DEFAULT Simultaneous-Use := 100, Auth-Type := LDAP
 
Service-Type = Outbound-User
 
Service-Type = Outbound-User
+
</pre>
 
'''Logok:'''
 
'''Logok:'''
   

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

Tartalomjegyzék

1 Általános bevezető

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

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

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

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

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

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

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

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

Támogatott hitelesítési protokollok:

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

2 Mikor használják?

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

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

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

3 Hogy lehet beszerezni?

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

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


4 A RADIUS-protokoll

Kliens-szerver architekurájú protokoll, ahol:

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

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

A protokoll két portot használ:

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

Két RFC foglalkozik vele:

Protokollfutam:

Client.gif

A RADIUS csomagformátuma:

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

RADIUS Codes (decimal) értékei:

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

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

Identifier:

Az összetartozó csomagokat azonosítja.

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

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

Auth esetén:

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

Acc esetén:

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

Attribútum felépítése:

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

Type: Auth esetén:

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

Accounting esetén:

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

Length:

Atrribútum teljes hosszát adja meg.

Value:

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

Típusai:

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

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

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

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)

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.

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

 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
# állítsuk be a modulokat.
# proxy:
 proxy_requests  = yes
 $INCLUDE  ${confdir}/proxy.conf
# kliensek (NAS-ok):
 $INCLUDE  ${confdir}/clients.conf
# Unix /etc/passwd alapú hitelesítés:
 unix {
   passwd = /etc/passwd
 }
# AAA metódus előtt elvégzett műveletek pl.: IPcím-ellenőrzés
    preprocess {
          huntgroups = ${confdir}/huntgroups
          hints = ${confdir}/hints
    }
# LDAP:
  ldap {
     server = "ldap.your.domain"
     identity = "cn=admin,o=My Org,c=UA"
     basedn = "o=My Org,c=UA"
     filter = "(uid=%{Stripped-User-Name:-%{User-Name}})"
     base_filter = "(objectclass=radiusprofile)"
     start_tls = no
     tls_cacertfile        = /path/to/cacert.pem
     tls_cacertdir         = /path/to/ca/dir/
     tls_certfile          = /path/to/radius.crt
     tls_keyfile           = /path/to/radius.key
     tls_randfile          = /path/to/rnd
     tls_require_cert      = "demand"
     ldap_connections_number = 5
   }
# felhasználók megadása:
  files {
     usersfile = ${confdir}/users
     acctusersfile = ${confdir}/acct_users
     preproxy_usersfile = ${confdir}/preproxy_users
  }
# Naplózás:
  detail {
     detailfile = ${radacctdir}/%{Client-IP-Address}/detail-%Y%m%d
     detailperm = 0600
  }
  sql_log {
               path = ${radacctdir}/sql-relay
               acct_table = "radacct"
               postauth_table = "radpostauth"
               Start = "INSERT INTO ${acct_table} (AcctSessionId, UserName, \
                NASIPAddress, FramedIPAddress, AcctStartTime, AcctStopTime, \
                AcctSessionTime, AcctTerminateCause) VALUES                 \
                ('%{Acct-Session-Id}', '%{User-Name}', '%{NAS-IP-Address}', \
                '%{Framed-IP-Address}', '%S', '0', '0', '');"
               Stop = "INSERT INTO ${acct_table} (AcctSessionId, UserName,  \
                NASIPAddress, FramedIPAddress, AcctStartTime, AcctStopTime, \
                AcctSessionTime, AcctTerminateCause) VALUES                 \
                ('%{Acct-Session-Id}', '%{User-Name}', '%{NAS-IP-Address}', \
                '%{Framed-IP-Address}', '0', '%S', '%{Acct-Session-Time}',  \
                '%{Acct-Terminate-Cause}');"
               Alive = "INSERT INTO ${acct_table} (AcctSessionId, UserName, \
                NASIPAddress, FramedIPAddress, AcctStartTime, AcctStopTime, \
                AcctSessionTime, AcctTerminateCause) VALUES                 \
                ('%{Acct-Session-Id}', '%{User-Name}', '%{NAS-IP-Address}', \
                '%{Framed-IP-Address}', '0', '0', '%{Acct-Session-Time}','');"
               Post-Auth = "INSERT INTO ${postauth_table}                   \
                (user, pass, reply, date) VALUES                            \
                ('%{User-Name}', '%{User-Password:-Chap-Password}',         \
                '%{reply:Packet-Type}', '%S');"
       }

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

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

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

A post-auth az eredményesen hitelesített felhasználók utólagos műveleteit tartalmazza pl.: 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 modulok: clients, realms, huntgroups, users. 

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

'''realms'''

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

'''huntgroups'''

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

'''users'''

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

'''Egyéb modulok'''

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

Példa:
'''SQL:'''

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

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

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

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

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

<pre>
  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}')"

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), és
    • néhány gép, amikrő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.
  • A VPN-koncetrátornál szeretnénk, ha
    • a VPN-felhasználók azonosítása LDAP-ból törtémne, é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 {
      server = "ldaps://ldap.sch.bme.hu"
      basedn = "dc=sch,dc=bme,dc=hu"
      port =636
      tls_mode = yes
      tls_cacertfile        = ca-cert path
      tls_certfile          = host-cert path
      tls_keyfile           = host-key path
      authtype = ldap
      ldap_connections_number = 20
      set_auth_type = yes
      timeout = 20
     }
  files {
       usersfile = ${confdir}/users
     }
  detail {
       detailfile = ${radacctdir}/%{Client-IP-Address}/detail-%Y%m%d
       detailperm = 0600
     }
  detail auth_log {
       detailfile = ${radacctdir}/%{Client-IP-Address}/auth-detail-%Y%m%d
       detailperm = 0600
     }
  acct_unique {
       key = "User-Name, Acct-Session-Id, NAS-IP-Address, Client-IP-Address, NAS-Port"
     }
  $INCLUDE  ${confdir}/clients.conf
  $INCLUDE  ${confdir}/postgresql.conf
  preprocess {
      huntgroups = ${confdir}/huntgroups
      hints = ${confdir}/hints
  }
  authorize {
       auth_log
       files
       ldap
    }
  authenticate {
       Auth-Type LDAP  {
               ldap
       }
    }
  preacct {
        preprocess
        acct_unique
    }
  accounting {
        detail
        sql
    }

clients.conf:

 client 152.66.208.141 {
        secret = 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ó1  Auth-Type := Local, User-Password == "xxxxx", Simultaneous-Use := 10, Huntgroup-Name == "aclip"
                  Service-Type = Login,
                  cisco-avpair="shell:priv-lvl=0"

SSH admin felhasználó fájlból:

    felhasználó2  Auth-Type := Local, User-Password == "xxxxx", Simultaneous-Use := 10, Huntgroup-Name == "aclip"
                  Service-Type = Login,
                  cisco-avpair="shell:priv-lvl=15"

VPN felhasználó fájlból:

    felhasználó3  Auth-Type := Local, User-Password == "xxxxx", Simultaneous-Use := 2
                  Service-Type = Outbound-User
 VPN felhasználó LDAP-ból:
    DEFAULT       Simultaneous-Use := 100, Auth-Type := LDAP
                  Service-Type = Outbound-User

Logok:

fájl:

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


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

Személyes eszközök