4.3. proxymanager

Der Proxymanager regelt den Zugriff auf das Internet: Bevor ein Benutzer das Internet benutzen kann, muss er es zuerst freischalten. Das passiert über den Webserver mit dem Browser. Dabei wird das Internet nicht für diesen Benutzer speziell freigeschalten, sondern für diesen Computer. Die Computer werden anhand ihrer IP-Adresse unterschieden.

Die Computer greifen nie direkt auf einen Webserver im Internet zu. Alle Anfragen gehen über den Server, genauer über den Proxyserver (Der Server ist also kein Router). So wie der Proxyserver in Abschnitt 3.3.3, „Proxy und Filter“ eingerichtet wurde, werden alle Anfragen gefiltert. Wir müssen nun diesen Filter erweitern. Dazu verwenden wir einen selbstgeschriebenen Filter. Da das Schulnetz nicht besonders groß ist, spielt Geschwindigkeit keine so große Rolle und wir können Perl als Programmiersprache verwenden.

Das Filterprogramm ist im Anhang zu finden und heißt /usr/local/sbin/squid-redirector. Es überprüft mit Hilfe des proxymanager-Programms, das weiter unten beschrieben wird, ob das Internet für die IP-Adresse des anfragenden Rechners freigeschaltet ist. Wenn das Internet nicht freigeschaltet ist, wird im Browser eine Fehlermeldung angezeigt ("Internet ist nicht aktiviert"). Diese Fehlermeldung ist in Wirklichkeit ein CGI-Programm. Wenn das Internet aktiviert ist, wird die Anfrage an den Inhaltsfilter squidGuard weitergeleitet.

Das proxymanager-Programm ist in /usr/local/sbin/proxy-manager zu finden. Es ist auch ein Perl-Programm. Das Programm kann mit verschiedenen Parametern aufgerufen werden:

$ /usr/local/sbin/proxy-manager -h
Syntax: proxy-manager [-hdocak] [login] [ip-adresse] [zeitsekunden]

    -h   Dieser Hilfetext
    -d   der eigentliche proxy-manager wird im Hintergrund gestartet
    -o   öffnet eine Verbindung für "ip-adresse" und schließt sie
         automatisch, wenn "zeitsekunden" erreicht sind
    -c   schließt die Verbindung für "ip-adresse" manuell
    -a   prüft, ob für "ip-adresse" eine Verbindung besteht
    -k   beendet den proxy-manager und löscht alle Verbindungen
    -t   tested, ob der proxy-manager im Hintergrund läuft
         (siehe /var/run/proxy-manager.pid).

    [login]
         Der Benutzer, der eine Verbindung öffnet, etc. wird geloggt.

    [ip-adresse]
         Jede beliebige Form ist erlaubt:
         Beispiel: 192.168.0.168
         Es kann auch 'all' verwendet werden.

    [zeitsekunden]
         Anzahl der vergangenen Sekunden seit seit 00:00:00, Jan 1, 1970.
         Zu ermitteln z.B. durch "date +%s".

    Hinweise:
       Falls Fehler beim Start des proxy-managers auftreten
       sollten: die Zugriffsrechte überprüfen:
       /var/log/internet-freigabe
       /var/state/internet-freigabe

   proxy-manager 1.2 (2003-08-20)
   (c) 2001 Thomas Bleher <ThomasBleher@gmx.de>
   (c) 2002,2003 Andreas Dangel <adabolo@adabolo.de>

   proxy-manager comes with ABSOLUTELY NO WARRANTY.
   This is free software, and you are welcome to redistribute it
   under certain conditions; see the GNU GPL.

Im Firewall-Script wird der Proxymanager mit proxy-manager -d als Hintergrundprozess gestartet. Das ist nötig, denn das Internet kann immer nur für eine bestimmte Zeit freigeschaltet werden. Der Hintergrundprozess prüft jede Minute, ob für einen freigeschalteten Computer die Zeit abgelaufen ist und deaktiviert gegebenenfalls das Internet. Alle weiteren Parameter sind ja im Hilfetext erklärt. Das CGI-Programm, mit dem man das Internet letztendlich aktivieren kann, ruft ebenfalls den Proxymanager auf, z.B. mit proxy-manager -o andreas 192.168.0.140 1067188761. Daraufhin schreibt der Proxymanager in die Datei /var/state/internet-freigabe folgende Zeile:

192.168.0.140:1067188761

Der Hintergrundprozess überprüft dann, ob der angegbene Zeitpunkt vorbei ist und entfernt die Zeile gegebenenfalls wieder.

Damit der Proxyserver (squid, siehe Abschnitt 3.3.3, „Proxy und Filter“) unseren neuen Filter auch verwendet, muss die Datei /etc/squid.conf bearbeitet werden. Folgender Eintrag muss abgeändert werden:

redirect_program /usr/local/sbin/squid-redirector

Mit /etc/init.d/squid restart wird unser neuer Filter verwendet.

Alle hier erwähnten Programme sind im Anhang zu finden.

4.3.1. Logdatei

Die Logdatei für den Proxymanager heißt /var/log/internet-freigabe. Hier wird mitgeloggt, wer das Internet jeweils freischaltet. Damit diese Datei nicht ins Unendliche anwächst, wird wieder logrotate konfiguriert: Die Datei /etc/logrotate.d/internet-freigabe muss mit folgendem Inhalt existieren:

/var/log/internet-freigabe {
        rotate 7
        weekly
        compress
        missingok
        notifempty
}