私はCentOS 7サーバーでFreeRADIUS 3.0.13を使用して電話デバイスからアカウントデータを取得しており、特定のレコードタイプを簡単に削除したいと思います。特にこのアプリケーションでは、停止メッセージのみを記録したいと思います。
具体的に詳細なログを作成し、bufferedsql モジュールを使用してそのログからデータを読み込み、データベースサーバーに書き込みます。 「Accounting-On」や「Start」などの記録を受け取るまで、すべてがうまく機能します。私は不要なレコードをデータベースに記録し、単に削除することでこれらの問題のいくつかを解決しましたが、よりエレガントなソリューションを好みます。
私が文書で見たものの1つは、クエリをに置き換えることですSELECT TRUE;
。しかし、これはレコードを更新しないので、FreeRADIUSはそれに窒息しているようです。 「要求に対する応答なし」を報告し、履歴を詳細ファイルに保存し、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
このタイプの会計履歴を簡単に削除するようにialup.confをどのように設定しますか?アカウントデータを生成するデバイスは、特定のアカウントメッセージのみを送信するすべての種類の設定をサポートしていません。
私のカスタムダイヤルアップ.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"
}
}
}
答え1
これらのメッセージの種類を処理しないことをあなたの設定を維持している他の人が明らかにするために、これらのセクションをコメントアウト(または削除)してください。次に、会計セクションで Acct-Status-Type 値が処理するタイプのいずれかと一致する場合にのみ SQL モジュールを呼び出します。
あなたの例では、あまり役に立たないすべてのタイプを無視しているようです。以下は、開始と中ですが処理する例です。
accounting {
switch "%{Acct-Status-Type}" {
case 'Start' {
sql
}
case 'Stop' {
sql
}
# Do nothing for other types
}
}
man unlang
リソースポリシー言語のドキュメントを参照してください。