FreeRADIUS
a (→Beállítás) |
(→Beállítás) |
||
412. sor: | 412. sor: | ||
A pre-proxy és post-proxy a RADIUS-Proxy előtt és után elvégzett modulokat lehet megadni. |
A pre-proxy és post-proxy a RADIUS-Proxy előtt és után elvégzett modulokat lehet megadni. |
||
− | Azonosításnál mindenképpen használt modullok: clients, realms, users, huntgroups. A clients: itt a NAS beállításait lehet megadni: IP, secret, group. |
+ | Azonosításnál mindenképpen használt modullok: clients, realms, huntgroups, users. |
+ | |||
+ | '''clients''' |
||
+ | |||
+ | A NAS beállításait lehet megadni: IP, secret, nastype. |
||
+ | |||
+ | Támogatott nastype: |
||
+ | 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 kapcsolodó felhasználók "paraméreit adhatjuk meg pl.: IP |
||
+ | |||
+ | |||
+ | '''users''' |
||
+ | |||
+ | Itt lehet összefogni, az előbb tárgyalt |
A lap 2007. november 30., 00:21-kori változata
Tartalomjegyzék |
1 Általános bevezető
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.
FreeRADIUS hivatalos weboldala: http://www.freeradius.org/
Jelenlegi stabil verzió: 1.1.7 (2007.07.25)
Ez egy moduláris, gyors, gazdag protokoll készletű RADIUS szerver, és lehetőséget biztosít külső, így saját modulok használatára is.
A FreeRADIUS által használt felhasználói adatok elérése:
- LDAP
- Kerberos
- SQl (MySQL, PostgreSQL, MSSQl, Oracle)
- /etc/passwd
- PAM
- fájl
- ProxyRadius
- DC (domain controller)
- program (perl, python)
Hitelesítési protokollok:
- PAP
- CHAP
- MSCHAP (v1, v2)
- SIP Digest (Cisco VoIP)
- EAP
2 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é?
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. Vagy ki akarjuk használni a RADIUS adta lehetőségeket: közponzi felhasználó és jogosultság kezelés, és naplózás.
Viszont a leggyakoribb alkalmazási területe, azoknál a hálózati erőforrásoknál használják, ahol nincsen lehetőség, vagy mód a fent felsorolt azonosítási protokollok implementálására pl.: hálózati eszközök (routerek, switchek, AP-k, stb.).
3 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).
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.
4 RADIUS protokoll
Kliens-server architekurájú protokoll, ahol a kliens egy NAS (Network Access Server), ami küld egy kérést, és a server (RADIUS) válaszol kérésre. A RADIUS protokoll UDP-t használ. A kliens-szerver között átlagban egy kérés és válasz zajlik le, így fölösleges lenne TCP-t hazsnálni. A TCP megbizhatóbb, de nagyon lassítaná csak a protokoll válasz idejét. A protokoll 2 portot használ. A 1812-es porton az auth (authentication, authorization) folyamatokra használja, és a 1813-as portot meg a naplózáshoz (accounting) használja.
Protokoll futam:
"RADIUS adat formátuma (mind a két esetben):"
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
Mível az UDP-ben nincsen nyugtázás, ezért a protokollba beépítették. Erre csak a naplózásnál (accounting) van szükség, ilynkor a RADIUS nyugtázza, hogy megkapta a napló (accounting) csomagot.
Identifier:
Az összetartozó csomagokat azonosítja.
Length: Az egész csomag méretét adja meg. A minimum 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 esetben:
A kliens generál egy random számot, amit elküld a kérésben. Majd a szerver a válasz csomagban a következő algoritmust használja fel, hogy hitelesítse magát: ResponseAuth = MD5(Code,ID,Length,NASAuth,Attributes,Secret).
Acc esetében:
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álasz csomagban Authenticator=MD5(Code,Identifier,Length,Request Authenticator,Secret)
Attributum:
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
Accountig esetén: 40 Acct-Status-Type 41 Acct-Delay-Time 42 Acct-Input-Octets 43 Acct-Output-Octets 44 Acct-Session-Id 45 Acct-Authentic 46 Acct-Session-Time 47 Acct-Input-Packets 48 Acct-Output-Packets 49 Acct-Terminate-Cause 50 Acct-Multi-Session-Id 51 Acct-Link-Count
Lenght:
Atrributum teljes hosszát adja meg.
Value: Mérete lehet nulla is. Vagy több byte is.
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)
RADIUS hitelesítés lépései:
Lépések:
1. NAS - Access-Request
- Code=Access-Request
- Authenticator=NAS által generált random szám
- Attributumok: User-Name, User-Password
Password titkosítva=MD5(NASAuth,Secret) XOR Password
2. RADIUS - Access-Accept vagy Access-Reject
- Code= Access-Accept vagy Access-Reject
- Authenticator=MD5(Code,ID,Length,NASAuth,Attributes,Secret)
- Attributomok (pl.: jogok, protokoll, stb) (opcionális)
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)
- Attributumok
2. 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 szerkezette:
bin etc include lib man sbin share var
A konfig fájlok alapértelmezésben a etc/raddb könyvtárban vannak. A konfig 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ója. A fő konfigurációs fájl a radiusd.conf, ez töltődik be alapból, és tölti be a szükséges többi konfigurációs fájlt.
Radiusd.conf fájlból részletek:
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
user = nobody group = nobody
bind_address = 152.66.208.218
Modulok beállítása következik.
Proxy:
proxy_requests = yes $INCLUDE ${confdir}/proxy.conf
kliensek:
$INCLUDE ${confdir}/clients.conf
Unix /etc/passwd alapú authentication
unix { passwd = /etc/passwd }
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 metodus kerul megint elő. Egyenként tudjuk megadni, hogy melyik lehetőséget (modullt) akarjuk használni. Az Auth-Type beállításnál csak az ott megadott modullt használja, és nem probálja meg a többi felsorolt modullt használni.
authorize { 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 }
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égprobálkozik hitelsíteni a RADIUS.
A pre-proxy és post-proxy a RADIUS-Proxy előtt és után elvégzett modulokat lehet megadni.
Azonosításnál mindenképpen használt modullok: clients, realms, huntgroups, users.
clients
A NAS beállításait lehet megadni: IP, secret, nastype.
Támogatott nastype:
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 kapcsolodó felhasználók "paraméreit adhatjuk meg pl.: IP
users
Itt lehet összefogni, az előbb tárgyalt