, ,

Internetsperre am Linux-Client in der lmn7

In der lmn7 wird die Internetsperre Benutzer-bezogen über die Zugehörigkeit des Benutzers zur Gruppe „Internet“ geregelt. Diese Zugehörigkeit wird vom Proxy der Firewall ausgewertet und dann ggf. der Zugang des internets gesperrt. Leider funktioniert die Sperre mit einer größeren Verzögerung, da der Proxy diese Auswertung nicht bei jedem Seitenaufruf macht.
Als Lösung wird am Linux-Client ein Script installiert, das diese Auswertung alle 20 Sekunden macht und dann ggf. über die lokale Firewall des Clients den Proxy / Internetzugang des Clients und somit des Benutzers sperrt. Der Cronjob zu dem Script muss aber nach Installation erst freigeschaltet werden.

Cronjob mit der Datei „/etc/cron.d/internetdaemon“ aktivieren:

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# folgende Zeile freischalten, um die clientseitige Internetsperre zu aktivieren 
* * * * * root /usr/sbin/internetdaemon.sh; sleep 20; /usr/sbin/internetdaemon.sh; sleep 20; /usr/sbin/internetdaemon.sh

Script „/usr/sbin/internetdaemon.sh“, das die Gruppenzugehörigkeit testet und die lokale Firewall des Clients konfiguriert:

#!/bin/bash
#
# /usr/sbin/internetdaemon.sh
#

# folgende 3 Variablen ggf. anpassen

template_user=linuxadmin
servername=server
ad_domain=lmn.lan

user=$(who | awk '$2 ~ /:0/ {print $1}')
krbfile=$(find /tmp -user "$user" -name "krb5cc*" -type f)
i_member=$(ldbsearch -k yes --krb5-ccache=$krbfile -H ldaps://$servername.$ad_domain "(&(samaccountname=$user))" | grep -E "memberOf.*CN=internet")

if [[ -z "$i_member" ]]  && [[ -n "$user" ]] && [[ $user != $template_user ]]
then
iptables -A OUTPUT -p tcp --dport 3128 -j REJECT
# echo $(date)" ... Internet aus für "$user >> /var/log/i_on_off.log
else
iptables -D OUTPUT -p tcp --dport 3128 -j REJECT
# echo $(date)" ... Internet an für "$user >> /var/log/i_on_off.log
fi 

exit 0

Der Cronjob ruft das Script alle 20 Sekunden auf. Wenn ein Domänen-Benutzer angemeldet ist wird ggf. der Proxy-Zugang (Port 3128) gesperrt, ansonsten wird er freigegeben.

Problematik:
Falls das Internet durch die Netzwerk-Firewall OPNsense gesperrt ist, kann natürlich die lokale Firewal des Clients diese Sperre nicht aufheben!