Filtering accounting messages

liran kessel lirankessel at
Sun Jul 14 14:02:36 CEST 2019


I am receiving accounting messages from the network and storing them to the radacct table. 
Currently in order to filter I have changed the INSERT/UPDATE commands with a where statement to only insert rows for subscribers I am managing.
This is working fine but as my network grows it is creating a lot of overhead to execute SQL commands that don’t do anything and so I am trying to move the filtering to the FreeRADIUS code.
I have added the preacct to the attr_filter file:

attr_filter attr_filter.preacct {
        key = "%{User-Name}"
        filename = ${modconfdir}/${.:name}/preacct

And have this preacct file to try and currently filter only 1 number from being inserted to the DB.

#       Configuration file for the rlm_attr_filter module.
#       Please see rlm_attr_filter(5) manpage for more information.
#       This configuration file is used to remove almost all of the attributes
#       From an Accounting-Response message.  The RFC's say that an
#       Accounting-Response packet can contain only a few attributes.
#       We enforce that here.
        Vendor-Specific =* ANY,
        Message-Authenticator =* ANY,
        Error-Cause =* ANY,
        Proxy-State =* ANY,
        Calling-Station-Id == ‘XXXXXXXX'

However it seems that the filter is being ignored and all lines are inserted to the DB.
Can you please assist in understanding why it isn’t filtering?
In addition if I have a list of about 100K subscribers that I do want to store their accounting data to the DB is there a way to manage this list without adding it 1 by 1 to the filter file?

I am running Freeradius 3.0.13 with PostgreSQL.

Liran Kessel

More information about the Freeradius-Users mailing list