cs:spravce:pripojovani:radius:freeradius3:jedno_ssid_vladne_vsem

Priraďovanie VLAN na základe LDAP group membership

Najskor trochu teórie

V rôznych inštitúciach je zvykom využívať vo Wi-Fi sieti separátne SSID (identifikátory siete) pre jednotlivé služby. Typický príklad sú školy, kde sú rôzne siete pre zamestnancov školy, pre študentov a ešte napríklad pre externistov. Každé SSID má priradenú svoju VLANu a na firewalle sú nastavené pravidla, kto može kam pristupovať.

Komplikácie však vznikajú, ak sú definované viac ako 4 SSID na AP. A znásobuje sa s vyšším počtom AP na rovnakom kanále (čo je v pásme 2,4 GHz vcelku bežná záležitosť). Už pri 3 AP a 4 SSID stúpa tzv. overhead protokolu na hodnotu ~39% (!). Pri 4 AP je overhead už ~52% (!!!). To znamená, že viac ako polovica kapacity rádioveho kanálu je vyťažená tým, že AP vysielajú tzv. beacon pakety (paket, ktorý obsahuje informacie o príslušnom SSID). Ešte nebol prenesený žiaden payload (t.j. užitočné dáta) a polovica teoretickej kapacity kanálu je už vyčerpaná. Vysvetlenie tohto javu ako aj kalkulačka overheadu je popísaná na stránkach Revolution Wi-Fi.



Na tomto príklade je názorne vidieť, že väčší počet AP v pokrývanej lokalite neznamená vždy vyššiu priepustnosť. Je doležité pri návrhu siete zvážiť umiestnenie AP vzhľadom na požadované pokrytie priestoru, počet AP, využitie šírky pásma (napr. použitie 40 MHz kanálu v 2,4 GHz pásme je vyložene recept na problémy), množstvo SSID a ďaľšie parametre. Veľmi dobrým pomocníkom v tejto oblasti je napríklad EKAHAU Site Survey .

Ako riešit tento problém?

Rádiove prostriedky sú jednoznačné definované a obmedzené fyzikalnými vlastnosťami. Na základe vyššie uvedených informacií o negatívnom dopade väčšieho počtu SSID na priepustnosť siete, je jednou možnosťou ich redukcia. Ale ako dosiahnuť separácie klientov, keď bude menej SSID? Odpoveďou je tzv. dynamicky priraďovaná VLAN (alias dynamic VLAN assignment) na základe identity uživateľa, resp. na základe jeho členstva v bezpečnostných skupinách. Nutnou podmienkou je mať nejaký centrálny systém identít užívateľov ako je napr. openLDAP, Active Directory (čo je vlastne druh LDAP databázy), eDirectory atď. Pre jednoduchosť a časté nasadenie budeme ďalej pracovať s Active Directory (AD). Každý užívateľ, ktorý má mať vrámci príslušnej inštitúcie prístup do Wi-Fi siete, má vytvorený účet v AD. V prípade školy je to je typicky skupina užívateľov typu „učiteľ“ resp. „študent“. Učiteľ má prístup obyčajne k väčšiemu množstvu systémovych prostriedkov (napr tlačiareň/tiskárna) ako študent.

Dynamické priraďovanie VLAN a ako na to

