FreeRADIUS
(→RADIUS protokoll) |
(→Beállítási példa) |
||
| (2 szerkesztő 98 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> |
||
| − | Protokoll futam:<br> |
+ | <pre> |
| − | <center> |
||
| − | <br><br> |
||
| − | [[Kép:radius.gif]] |
||
| − | <br><br> |
||
| − | [[Kép:Client.gif]] |
||
| − | </center> |
||
| − | <br> |
||
| − | <br> |
||
| − | RADIUS adat formátuma: |
||
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:''' |
| − | RADIUS Codes (decimal) értékei:<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> |
+ | </pre> |
| − | Identifier: |
+ | 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. |
Az összetartozó csomagokat azonosítja. |
||
| − | Length: |
+ | '''Length:''' |
| − | Az egész csomag méretét adja meg. A minimum méret 20, míg a maximális 4096 byte. |
+ | Az egész csomag méretét adja meg. A minimális méret 20, míg a maximális 4096 byte. |
| + | |||
| + | '''Authenticator:''' |
||
| + | 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: |
||
| − | Authenticator: |
+ | # A kliens (NAS) a következő algoritmus szerint generálja: |
| − | A NAS és a RADIUS rendelkezik egy közös kulccsal (secret vagy key). |
+ | #* Request Authenticator=MD5(Code,Identifier,Length,16 zero octets,request attributes,shared secret) |
| − | 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+RequestAuth+Attributes+Secret). |
+ | # A RADIUS a válasza: |
| + | #* Authenticator=MD5(Code,Identifier,Length,Request Authenticator,Secret) |
||
| − | <br> |
+ | '''Attribútum felépítése:''' |
| − | Attributum: |
+ | <pre> |
| − | felépítése: |
||
0 1 2 |
0 1 2 |
||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 |
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 |
||
| 83. sor: | 84. sor: | ||
| Type | Length | Value ... |
| Type | Length | Value ... |
||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- |
||
| − | <br> |
+ | </pre> |
| − | Type: |
+ | '''Type:''' |
| − | 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 |
||
| − | Lenght: <br> |
+ | |
| − | Atrributum teljes hosszát adja meg.<br> |
+ | '''Length:''' |
| − | Value:<br> |
+ | |
| − | Mérete lehet nulla is. Vagy több byte is.<br> |
+ | Atrribútum teljes hosszát adja meg. |
| − | Típusai:<br> |
+ | |
| − | * text 1-253 byte<br> |
+ | '''Value:''' |
| − | * string 1*253 byte<br> |
+ | |
| + | Nulla vagy több byte, az attribútum értékét tartalmazza. |
||
| + | |||
| + | Típusai: |
||
| + | * text 1-253 byte (UTF8 kodolt string)<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> |
||
| + | === RADIUS hitelesítés lépései === |
||
| + | [[Kép:radius2.gif||center]] |
||
| − | [[Kép:radius2.gif]] |
+ | # NAS - Access-Request |
| + | #* Code=Access-Request |
||
| + | #* NAS Authenticator=NAS által generált random szám |
||
| + | #* Attribútumok: User-Name, User-Password |
||
| + | #** Password titkosítva=MD5(NAS Authenticator,Secret) XOR Password |
||
| + | # RADIUS - Access-Accept vagy Access-Reject |
||
| + | #* Code= Access-Accept vagy Access-Reject |
||
| + | #* Authenticator=MD5(Code,ID,Length,NAS Authenticator,Attributes,Secret) |
||
| + | #* Attribútomok (pl.: jogok, protokoll, stb) (opcionális) |
||
| − | == Beállítás == |
+ | === RADIUS naplózás lépései === |
| − | Forrásból telepített FreeRADIUS könyvtár szerkezette: |
+ | # NAS - Accounting-Request |
| − | bin |
+ | #* Code=Accounting-Request |
| − | etc |
+ | #* Authenticator=MD5(Code,Identifier,Length,16 zero octets,request attributes,shared secret) |
| − | include |
+ | #* Attribútumok |
| − | lib |
||
| − | man |
||
| − | sbin |
||
| − | share |
||
| − | var |
||
| + | # RADIUS - Accounting-Response |
||
| + | #* Code=Accounting-Response |
||
| + | #* Authenticator=MD5(Code,Identifier,Length,Request Authenticator,Secret) |
||
| − | A konfig fájlok alapértelmezésben a etc/raddb könyvtárban vannak. A konfig fájlok listája: |
+ | == 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 |
||
| 142. 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:
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 (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:
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
- NAS - Access-Request
- Code=Access-Request
- NAS Authenticator=NAS által generált random szám
- Attribútumok: User-Name, User-Password
- Password titkosítva=MD5(NAS Authenticator,Secret) XOR Password
- RADIUS - Access-Accept vagy Access-Reject
- Code= Access-Accept vagy Access-Reject
- Authenticator=MD5(Code,ID,Length,NAS Authenticator,Attributes,Secret)
- Attribútomok (pl.: jogok, protokoll, stb) (opcionális)
[szerkesztés] 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)
[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
| 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:
- 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)
