Freeradius 1.x konfigurálás

FreeRadius installáció

Installáljuk fel a kiszemelt Radius gépre a FreeRadius csomagot.

Access point konfiguráció

Feltételezve, hogy az Eduroamhoz használt access point IP címe a.b.c.d akkor a clients.conf fájlba a következőket kell írni:

            client a.b.c.d {
                        secret      = <a secret password>
                        shortname   =  <a name for your wireless AP>
            }

EAP mód konfiguráció

EAP/TTLS konfiguráció

Az eap.conf fájlba a következőket kell beírni:

 eap {
                default_eap_type = tls
                timer_expire     = 60
                ignore_unknown_eap_types = no
                tls {
                        private_key_file = <path to a private key for your Radius server>
                        certificate_file = <path to the corresponding certificate file for the Radius server>
                        CA_file = <path to the file containing the certificate of the Certificate Authority>
                        dh_file = ${raddbdir}/certs/dh
                        random_file = /dev/urandom
                        fragment_size = 1024
                        include_length = yes
                        copy_request_to_tunnel = no
                        use_tunneled_reply = no
                }
                ttls {
                        default_eap_type = md5
                        copy_request_to_tunnel = no
                        use_tunneled_reply = no
                }
        }

Tanusítványt ugyanúgy lehet szerezni pl. az NIIF CA-tól mint EAP/TTLS esetében. Az, hogy az NIIF CA-tól legyen tanusítvány nem követelmény, mivel ezt a tanusítványt csak helyi felhasználók authentikációjakor fogja a rendszer használni a TLS tunnnel kiépítésekor. NIIF CA-tól beszerzett tanusítvány ajánlott, mert az együttmüködési tesztek könnyebben mennek és a felhasználóknak csak 1 gyökér tanusítványt kell telpíteniük.

Az TLS szekció pontos kitöltése nagyon fontos, különben nem fog müködni az authentikáció, mivel a TTLS a TLS helyes müködésére épít.

Az EAP-MD5 authentikáció alkalmazása nem ajánlott alapesetben, de mivel az authentikáció WPA/WPA2 segítségével és TLS tunnelben történik ezért elég megbizhatónak számít. Az egyéb lehetséges beállítások: CHAP, MSCHAPv2 ebben az esetben az authentikációs adatbázisban nyíltan kell tárolni a jelszavakat.

PEAP konfiguráció

Az eap.conf fájlba a következőket kell beírni:

 eap {
                default_eap_type = tls
                timer_expire     = 60
                ignore_unknown_eap_types = no
                tls {
                        private_key_file = <path to a private key for your Radius server>
                        certificate_file = <path to the corresponding certificate file for the Radius server>
                        CA_file = <path to the file containing the certificate of the Certificate Authority>
                        dh_file = ${raddbdir}/certs/dh
                        random_file = /dev/urandom
                        fragment_size = 1024
                        include_length = yes
                        copy_request_to_tunnel = no
                        use_tunneled_reply = no
                }
                #  The PEAP module needs the TLS module to be installed
                #  and configured, in order to use the TLS tunnel
                #  inside of the EAP packet.  You will still need to
                #  configure the TLS module, even if you do not want
                #  to deploy EAP-TLS in your network.  Users will not
                #  be able to request EAP-TLS, as it requires them to
                #  have a client certificate.  EAP-PEAP does not
                #  require a client certificate.
                #
                peap {
                        #  The tunneled EAP session needs a default
                        #  EAP type which is separate from the one for
                        #  the non-tunneled EAP module.  Inside of the
                        #  PEAP tunnel, we recommend using MS-CHAPv2,
                        #  as that is the default type supported by
                        #  Windows clients.
                        default_eap_type = mschapv2
                }

        }

Tanusítványt ugyanúgy lehet szerezni pl. az NIIF CA-tól mint EAP/TTLS esetében. Az, hogy az NIIF CA-tól legyen tanusítvány nem követelmény, mivel ezt a tanusítványt csak helyi felhasználók authentikációjakor fogja a rendszer használni a TLS tunnnel kiépítésekor. NIIF CA-tól beszerzett tanusítvány ajánlott, mert az együttmüködési tesztek könnyebben mennek és a felhasználóknak csak 1 gyökér tanusítványt kell telpíteniük.

Az TLS szekció pontos kitöltése nagyon fontos, különben nem fog müködni az authentikáció, mivel a PEAP a TLS helyes müködésére épít.

A Tunnelen belül MSCHAPv2 authentikációt alkalmazzunk, mert így a Windows XP felhassználóknak nem kell újabb supplicant-et telpíteniük. MSCHAPv2 esetében az authentikációs adatbázisban nyíltan kell tárolni a jelszavakat.

Proxy konfiguráció

A proxy.conf fájlba a következöket kell beírni:

realm UP {
        type        = radius
        authhost    = radius1.eduroam.hu:1812
        accthost    = radius1.eduroam.hu:1813
        secret      = <shared secret with HU radius server>
        nostrip
}

