decoupled accounting cron check

Alexander Clouter alex at digriz.org.uk
Sun Mar 6 20:37:01 CET 2011


Hi,

For those out there using decoupled accounting, especially in an 
'eduroam' environment, might find the following helpful.

I receive a lot of random rubbish from the various NAS's deployed 
internationally send to my FreeRADIUS installation.  Such moments of fun 
are accounting stop packets with a zero session length 
(CISCO_ACCOUNTING_HACK) resulting in a DoS when received in the 
decoupled accounting case...plus the other usual hings that trigger 
corner cases my custom (bad?) SQL statements do not catch when logging 
this information to our database.

The unfortunate outcome means after a bad accounting packet, the 
mountpoint I use for recording my journal fills up until FreeRADIUS 
hangs with no warning (meanwhile FreeRADIUS works fine so it is not 
something trivially monitored by NAGIOS or such).

The solution I slapped together is a quick minutely run script by cron 
that notifies me by email when a problem occurs.

My preference is to place my detail journal files on a separate tmpfs 
mountpoint (as I use low powered ARM boxes, OpenRD's if you are curious, 
that only have a NAND):
----
tmpfs /var/log/freeradius/radacct/journal tmpfs nosuid,nodev,noexec,size=32M,mode=700,uid=freerad,gid=freerad 0  0
----

Then the following script is used.
----
#!/bin/sh

MOUNT=/var/log/freeradius/radacct/journal
TRIGGER=1024
RCPT="jill at example.com bob at example.com"
MESSAGE="FreeRADIUS is on the road to implosion...yer might want to look into it.

Cheers"

SELF=$(basename $0)

if [ -e "/var/lock/$SELF" ]; then
	if [ $(df "$MOUNT" | tail -n1 | awk '{ print $3 }') -lt $(($TRIGGER/2)) ]; then
		rm "/var/lock/$SELF"
	else
		exit 1
	fi
fi

[ $(df "$MOUNT" | tail -n1 | awk '{ print $3 }') -lt $TRIGGER ] && exit 0

DATE=$(date -R)
TO=$(echo $RCPT | sed 's/ /, /g')

cat <<EOF | /usr/sbin/sendmail -i $RCPT
To: $TO
Date: $DATE
Subject: $MOUNT exceeds ${TRIGGER}kB

$MESSAGE
EOF

[ $? -eq 0 ] && touch "/var/lock/$SELF"

exit 1
----

That's it.  The above script will email you only a single time when more 
that 1024kB of journal is sitting around waiting to be processed and 
will re-enable notifications once it drops to half the trigger mark 
(512kB).

Cheers

-- 
Alexander Clouter
.sigmonster says: T-shirt:
                  	Life is *not* a Cabaret, and stop calling me chum!




More information about the Freeradius-Users mailing list