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"
}
}
}