FreeRADIUS 3 - descartar certos tipos de contabilidade

0

Estou usando o FreeRADIUS 3.0.13 em um servidor CentOS 7 para dados contábeis de um dispositivo de telefonia, e queremos simplesmente descartar certos tipos de registro - especificamente, para este aplicativo, quero registrar somente as mensagens de parada.

Estamos gravando especificamente em um log de detalhes e, em seguida, usando o módulo bufferedsql para ler esse log e gravar no servidor de banco de dados. Tudo está funcionando normalmente, até que eu receba um registro como Contabilidade-Em ou Iniciar. Eu trabalhei em torno de alguns destes escrevendo os registros indesejados para um banco de dados que simplesmente é removido, mas eu prefiro uma solução mais elegante.

Uma das coisas que vi na documentação foi substituir a consulta por um SELECT TRUE; , mas como isso não atualiza os registros, o FreeRADIUS parece sufocá-lo. Ele informa "Nenhuma resposta à solicitação" e mantém o registro no arquivo de detalhes, tentando reprocessá-lo a cada 30 segundos.

Quando executo radiusd -X , vejo uma saída semelhante à seguinte. Esta saída é de um pacote Accounting-On recebido, e eu só quero descartar a mensagem:

(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

Como posso configurar o meu dialup.conf para simplesmente descartar esses tipos de registros contábeis? O dispositivo que gera os dados contábeis não suporta nenhum tipo de configuração para enviar apenas mensagens contábeis específicas.

Esta é a seção relevante do meu arquivo dialup.conf personalizado:

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"
        }
    }
}
    
por csyria 07.05.2018 / 22:30

1 resposta

1

Comente (ou remova) as seções para deixar claro para outras pessoas que mantêm sua configuração que você não está processando esses tipos de mensagens. Em seguida, na seção de contabilidade, chame o módulo SQL somente se o valor Acct-Status-Type corresponder a um dos tipos que você deseja processar.

No seu exemplo, você parece ignorar todos os tipos que não são muito úteis. Aqui está um exemplo com apenas processamento inicia e pára.

accounting {
    switch "%{Acct-Status-Type}" {
        case 'Start' {
            sql
        }
        case 'Stop' {
            sql
        }
        # Do nothing for other types
    }
}

Veja man unlang para documentação de linguagem de política.

    
por 10.05.2018 / 09:35