Die Webseiten der Fachschaft Informatik am ERG Saalfeld


Analyse der access.log von Squid

Aufgabe: Es soll eine Übersicht über die Nutzung des Internets (WWW) erstellt werden. Dazu soll das Login des Users, die IP, das Datum, die Uhrzeit und die URL der aufgerufenen Webseiten (keine Bilder, Downloads, CSS-Dateien u.ä.) ausgegeben werden.
 


Jede aufgerufene Seite im Internet wird von unserem Proxy Squid in der Datei access.log gespeichert, wobei jede Zeile dieser Datei zu einer aufgerufenen Datei (auch Bilder, CSS-Datei, Downloads, usw.) gehört. Diese Zeilen sind alle so aufgebaut wie in dem folgenden Beispiel:

1365754767.148 150 10.100.0.26 TCP_MISS/200 19404 GET http://www.gmx.net/ hkirmse DIRECT/212.227.223.5 text/html


Man kann diese Zeile so beschreiben:

    1.   Computerzeit \d{10}\.\d{3} 11.   Request-Methode \w+
    2.   ein oder mehrere Leerzeichen \s+ 12.   ein Leerzeichen \s
    3.   benötigte Zeit in Millisekunden \d{1,5} 13.   URL \S+
    4.   ein Leerzeichen \s 14.   ein Leerzeichen \s
    5.   IP-Adresse des Client \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} 15.   Login oder "-" \S+
    6.   ein Leerzeichen \s 16.   ein Leerzeichen \s
    7.   Rückgabe Squid-Code/HTTP-Code \w+\/\d{3} 17.   peerstatus/peerhost \S+
    8.   ein Leerzeichen \s 18.   ein Leerzeichen \s
    9.   Größe der Datei \d{1,} 19.   Content-Type text\/html
    10.   ein Leerzeichen \s        


Damit ergibt sich als Regex zur Beschreibung einer solchen Zeile des Logfiles:

\d{10}\.\d{3}\s+\d{1,5}\s\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\s\w+\/\d{3}\s\d{1,}\s\w+\s\S+\s\S+\s\S+\stext\/html

Konzept:

  • wir lesen das Logfile ein und stecken das in eine Liste
  • für jedes Element dieser Liste tuen wir Folgendes:
    • wir matchen dieses Element (die Zeile des Logfiles) mit der Regex
    • dabei holen wir die Computerzeit, die IP-Adresse des Client, die URL und das Login aus der Zeile des Logfiles
    • wir geben diese Daten aus

 

Programm

#!/usr/bin/perl
use strict;
use warnings;

my $datei = 'access.log';       # Datei muss im gleichen Verzeichnis liegen

# wir lesen das Logfile ein
my @liste = ();
open FILE, '<', $datei or die "konnte $datei nicht zum Lesen oeffnen. $!\n";
while (my $zeile = <FILE>) {
  push @liste, $zeile;
}
close FILE;

# für jedes Element dieser Liste tun wir Folgendes:
foreach my $zeile (@liste) {
  # wir matchen dieses Element (die Zeile des Logfiles) mit der Regex
  if ($zeile =~ /^(\d{10}\.\d{3})\s+\d{1,5}\s(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s\w+\/\d{3}\s\d{1,}\s\w+\s(\S+)\s(\S+)\s\S+\stext\/html$/) {
    &ausgabe( $1, $2, $4, $3); # Computerzeit, IP, Login, URL
  }
}

sub ausgabe {
  my ($zeit, $ip, $login, $url) = @_;
  print "$zeit  $ip  $login \t $url\n";
}

__END__

 

Der Ausgabe sah bei mir so aus:

 

Aufgaben zu Perl

  1. Bringen Sie das Programm zum Laufen. Nutzen Sie dazu das hier bereitgestellte Logfile.
  2. Überarbeiten Sie das Programm so, dass die Ausgabe in Tabellenform erfolgt (korrekte Spalten)
  3. Überarbeiten Sie das Programm so, dass statt der Computerzeit Datum und Uhrzeit ausgegeben werden. Informieren Sie sich dazu z.B. bei SelfHTML zu time und localtime.
  4. Ergänzen Sie das Programm um eine Überschrift (unterstrichen, Leerzeile).
  5. Ergänzen Sie das Programm um einen passenden Tabellenkopf.
  6. Überarbeiten Sie das Programm so, dass die Ausgabe als HTML-Seite erfolgt. Leiten Sie diese in eine Datei um und kontrollieren Sie das Ergebnis im Browser.
  7. Überarbeiten Sie das Programm so, dass in dieser HTML-Seite die URL ein Link auf die angegebene Seite ist.
  8. Im Logfile von Squid steht nicht der Rechnername, sondern die IP-Adresse. Geben Sie an, unter welchen Bedingungen Sie diese Information wie nutzen können.

Aufgaben zum Datenschutz

  1. Geben Sie mindestens 3 Gründe bzw. Szenarien an, warum das Squidlogfile nicht öffentlich bereitgestellt werden darf.
  2. Geben Sie einen (zwingenden) Grund bzw. ein Szenario an, warum aus Sicht des Admins das Squidlogfile geführt werden muss.
  3. Geben Sie einen (zwingenden) Grund bzw. ein Szenario an, wann und warum ein unterrichtender Lehrer Zugriff auf das Squidlogfile haben sollte.
  4. Geben Sie eine Lösung an, die den Interessen der Nutzer (Schüler und Lehrer), den unterrichtenden Lehrern und dem Admin weitestgehend gerecht wird.
  5. Schätzen Sie kritisch ein, wie die aktuelle Lösung am ERG diesen Anforderungen gerecht wird.
  6. Schätzen Sie kritisch ein, welchen Stellenwert der Datenschutz (hinsichtlich des Squid-Logfiles) am ERG spielt.

 

zurück


© ERG Saalfeld   -   Hans-Dietrich Kirmse   18.01.2015