FreeRADIUS
(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., 22: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:
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:
- A kliens generál egy véletlenszámot, amit elküld a kérésben.
- A szerver a válaszcsomagban a következő algoritmust használja fel, hogy hitelesítse magát:
- ResponseAuth = MD5(Code,ID,Length,NASAuth,Attributes,Secret).
Acc esetén:
- A kliens (NAS) a következő algoritmus szerint generálja:
- Authenticator=MD5(Code,Identifier,Length,16 zero octets,request attributes,shared secret)
- A RADIUS a válasza:
- Authenticator=MD5(Code,Identifier,Length,Request Authenticator,Secret)
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
- 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)
4.2 RADIUS naplózás lépései
- 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)
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)
