Freeradius

FreeRADIUS 策略限制某些使用者嘗試登錄特定設備

  • May 11, 2015

我所擁有的:debian 上的 freeradius 2.1.10,配置為使用數據庫。

現在的工作原理:網路上有很多設備和使用者,使用者登錄設備進行配置等等。使用者可以登錄任何東西。例如,某些設備 (ciscos),radius 上的使用者帳戶帶有cisco-avpair限制個人在 cisco 設備上可以做什麼和不能做什麼的權限(屬性)。

對於特定的特殊情況,我希望 freeradius 做什麼:有一個特殊的設備,只有選擇的使用者才能進行身份驗證。其他所有人都應該被拒絕訪問。(因此,比上面的 cisco 範例更嚴格)。

我認為我應該做的是首先定義我自己的屬性,例如company-special-privilege,這樣我就可以為數據庫中的某些使用者設置它的值為0or 1。然後在policy.conf.

我要問的是:從來沒有做過策略,我不明白它們在 freeradius 配置的其餘部分中的應用位置(我應該把我的special_access策略放在哪裡)。也不確定如何制定它,但以下虛擬碼應該代表我想要的:

special_access {
   if (request to log in $special_device_ip) {
       if ($username company-special-privilege) {
           reject #
       }
   }
}

從上面我不知道如何獲取設備 IP 或使用者設置的屬性。我不會在第二個條件下對屬性執行 == 1,以防使用者沒有該屬性,因為我不知道這意味著什麼,但任何沒有 1 的使用者都必須被拒絕。

你應該把它放在節raddb/policy.conf裡面policy {}。然後他們可以像普通模組一樣被引用(通過他們的名字),在授權、認證、後認證等……

FreeRADIUS 中的策略本質上是宏,它們不是函式,它們不接受參數。

定義一個特殊的屬性來控制政策決策很好,raddb/dictionary除非你有一個 IANA 號碼並且想要旋轉你自己的自定義字典,否則就這樣做。一種更簡單的方法可能是直接查詢 SQL。

我不確定您要具體做什麼,但這裡有一個範例可能會有所幫助…根據需要進行修改

special_access {
   if ("%{Called-Station-ID}" == 'special device') {
       if ("%{sql:SELECT special_priv FROM table WHERE username = '%{User-Name}'}" != '1') {
           reject
       }
   }
}

引用自:https://serverfault.com/questions/681838