FreeRADIUS 3 - 일부 회계 유형 삭제

FreeRADIUS 3 - 일부 회계 유형 삭제

저는 CentOS 7 서버에서 FreeRADIUS 3.0.13을 사용하여 전화 장치에서 계정 데이터를 가져오고 있으며 특정 레코드 유형을 간단히 삭제하고 싶습니다. 특히 이 애플리케이션의 경우 중지 메시지만 기록하고 싶습니다.

구체적으로 자세한 로그를 작성한 다음 bufferedsql 모듈을 사용하여 해당 로그에서 데이터를 읽은 다음 데이터베이스 서버에 씁니다. "Accounting-On" 또는 "Start"와 같은 기록을 받을 때까지는 모든 것이 잘 작동합니다. 나는 원치 않는 레코드를 데이터베이스에 기록하고 간단히 삭제하여 이러한 문제 중 일부를 해결했지만 더 우아한 솔루션을 선호합니다.

내가 문서에서 본 것 중 하나는 쿼리를 로 대체하는 것입니다 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리소스 정책 언어 문서를 참조하세요 .

관련 정보