Radius
FreeRADIUS 3 - 丟棄某些記帳類型
我在 CentOS 7 伺服器上使用 FreeRADIUS 3.0.13 來記錄來自電話設備的數據,我們想簡單地刪除某些記錄類型 - 具體來說,對於這個應用程序,我只想記錄停止消息。
我們專門寫入詳細日誌,然後使用 bufferedsql 模組從該日誌中讀取,並寫入數據庫伺服器。一切正常,直到我得到一個記錄,例如記帳或開始。我通過將不需要的記錄寫入數據庫來解決其中的一些問題,該數據庫只是被清除,但我更喜歡更優雅的解決方案。
我在文件中看到的一件事是將查詢替換為
SELECT TRUE;
,但由於這不會更新記錄,FreeRADIUS 似乎對此感到窒息。它報告“No response to request”並將記錄保存在詳細文件中,每 30 秒嘗試重新處理一次。當我執行時
radiusd -X
,我看到類似於以下的輸出。此輸出來自收到的 Accounting-On 數據包,我只想丟棄該消息:(22) accounting { (22) sql: EXPAND %{tolower:type.%{Acct-Status-Type}.query} (22) sql: --> type.accounting-on.query (22) sql: Using query template 'query' rlm_sql (sql): Reserved connection (0) (22) sql: EXPAND %{User-Name} (22) sql: --> (22) sql: SQL-User-Name set to '' (22) sql: EXPAND SELECT TRUE; (22) sql: --> SELECT TRUE; (22) sql: Executing query: SELECT TRUE; (22) sql: SQL query returned: success (22) sql: -1 record(s) updated (22) sql: No additional queries configured rlm_sql (sql): Released connection (0) (22) [sql] = noop (22) } # accounting = noop (22) detail (/var/log/radius/radacct/detail-ca-fallback/detail-ca-fallback-log): No response to request. Will retry in 30 seconds (22) Finished request (22) Cleaning up request packet ID 0 with timestamp +660 Ready to process requests
如何配置我的 dialup.conf 以簡單地刪除這些類型的記帳記錄?生成計費數據的設備不支持任何僅發送特定計費消息的配置。
這是我的自定義 dialup.conf 文件的相關部分:
accounting { reference = "%{tolower:type.%{Acct-Status-Type}.query}" type { accounting-on { # This is a no-op. We don't log this anywhere. query = "SELECT TRUE;" } accounting-off { # This is a no-op. We don't log this anywhere. query = "SELECT TRUE;" } start { # This is a no-op. We don't log this anywhere. query = "INSERT INTO blackhole \ (<snip - fields>) \ VALUES (<snip - values>)" } interim-update { # This is a no-op. We don't log this anywhere. uery = "INSERT INTO blackhole \ (<snip - fields>) \ VALUES (<snip - values>)" } stop { query = "INSERT INTO ${....acct_table1} \ (<fields>) \ VALUES (<values>)" } # # No Acct-Status-Type == ignore the packet # none { query = "SELECT true" } } }
註釋掉(或刪除)這些部分,以使維護您的配置的其他人清楚您沒有處理這些消息類型。然後,如果 Acct-Status-Type 值與您要處理的類型之一匹配,則在會計部分中僅呼叫 SQL 模組。
在您的範例中,您似乎忽略了所有不是非常有用的類型。這是一個僅處理開始和停止的範例。
accounting { switch "%{Acct-Status-Type}" { case 'Start' { sql } case 'Stop' { sql } # Do nothing for other types } }
參見
man unlang
政策語言文件。