SCENARIO:
Problem:
[As required by an specific OP]
When the OP deleted any user account from the Radius Billing system (example Radius manager) AND if his session is ACTIVE on the NAS , he will not disconnect automatically from the active users list [on the NAS] and he will continue to use the internet as long as his old session is connected. If the network is stable enough, the user can continue to use internet for days . So ultimately the user will become blood sucking vampire : ) ~
Solution:
We can schedule following script to run every 5 minutes. It will fetch the deleted users from the rm_syslog events, and will display the list, and then sends DISCONNECT request to the NAS to remove those users.
We can also use SSH or API method [preferred] , but it requires additional steps and skills. and It largely depends on the OP requirements and his skills to manage things as desired.
If there are multiple paths to reach the destination,
Select one with the least complications !
/ zaiB
Requirements:
radclient , utility which will send the disconnect requests.
the SCript !
#!/bin/bash # set -x # SCRIPT to fetch data of users removed manually from teh radius and disconnect them from the mikrotik active list. # Syed Jahanzaib / aacable @ hotmail.com / https://aacable.wordpress.com # 24-MAY-2016 # Setting FILE Variables TMPFILE="/tmp/disconusers.txt" > $TMPFILE # Mikrotik NAS Details NAS="192.168.0.1" NASPORT="1700" SECRET="PUT_RADIUS_SECRET_HERE" CURDATE=`date` #MYSQL INFO SQLUSER="root" SQLPASS="zSQL_PASSWORD" #Interval in minutes INTERVAL="5" # Mysql query to fetch users whoes accounts are deleted from radius database. # Print info #mysql -u$SQLUSER -p$SQLPASS -e "use radius; select data1 from rm_syslog where eventid = '2' AND datetime >= NOW() - INTERVAL $INTERVAL MINUTE;" # store in file mysql -u$SQLUSER -p$SQLPASS --skip-column-names -e "use radius; select data1 from rm_syslog where eventid = '2' AND datetime >= NOW() - INTERVAL $INTERVAL MINUTE;" > $TMPFILE # Check if no user is deleted in DEFINED interval # Echo this info for admin info purposes. if [ -s $TMPFILE ] then echo "Following Users have Found for disconnection at Mikrotik $NAS..." echo "DATE | USERNAME | NAS" # Apply Formula to read the file in which dismissed users list and act accordingly. num=0 cat $TMPFILE | while read users do num=$[$num+1] USERNAME=`echo $users | awk '{print $1}'` # Send Disconnection Packet to Mikrotik/NAS in order to disconnect user now echo "$CURDATE | $USERNAME | $NAS" done echo "" echo "Holding 10 seconds so you can review the list then it will start disconnecting the users from NAS $NAS" sleep 10 # Applying Formula again to DISCONNECT users from the NAS num=0 cat $TMPFILE | while read users do num=$[$num+1] USERNAME=`echo $users | awk '{print $1}'` # SEND DISCONNECT REQUEST TO NAS FOR SPECIFIC USERS echo user-name=$USERNAME | radclient -x $NAS:1700 disconnect $SECRET done else echo "No user have found deleted. Nothing to do..." fi # Script End # Regard's / zaib
Results:
Regard’s
Syed Jahanzaib
Filed under: Linux Related, Radius Manager