Ak užívateľ inicializuje prihlásenie k Wi-Fi sieti s podporou dynamického prideľovania VLAN, tak Wi-Fi kontrolér alebo samotné AP (každý výrobca to može mať inak, napr. Ruckus Wireless má možnosť použiť centrálny kontrolér, Ubiquiti Networks túto možnosť nemá a treba pracovať s každým AP samostatne) osloví skrz protokol IEEE 802.1x príslušný RADIUS server. Odporúčam použiť FreeRADIUS (FR) aj keď NPS (RADIUS server od MS) má tiež podporu prideľovania VLAN - má však iné neduhy. RADIUS server následne kontaktuje AD a na základe členstva užívateľa v skupine odpovie (okrem overenia identity) aj s parametrom VLAN ID, do ktorého má byť užívateľ začlenený. Následne je príslušný užívateľ dynamický zaradený do odpovedajúcej VLAN a to napriek tomu, že WiFi sieť nemá nastavené statické začleňovanie užívateľov do VLAN. Samozrejme príslušný Wi-Fi HW musí podporovať funkciu dynamického priraďovania do VLAN. Jednoduché vodítko je, že „domáce low-cost Wi-Fi produkty“ to nepodporujú. Z podporovaných zariadení to sú napr. produkty spoločnosti Ruckus Wireless.
Ďaľšou - praktickejšou - výhodou je to, že užívatelia eduroam siete používajú svoj login vo vlastnej sieti, avšak zároveň tento profil sa automaticky využije aj pri navštívení iných inštitúcií. Nakoľko myšlienka eduroamu je (okrem iného) zaistenie bezpečného pripojenia k sieti, prispeje implementácia jednoho SSID (t.j. SSID eduroam s dynamickým prideľovaním VLAN) aj k rozšíreniu samotnej idei eduroamu.

Konfigurácia FreeRADIUS na vyžitie dynamického prideľovania VLAN

Poznámka:
Nasledovná konfigurácia bola vykonaná na distribucii GNU/Linux Debian vo verzii 10 (Buster) s FreeRADIUS serverom (FreeRADIUS Version 3.0.17, for host x86_64-pc-linux-gnu, built on Apr 22 2019 at 21:23:36)

Prvým krokom je nastavenie ldap.conf:
root@eduroam:~# nano /etc/freeradius/3.0/mods-available/ldap

  • Upravte adresu servera a port, administrátorsky účet a base dn. Ak používate LDAPS, komunikačný port je 636.



  • Upravte search filter tak, aby to sedelo s príslušným parametrom vrámci AD.



Pôvodná hodnota: filter = „(uid=%{%{Stripped-User-Name}:-%{User-Name}})“
Upravená hodnota: filter = „(samaccountname=%{%{Stripped-User-Name}:-%{User-Name}})“

  • Voliteľne: zmente v /etc/freeradius/3.0/mods-available/ldap položku chase_referrals = yes na chase_referrals = no. Úprava je kvôli tomu, aby neboli prechádzané neexistujúce časti LDAP stromu – viď výpis z logu, ak je nastavené chase_referrals = yes:

Unable to chase referral „ldap://ForestDnsZones.realm.cz/DC=ForestDnsZones,DC=realm,DC=cz“ (-1: Can't contact LDAP server)
Unable to chase referral „ldap://DomainDnsZones.realm.cz/DC=DomainDnsZones,DC=realm,DC=cz“ (-1: Can't contact LDAP server)
Unable to chase referral „ldap://realm.cz/CN=Configuration,DC=realm,DC=cz“ (-1: Can't contact LDAP server)

  • Pridajte do /etc/freeradius/3.0/sites-enabled/inner-tunnel do časti post-auth nasledovné riadky za časť “ldap”:
    #Dynamic VLAN assignment based on LDAP group membership
    #check if eduroam user`s realm is the same as "home realm" - to prevent useless checking LDAP for non-existing realms
    if(&User-Name =~ /@realm\.cz$/i){
        if (&LDAP-Group == "CN=teacher,OU=Teacher,DC=realm,DC=cz") {
      update reply {
                       &Tunnel-Medium-Type := "IEEE-802"
                       &Tunnel-Type := "VLAN"
                       &Tunnel-Private-Group-Id := "20"
                           }
      }
      elsif (&LDAP-Group == "cn=student,ou=Student,dc=realm,dc=cz") {
      update reply {
               &Tunnel-Medium-Type := "IEEE-802"
               &Tunnel-Type := "VLAN"
               &Tunnel-Private-Group-Id := "40"
                   }
      }
      elsif (&LDAP-Group == "CN=eduroam.cesnet,CN=Users,DC=realm,DC=cz") {
      update reply {
               &Tunnel-Medium-Type := "IEEE-802"
               &Tunnel-Type := "VLAN"
               &Tunnel-Private-Group-Id := "666"
                    }
      }
      #when user is not a member of any security group, allow only basic access
      else {
      update reply {
               &Tunnel-Medium-Type := "IEEE-802"
               &Tunnel-Type := "VLAN"
               &Tunnel-Private-Group-Id := "88"
                   }
      }
    }

