Setup FreeRADIUS for accounting

Goal of this tutorial

This tutorial can be used to test your Captive portal setup with radius accounting, it’s not intended to use for production setups (because we only use simple flat files for everything). We used Ubuntu linux for this setup, a different operating system might result in some paths being different.

User limits on the OPNsense firewall are set right after login, the Radius server should tell the firewall how many resources are left for the user that logged in successfully. A normal login sequence look like this:

[login] -> [send accounting start] -> [send interim updates while connected] -> [on logout, send accounting stop]


To setup freeradius in ubuntu, execute the following command:

apt-get install freeradius

Arrange client access

Edit the file /etc/freeradius/clients.conf and append a block for your network, as sample we will use

client {
    secret      = testing123
    shortname   = test-network

Enable daily session limits

Enable daily session limits, which needs accounting to signal the clients use.

  • In /etc/freeradius/sites-available/default uncomment daily in authorize and accounting sections.

  • in /etc/freeradius/radiusd.conf uncomment daily in the instantiate section

  • append to /etc/freeradius/dictionary

ATTRIBUTE       Daily-Session-Time      3000    integer
ATTRIBUTE       Max-Daily-Session       3001    integer
  • uncomment sradutmp in the accounting section, to be able to use the radwho command.

Add test users

You can add your test users to /etc/freeradius/users, they should look like this:

"test" Cleartext-Password := "test", Max-Daily-Session := 1800
        Framed-IP-Address =,
        Reply-Message = "Hello, %{User-Name}"

Make sure the second and third lines are indented by a single tab character.

This should result in a user with a maxim use per day of 1800 seconds.

Test radius

For the initial test, it might be practical to debug the traffic going in and out from Freeradius. The next steps help you start Freeradius in debug mode, without output to console:

/etc/init.d/freeradius stop
freeradius -X