OUR SITES NetworkRADIUS FreeRADIUS

Triggers

Triggers are events in the server can cause a hook to be executed.

The triggers are named as type.subtype.value. These names refer to subsections and then configuration items in the trigger section below. When an event occurs, the trigger is executed. The trigger is simply a program that is run, with optional arguments.

The server does not wait when a trigger is executed. It is simply a one-shot event that is sent.

The trigger names should be self-explanatory.

SNMP configuration

For now, this is only for SNMP traps.

They are enabled by uncommenting (or adding) $INCLUDE trigger.conf in the main radiusd.conf file.

The traps require that the files in the "mibs" directory be copied to the global mibs directory, usually /usr/share/snmp/mibs/. If this is not done, the snmptrap program has no idea what information to send, and will not work. The MIB installation is not done as part of the default installation, so that step must be done manually.

The global MIB directory can be found by running the following command:

snmptranslate -Dinit_mib .1.3 2>&1 | grep MIBDIR | \
    sed "s/' .*//;s/.* '//;s/.*://"

Or maybe just:

snmptranslate -Dinit_mib .1.3 2>&1 | grep MIBDIR

If you have copied the MIBs to that directory, you can test the FreeRADIUS MIBs by running the following command:

snmptranslate -m +FREERADIUS-NOTIFICATION-MIB -IR -On serverStart

It should print out:

.1.3.6.1.4.1.11344.4.1.1

As always, run the server in debugging mode after enabling the traps. You will see the snmptrap command being run, and it will print out any errors or issues that it encounters. Those need to be fixed before running the server in daemon mode.

We also suggest running in debugging mode as the radiusd user, if you have "user" or "group" set in radiusd.conf. The snmptrap program may behave differently when run as root rather than the radiusd user.

Configuration for SNMP traps / notifications, used in the "snmptrap" option below.

To disable traps, edit radiusd.conf and delete the line which says $INCLUDE trigger.conf.

cmd

Absolute path for the snmptrap command, and default command-line arguments.

You can also temporarily disable traps by changing the command to /bin/echo.

community

The SNMP community string

agent

Agent configuration

snmptrap

Define the full command used to run the traps.

This entry should not be edited. Instead, edit the "trap" section above.

Trigger definitions

The individual triggers are defined here. You can disable one by deleting it, or by commenting it out. You can disable an entire section of traps by deleting the section.

The entries below should not be edited. For example, the double colons must immediately follow the ${snmptrap} reference. Adding a space before the double colons will break all SNMP traps.

The triggers just programs which are run when particular events occur. If you want to replace an SNMP trap with another program, you can. Just edit the definitions below, so that they run a program of your choice.

For example, you can leverage the "start/stop" triggers to run a program when the server starts, or when it stops. However, only one program will be executed per trigger.

Server core triggers

The 'server' section is for events that happen in the server core

start

The server has just started.

stop

The server is about to stop.

max_requests

The "max_requests" condition has been reached.

This will trigger only once per 60 seconds.

Module triggers

Triggers for specific modules. These are not in the module configuration because they are global to all instances of the module. You can have module-specific triggers, by placing a "trigger" subsection in the module configuration.

rlm_ldap: The LDAP module

If the server does "bind as user", it will open and close an LDAP connection every time it binds as a user. Be aware that this will likely produce a lot of triggers.

Define common arguments to use below:

open

A new connection to the directory has been opened.

close

A connection to the directory has been closed.

min

Connection was released too quickly.

max

Connection was held for too long.

rlm_sql: The SQL module

args

Define common arguments to use below:

open

A new connection to the database has been opened.

close

A connection to the database has been closed.

fail

Failed to open a new connection to the database.

min

A connection was released too quickly.

max

A connection was held for too long.

You can also use connection pool’s start/stop/open/close triggers for any module which uses the pool section, both here and under pool.trigger in module configuration.

Creating new triggers

Triggers are defined in the server source code. Those are the only traps which are generated.

You cannot add new traps by defining them in one of the sections in this file. New traps can be created only by editing both the source code of the server and the MIBs. If you are not an expert in C and SNMP, then creating new traps will be difficult.

Default Configuration

snmp {
	trap {
		cmd = "/usr/bin/snmptrap -v2c"
		community = "public"
		agent = "localhost ''"
	}
}
snmptrap = "${snmp.trap.cmd} -c ${snmp.trap.community} ${snmp.trap.agent} FREERADIUS-NOTIFICATION-MIB"
trigger {
	server {
		start = "${snmptrap}::serverStart"
		stop = "${snmptrap}::serverStop"
		max_requests = "${snmptrap}::serverMaxRequests"
	}
	modules {
		ldap {
			args = "radiusdModuleName s '${.:name}' radiusdModuleInstance s '${.:instance}'"
			open = "${snmptrap}::serverModuleConnectionUp ${args}"
			close = "${snmptrap}::serverModuleConnectionDown ${args}"
			min = "${snmptrap}::serverModuleConnectionReservedPeriodMin ${args}"
			max = "${snmptrap}::serverModuleConnectionReservedPeriodMax ${args}"
		}
		sql {
			args = "radiusdModuleName s '${.:name}' radiusdModuleInstance s '${.:instance}'"
			open = "${snmptrap}::serverModuleConnectionUp ${args}"
			close = "${snmptrap}::serverModuleConnectionDown ${args}"
			fail = "${snmptrap}::serverModuleConnectionFail ${args}"
			min = "${snmptrap}::serverModuleConnectionReservedPeriodMin ${args}"
			max = "${snmptrap}::serverModuleConnectionReservedPeriodMax ${args}"
		}
	}
}