Uvedená konfigurácia vykoná nasledovnú činnosť:

  • Ak je príslušný užívateľ členom skupiny „cn=teacher,ou=Teacher,dc=realm,dc=cz“, v RADIUS accept správe bude informácia, že užívateľ má byť priradený do VLAN ID 20.
  • Ak je príslušný užívateľ členom skupiny „cn=student,ou=Student,dc=realm,dc=cz“, v RADIUS accept správe bude informácia, že užívateľ má byť priradený do VLAN ID 40.
  • Ak je príslušný užívateľ členom skupiny „cn=eduroam.cesnet,ou=Users,dc=realm,dc=cz“, v RADIUS accept správe bude informácia, že užívateľ má byť priradený do VLAN ID 666.
    Toto nastavenie je vyžadované pre testovací účet (v tomto prípade je testovací účet členom skupiny “eduroam.cesnet”) pre eduroam monitoring (ermon).
  • Ak je príslušný užívateľ NIEJE členom žiadnej skupiny, v RADIUS accept správe bude informácia, že užívateľ má byť priradený do VLAN ID 88 s obmedzeným prístupom k službám.
    Toto nastavenie je dôležité pre prípad, že dôjde k chybe v konfigurácii užívateľskej identity a užívateľ nieje zaradený do žiadnej skupiny.

Výhodou konfigurácie v post-auth je to, že sa prehľadáva AD resp. LDAP strom až v prípade, že je účet autorizovaný. Účet je však autorizovaný, aj keď iná inštitúcia overí identitu užívateľa. Aby neboli v lokálnom AD prehľadávané účty, ktoré nepatria lokálnej doméne resp. realmu, pridáme ešte následujúcu podmienku (znázornené zeleno):

if(&User-Name =~ /@realm\.cz$/i)
{\\
 ..\\
}''

Voliteľná konfigurácia (vzhľadom na možnosti nastavenia Default VLAN ID na Wi-Fi HW):
Priradenie VLANy pre eduroam návštevníkov (t.j. užívateľov mimo domáci realm) dosiahneme pridaním následovných riadkov so súboru /etc/freeradius/3.0/sites-enabled/default do časti post-proxy

if ("%{proxy-reply:Packet-Type}" == "Access-Accept") {
              update proxy-reply {
                      Tunnel-Type := VLAN
                      Tunnel-Medium-Type := IEEE-802
                      Tunnel-Private-Group-Id := 90
                              }
                      }

Technicky lepšie zariadenia majú možnosť nastavit východziu VLAN ID (default VLAN ID) aj keď je aktivovaná funkcia dynamického priradenia VLAN. Sú však zariadenia, kde táto možnosť nieje. Tam sa hodí táto časť konfigurácie. Typický zástupca zariadení bez možnosti nastavenia východzej VLANy je UAP od Ubiquiti networks.

