Benutzer-Werkzeuge

Webseiten-Werkzeuge


 [[anwenderwiki:benutzerrechner:wlan:coovachilli-disconnect]] 

Coovachilli: User aus dem WLAN abmelden (disconnect)

Es kann wünschenswert sein, alle angemeldeten User, die sich im WLAN befinden und per Coovachilli angemeldet haben z.B. am Ende der Stunde oder in einer großen Pause automatisch abzumelden.

Hintergrund zur Erstellung dieses Scripts war folgender Gedanke: <blockquote> Eine Klasse erhält Zugang zum WLAN – sagen wir mal in der 6. Stunde. Am Ende der Stunde wird sie wieder aus der Gruppe „p_wifi“ entfernt (per Schulkonsole oder automatisch) und alle verlassen den Raum; die Schüler bleiben aber online, da ihre Verbindung noch nicht beendet wurde und sind dann mit den verbundenen Smartphones „draußen“ unterwegs. </blockquote>

Es reicht nicht aus, einen „Session-Timeout“ zu definieren, da ein Schüler sich am Ende der Stunde erneut einloggen könnte und so die volle Zeit erneut zur Verfügung hätte. Das folgende Script ist dazu gedacht, bei allen angemeldeten WLAN-Usern automatisch zu definierbaren Zeiten (Cronjob!) die Verbindung zu trennen (disconnect). Da zustäzlich mit einem „Session-Timeout“ und mit der Schulkonsole gearbeitet wird, kann sich niemand, der aus der Gruppe „p_wifi“ wieder entfernt wurde, mehr anmelden.

Der Coovachilli muss zunächst um einige Angaben ergänzt werden (s.unten). Anschließend kann man das folgende Script per Cronjob laufen lassen.

Noch eine Bemerkung: Das Script wurde erfolgreich mit dem linuxmuster-coovachilli (coova-chilli 1.3.0 und freeradius 2.1.10+dfsg-3ubuntu0.12.04.2) getestet. Bei dieser Installation befinden sich sowohl Coova-Server sowie der Freeradius-Server zusammen auf einem Rechner (bzw. VM). Daher funktioniert der Zugriff auf den „coaport 3779“ auf diesem Wege problemlos. Wenn man von einem anderen Server auf den Coovachilli zugreifen möchte, muss man sich tiefer einlesen, etwa unter: http://lists.freeradius.org/pipermail/freeradius-users/2013-March/065521.html oder http://coova.org/CoovaChilli

Scriptname: disconnect-user.sh (ausführbar machen mit chmod +x disconnect-user.sh und als root auf dem coovachilli laufen lassen!)

#!/bin/bash

# Version 1.7 vom 20.05.2015 -- erstellt von M. Hagedorn & Y.Sembritzki

# Dieses Script listet zunächst alle WLAN-User auf, die momentan verbunden sind.
# Anschließend werden alle verbundenen User disconnected.
# Der Aufruf geschieht über einen Cronjob in den großen Pausen und am Ende des Tages.
# Bsp: 59 10 * * *  /<pfad>/disconnect-user.sh 2>&1 > /dev/null

# Usernamen die nur als "MAC-Adresse" auftauchen, duerfen ohne Auth ins WLAN.
# Diese werden beim disconnect unberücksichtigt gelassen.

# Vorbereitungen: /etc/chilli/config  um diese Einträge erweitern:
#HS_MACAUTH=on          # To turn on MAC Authentication
#HS_MACAUTHMODE=local   # To allow MAC Authentication based on macallowed, not RADIUS
#HS_COAPORT=3779
# Hier die Geraete kommasepariert eintragen, die keine Auth. bekommen sollen:
#HS_MACALLOW="A0:BB...."
# Session-Timeout auf 45 Minuten setzen, damit man sich nach 45' neu anmelden muss.
#HS_DEFSESSIONTIMEOUT=2700 
# Anschließend "/etc/init.d/chilli restart"

#Hier beginnt das Script:

function is_mac {
  mac="$1"
  echo "$mac" | grep -q -E "^([[:xdigit:]]{2}[:-]){5}[[:xdigit:]]{2}$"
  return $?
}

function get_radiussecret {
  cat /etc/chilli/hs.conf | grep "^radiussecret[[:space:]]" | perl -p -e 's/^radiussecret[[:space:]]+(("(?<secret>.*)")|(?<secret>[^# ]*)).*/$+{secret}/g'
}

function get_loggedin_users {
  chilli_query list | grep pass | awk '{print $6}'
}

function disconnect_user {
  user="$1"
  echo "User-Name=$user" | radclient -x 127.0.0.1:3779 disconnect "$secret" | grep User-Name
}

secret=$(get_radiussecret)

echo -e "\n"
echo "Die folgenden User sind angemeldet:"
echo "==================================="
users=$(get_loggedin_users)
echo "$users"

echo -e "\n"
echo "Die User werden abgemeldet:"
echo "==========================="

for user in $users; do
 if is_mac "$user"; then
   echo "$user ist eine MAC und bleibt angemeldet!"
  else
   echo $(disconnect_user "$user")
 fi
done

echo -e "\n"
echo "Nach 'disconnect' sind noch angemeldet:"
echo "======================================="
echo $(get_loggedin_users)
echo -e "\n"
 [[anwenderwiki:benutzerrechner:wlan:coovachilli-disconnect]] anwenderwiki/benutzerrechner/wlan/coovachilli-disconnect.txt · Zuletzt geändert: 2015/06/01 11:20 (Externe Bearbeitung)