FreeRADIUS 策略限制某些使用者嘗試登錄特定設備
我所擁有的:debian 上的 freeradius 2.1.10,配置為使用數據庫。
現在的工作原理:網路上有很多設備和使用者,使用者登錄設備進行配置等等。使用者可以登錄任何東西。例如,某些設備 (ciscos),radius 上的使用者帳戶帶有
cisco-avpair
限制個人在 cisco 設備上可以做什麼和不能做什麼的權限(屬性)。對於特定的特殊情況,我還希望 freeradius 做什麼:有一個特殊的設備,只有選擇的使用者才能進行身份驗證。其他所有人都應該被拒絕訪問。(因此,比上面的 cisco 範例更嚴格)。
我認為我應該做的是首先定義我自己的屬性,例如
company-special-privilege
,這樣我就可以為數據庫中的某些使用者設置它的值為0
or1
。然後在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 } } }