VEĽMI DÔLEŽITÁ ČASŤ konfigurácie:
V súbore /etc/freeradius/3.0/mods-enabled/eap v časti peap a ttls zmente položku “use_tunneled_reply = no” na “use_tunneled_reply = yes”. To zaistí, že sa informácie o VLANe prepíšu z inner-tunnel časti t.j. (EAP časť RADIUS paketu) do outer-tunnel časti paketu. Bez tejto úpravy neakceptuje Wi-Fi kontrolér požiadavok na priradenie užívateľa do príslušnej VLANy.



  • Po vykonaní príslušnej konfigurácie nieje potrebné, aby v /etc/freeradius/3.0/users boli nejaké záznamy. Je dokonca odporúčané, aby users neobsahovalo ďaľšie záznamy v prípade , ak sa použije zložitejšia časť konfigurácie FR (ako je napr. NTLM či LDAP).
  • Zistenie “memberOf” je možné skrz JXplorer.

  • Príslušné identifikátory využijeme pre prideľovanie VLAN na základe group membership (viď konfigurácia vyššie). CN je užívateľské meno vrámci AD. V tomto prípade je použitý účet “eduroam.remote.check” pre ermon monitoring. Členstvo tohto účtu (t.j. položka “memberOf”) je “CN=eduroam.cesnet,CN=Users,DC=realm,DC=cz”. Tento reťazec použijte ako filtračný reťazec vrámci post-auth konfigurácie súboru /etc/freeradius/3.0/sites-enabled/inner-tunnel. Ak je užívateľ členom príslušnej skupiny, priradí sa mu príslušná VLANa.



Po skončení konfigurácie /etc/freeradius/3.0/mods-available/ldap je nutné spraviť symlink, aby sa konfigurácia z mods-available využívala aj v mods-enabled:
root@eduroam:/etc/freeradius/3.0/mods-enabled$ ln -s /etc/freeradius/3.0/mods-available/ldap ldap

Poznámka:
V Debian Buster pri inštalácii balíčku FreeRADIUS (apt install freeradius) nieje zahrnutá podpora LDAP. Treba teda ešte doinštalovať balíček freeradius-ldap (apt install freeradius-ldap).

Optimalizácia konfigurácie

V súbore /etc/freeradius/3.0/sites-enabled/default v časti authorize je vhodné zakomentovať riadok “-ldap”. To isté platí aj pre /etc/freeradius/3.0/sites-enabled/inner-tunnel . Tým sa vyhnete prehľadávaniu užívateľských účtov vramci LDAP pri počiatočnej autorizacií požiadavku. Keďže je modul rlm_ldap už zinicializovaný, snaží sa FR overiť účet aj voči LDAP. Keďže my však využívame LDAP len na overenie členstva v skupinách (a nasledne priradíme príslušné VLAN ID), nemá praktický zmysel overovať uživateľa skrz LDAP. Overovanie je v jednoduchej malej inštalácií skrz /etc/freeradius/3.0/users (neodporúčaná varianta pre nasadenie eduroam) alebo praktickejšia varianta je overovanie voči AD.



Filtrovanie nežiaducich RADIUS parametrov

Dôležité!
V prípade požiadavku na overenie užívateľského účtu z inej inštitúcie ako domácej, je požiadavok odoslaný na proxy server resp. server domovskej inštitúcie vzhľadom na daného užívateľa. Tam prebehne overenie jeho identity. V prípade kladnej odpovede môžu byť pridané ďalšie parametre ako napríklad VLAN ID. Nakoľko však zaradenie užívateľa do príslušnej VLANy je funkčné len vrámci domácej inštitúcie pre daný užívateľský účet, je vhodné odstrániť príslušné VLAN parametre pre požiadavky vzniknuté mimo domácu inštitúciu. Tým bude zaistené priradenie užívateľského účtu do správnej VLANy vrámci navštívenej inštitúcie. Potreba filtrovania VLAN parametrov platí aj pre opačný prípad, kedy „domáci“ užívateľ navštívi inú inštitúciu a bol by takto zaradený do VLANy, ktorá nebude v navštívenej inštitúcií funkčná.

Tohto stavu dosiahneme skrz tzv. filtrovanie atribútov. V prvom kroku povolíme filtrovanie atribútov vrámci konfigurácie /etc/freeradius/3.0/sites-enabled/default a v časti post-proxy (t.j. odpoveď od RADIUS serveru domácej inštitúcie vzhľadom na overovaný účet) odstraníme mrežu pred parametrom “attr_filter.post-proxy”.