realm UP {
        type        = radius
        authhost    = radius2.eduroam.hu:1812
        accthost    = radius2.eduroam.hu:1813
        secret      = <shared secret with HU radius server>
        nostrip
}

Illetve a clients.conf fájlba:

client 195.111.98.4 {
        secret  = <shared secret with HU radius server>
        shortname = radius1.eduroam.hu
}

client 195.111.98.12 {
        secret  = <shared secret with HU radius server>
        shortname = radius2.eduroam.hu
}

Freeradius modul és authentikáció konfiguráció

LDAP authentikációs adatbázis esetén

A radiusd.conf fájlban a következő modulok helyesen legyenek konfigurálva

modules {
         ...
                ldap {
                server = <"myldap.domain.hu">
                identity = <"cn=admin,dc=domain,dc=hu">
                password = <admin bind password>
                basedn = <"ou=people,dc=domain, dc=hu”>
                filter = "(uid=%{Stripped-User-Name:-%{User-Name}})"
                # If your LDAP server supports TLS you should use it
                start_tls = yes
                tls_cacertfile  = <path to the certificate of the CA of your LDAP server certificate>
                tls_randfile            = /dev/urandom
                # Itt szabályozható, hogy kinek van Eduroam hozzáférése
                access_attr = "dialupAccess"
                dictionary_mapping = ${raddbdir}/ldap.attrmap
                ldap_connections_number = 5
                # Itt tároljuk a jelszavakat
                password_attribute = userPassword
                }
            .....
            $INCLUDE ${confdir}/eap.conf
           .....
}
....
authorize {
            preprocess
            auth_log
            eap
            files
            ldap
}
...
authenticate {
     Auth-Type PAP {
          pap
     }
     Auth-Type LDAP {
          ldap
     }
    eap
}

password authentikációs adatbázis esetén