V tomto okamžiku (t.j. po reštarte FR) sú filtrované parametre, ktoré sú preddefinované od inštalácie FR. To postačuje na filtrovanie VLAN parametrov odoslaných do vzdialenej inštitúcie.

Vrámci zachovania požiadavkov na konfiguráciu eduroam (konkrétne “Testovací účet v Access-Accept paketu musí být označen AV párem Tunnel-Private-Group-ID = 666“), upravíme súbor /etc/freeradius/3.0/mods-config/attr_filter/post-proxy a doplníme následovne parametre do časti DEFAULT:

Tunnel-Type := VLAN,
Tunnel-Medium-Type := IEEE-802,
Tunnel-Private-Group-Id := „666“,


Pozor – posledný záznam vrámci tohto súboru MUSÍ byť bez čiarky na konci (!).



Tato konfigurácia zaistí, že testovací účet a LEN testovací účet (t.j. splňuje uvedené 3 parametre) si zachová preposielané VLAN parametre. Všetky ostatné hodnoty (t.j. VLAN ID 1-4094, okrem 666) budu odstránené.

Výpis z FR, ak správne funguje dynamické priraďovanie VLAN:

(1234)   # Executing section post-auth from file /etc/freeradius/3.0/sites-enabled/inner-tunnel\\
(1234)       Searching for user in group "cn=teacher,ou=Teacher,dc=realm,dc=cz"\\
(1234)       Performing search in "dc=realm,dc=cz" with filter "(samaccountname=eduroam.test.teacher)", scope "sub"\\
(1234)       Waiting for search result...\\
(1234)       User object found at DN "CN=eduroam.test.teacher,OU=Teacher,DC=realm,DC=cz"\\
(1234)         Performing unfiltered search in "CN=eduroam.test.teacher,OU=Teacher,DC=realm,DC=cz", scope "base"\\
(1234)         Waiting for search result...\\
(1234)       User found in group DN "cn=teacher,ou=Teacher,dc=realm,dc=cz". Comparison between membership: dn, check: dn\\
(1234)           &Tunnel-Medium-Type := IEEE-802\\
(1234)           &Tunnel-Type := VLAN\\
(1234)           &Tunnel-Private-Group-Id := "20"\\
(1234)       Searching for user in group "cn=student,ou=Student,dc=realm,dc=cz"\\
(1234)       Using user DN from request "CN=eduroam.test.teacher,OU=Teacher,DC=realm,DC=cz"\\
(1234)         Performing unfiltered search in "CN=eduroam.test.teacher,OU=Teacher,DC=realm,DC=cz", scope "base"\\
(1234)         Waiting for search result...\\
(1234)       User is not a member of "cn=student,ou=Student,dc=realm,dc=cz"\\
(1234)       Searching for user in group "CN=eduroam.cesnet,CN=Users,DC=realm,DC=cz"\\
(1234)       Using user DN from request "CN=eduroam.test.teacher,OU=Teacher,DC=realm,DC=cz"\\
(1234)         Performing unfiltered search in "CN=eduroam.test.teacher,OU=Teacher,DC=realm,DC=cz", scope "base"\\
(1234)         Waiting for search result...\\
(1234)       User is not a member of "CN=eduroam.cesnet,CN=Users,DC=realm,DC=cz"\\
…
(1234)   Login OK: [eduroam.test.teacher@realm.cz] (from client localhost port 0 via TLS tunnel)\\
(1234) # Executing group from file /etc/freeradius/3.0/sites-enabled/default\\
(1234)   Stripped-User-Name += "eduroam.test.teacher"\\
(1234)   Tunnel-Medium-Type += IEEE-802\\
(1234)   Tunnel-Type += VLAN\\
(1234)   Tunnel-Private-Group-Id += "20"\\

Stanislav Pach 2019/09/18 12:00

Last modified:: 2019/09/18 12:48