modules {
        #
        unix {
                #
                #
                #  Define the locations of the normal passwd, shadow, and
                #  group files.
                #  To force the module to use the system password functions,
                #  instead of reading the files, leave the following entries
                #  commented out.
                #
                #  This is required for some systems.
                #
                #       passwd = /etc/passwd
                #       shadow = /etc/shadow
                #       group = /etc/group
                #
                radwtmp = ${logdir}/radwtmp
        }
         passwd etc_group {
                filename = /etc/group
                format = "=Group-Name:::*,User-Name"
                hashsize = 50
                ignorenislike = yes
                allowmultiplekeys = yes
                delimiter = ":"
        }

authenticate {
     Auth-Type PAP {
          pap
     }
     eap
}

mySQL authentikációs adatbázis esetén

modules {
     ...
     $INCLUDE ${confdir}/sql.conf
     ...
}
....
authorize {
     preprocess
     auth_log
     eap
     sql
     files
}
...
authenticate {
     Auth-Type PAP {
          pap
     }
     eap
}
...

Az sql.conf fájlban, amennyiben a Postfilter csomagra és annak az autentikációs adatbázisára támaszkodunk, a következő beállításokat használjuk:

sql {
     driver = "rlm_sql_mysql"
     server = "mysql-server-host"
     login = "sql-user"
     password = "sql-user-password"
     radius_db = "postfilter"
     # vagy postfilter_replicated adatbázis replikált mySQL szerver esetében
     ...
     authcheck_table = "user"
     authreply_table = "user"
     ...
     sql_user_name = "%{User-Name}"
     ...
     authorize_check_query = "SELECT _userid, _address, \
          'Password', _passwd, '==' \
          FROM ${authcheck_table} \
          WHERE _address = '%{SQL-User-Name}' \
          AND _passwd != '' \
          ORDER BY _userid"
     authorize_reply_query = "SELECT _userid, _address, \
          'foo', 'foo', '==' \
          FROM ${authcheck_table} \
          WHERE _address = '__never_ever_match__'"
     authorize_group_check_query = "SELECT _userid, _address, \
          'foo', 'foo', '==' \
          FROM ${authcheck_table} \
          WHERE _address = '__never_ever_match__'"
     authorize_group_reply_query = "SELECT _userid, _address, \
          'foo', 'foo', '==' \
          FROM ${authcheck_table} \
          WHERE _address = '__never_ever_match__'"
     ...
}

Azonosítók feldolgozása

A users fájlban kell feldolgozni a bejövő kéréskeket és a szétdobálni a megfelelő radius proxy-knak: Minden userre illeszkedő szabályokat DEFAULT szabályokkal lehet csinálni:

pl. ha a felhasználó benne van a noradius group-ban (passwordos authentikáció) akkor nem használhatja a radius authentikációt:

DEFAULT Group == "noradius", Auth-Type := Reject
                Reply-Message = "Your account has been disabled."

pl. minden ami nem illeszkedik a domain1.hu-ra vagy domain2.hu ra el kell küldeni a felsőbb szintű proxynak, és ne is probálkozzon tovább a defualt bejegyzésekkel:

DEFAULT User-Name =~ "@", User-Name !~ "[\@\.]domain1.hu$|[\@\.]domain2.hu$", Proxy-To-Realm:= UP
        Fall-Through = No

Debughoz hozzunk létre egy felhasználót:

#teszt uesr for debugging
debug   User-Password == "nagyon titkos jelszo"
        Reply-Message = "Hello, %u, debug usage only!",
        Fall-Through = no

Az összes többi felhasználót helyileg authentikáljuk - suffix kezelést helyesen be kell állítani!!!:

DEFAULT Auth-Type = System
        Fall-Through = 1

FreeRADIUS 2.x konfigurálás

FreeRADIUS telepítés

Installáljuk fel a kiszemelt gépre a FreeRADIUS csomagot.

RADIUS kliensek felvétele

Feltételezve, hogy az eduroamhoz használt access point IP címe a.b.c.d, a clients.conf fájlba a következőket kell írni:

            client a.b.c.d {
                        secret      = <a secret password>
                        shortname   = <a name for your wireless AP>
                        virtual_server = wlan
            }

A virtual_server beállítás használata tisztábbá teszi a FreeRADIUS konfigurációt. Segítségével elkülönítve kezelhetjük a RADIUS szerverben az adott klienseket a RADIUS szerver többi kliensétől, azaz pl. a WLAN access pointoktól érkező és mondjuk egy webes alkalmazástól érkező RADIUS kérésekre vonatkozó beállítások külön adhatók meg. Egyik kliens csoport beállításainál sem kell felkészülni a másik csoporttól érkező kérésekre, mert azok a FreeRADIUS-on belül külön virtuális szerverre vagy site-ra érkeznek, így pl. külön users file használható mindegyik virtuális szerveren, amiben már nem kell a RADIUS kliens IP címe alapján dönteni a küldendő válaszról.

Több access point esetén, ha azok egy IP subnetben vannak, ugyanazt a RADIUS jelszót használják, és az adott IP subnetben nincs ennek a RADIUS szervernek más kliense, egyszerűsíthető a konfiguráció. Ilyenkor a fenti beállításokat nem kell access pointonként megismételni, hanem elegendő subnetenként, a subnet prefixet megadva:

            client a.b.c.d/m {
                        secret         = <a secret password>
                        shortname      = <a name for your wireless AP group>
                        virtual_server = wlan
            }

Mivel az eduroamban RADIUS kliensként jelennek meg az autentikációs hierarchia fastruktúrájában velünk szomszédos RADIUS szerverek is, azokat is fel kell venni a kliensek közé. Az eduroam RADIUS szomszédoktól érkező kéréseket jellemzően másképp kezeljük, mint a saját WLAN access pointjainktól érkezőket. (Pl. a fa gyökere felől érkező kéréseket soha sem proxyzzuk vissza a fa gyökere felé, míg az access pointoktól érkezőket lehet, hogy a fa gyökere felé küldjük tovább.) Ezért praktikus a RADIUS szomszédokat egy külön virtuális szerverbe tenni.

A fenti példákat folytatva legyen tehát az access pointjaink virtuális szervere a wlan nevű, az eduroam RADIUS szomszédoké pedig az eduroam. Magyaroszági eduroam tagintézményként ezek a szomszédok a hu RADIUS szerverei lesznek:

            client 195.111.98.4 {
                        secret         = <shared secret with HU radius server>
                        shortname      = hu1
                        virtual_server = eduroam
            }
            client 195.111.98.12 {
                        secret         = <shared secret with HU radius server>
                        shortname      = hu2
                        virtual_server = eduroam
            }

EAP mód konfiguráció

Lásd fent, FreeRADIUS 1.x-nél.

Proxy konfiguráció

A proxy.conf fájlban csak a hierarchikus fastruktúrában lévő szomszéd csomópontokba tartozó RADIUS szervereket kell megadnunk, ill. az egyes csoportokon belüli szerverek kezelését. Azt, hogy az egyes RADIUS kérések továbbítása, proxyzása hova történjen, nem itt adjuk meg, hanem majd más beállításoknál hivatkozunk az itt definiált csoportokra.

Magyarországi eduroam tagintézmény esetén jellemzően egy szomszédja van a fában az intézménynek, ez pedig a hu csomópont, amibe a két fent említett RADIUS szerver tartozik. Ezt a szomszédot nevezzük el UP realmnek (a hierarchia teteje irányában lévő szomszédunk)!

A proxy.conf fájlba a következöket kell beírni:

proxy server {
        default_fallback = no
}

home_server hu1 {
        type = auth+acct
        ipaddr = 195.111.98.4
        port = 1812
        secret = <shared secret with HU radius server>
        status_check = none
}

home_server hu2 {
        type = auth+acct
        ipaddr = 195.111.98.12
        port = 1812
        secret = <shared secret with HU radius server>
        status_check = none
}

home_server_pool eduroam_up_pool {
        type = fail-over
        home_server = hu1
        home_server = hu2
}

realm UP {
        pool = eduroam_up_pool
        nostrip
}

realm LOCAL {
}