Internte Filter und Zugriffsüberwachung unter Linux. Für das Englische Original dieses Dokumentes, siehe http://zephyrsoft.net/filter. Diese Anleitung beschreibt, wie man unter Linux einen Proxy-server einrichtet um den Internetzugriff zu überwachen. Das kann sogar transparent geschehen, so dass der Browser nicht konfiguriert werden muss und auch nicht um den Filter herum kommt! In diesem Dokument werden folgende Formatierungskonventionen verwendet: /das/ist/ein/Dateiname (Hinweis: die meisten Dateien müssen als root bearbeitet werden) Das ist eine Zeile oder ein Auszug aus einer Datei Das ist ein Befehl. (Hinweis: die meisten Befehle müssen als root ausgeführt werden, oder verwende sudo) und das hier ist ein komplettes Script das du so verwenden kannst, wie es in diesem Dokument angegeben ist. Du benötigst folgende Software: – Cron, AnaCron & LogRotate: installiere diese Programme über den Paketmanager deiner Distribution. Unter Debian/Ubuntu kannst du einfach apt-get install cron anacron logrotate aufrufen. – Ein Mailserver über den du Emails über den “mail” Befehl versenden kannst. Du kannst das testen, indem du folgenden Befehl ausführst. echo test | mail -s subject [email protected] Wenn kein Fehler ausgegeben wird, und die Email in deinem Posteingang er scheint, ist alles in Ordnung. Andernfalls gehe zum Anhang A und installiere den Mailserver auf deinem Rechner. Es vermeidet einige Probleme, wenn du jetzt überprüfst, dass das funktioniert. – Squid: aus deiner Distribution (apt-get install squid) oder von www.squidcache.org – DansGuardian: aus deiner Distribution (apt-get install dansguardian) oder von www.dansguardian.org – iptables: aus deiner Distribution (apt-get install iptables) oder von www.netfilter.org (Es kann sein, dass du das noch im Kernen aktivieren musst. Wenn du nicht weißt, was das bedeutet, mach dir keine Sorgen, sehr wahrscheinlich ist es schon verfügbar.) Nachdem Squid und DansGuardian installiert sind, musst du diese noch konfigurieren. Das Bearbeiten der Dateien und das Neustarten der Dienste musst du als root ausführen. Bearbeite /etc/squid/squid.conf und gemäß der folgenden Vorschläge: 1. aktiviere die Apache log emulation (zur Zugriffsüberwachung): emulate_httpd_log on 2. setze den Hostnamen: visible_hostname localhost Vergiß nicht Squid neu zu starten (unter Debian mit /etc/init.d/squid restart). Bearbeite /etc/dansguardian/dansguardian.conf und stelle sicher, dass die Zeile UNCONFIGURED in deiner Datei auskommentiert ist, etwa so: # UNCONFIGURED Bearbeite /etc/dansguardian/dansguardianf1.conf folgendermaßen: 1. setze das Limit auf einen vernünftigen Wert (Ich empfehle einen Wert ≤ 130), z.B. naughtynesslimit = 130 2. ändere NICHT diese Standardzeile: bypass = 0 Im ersten Teil dieser Datei stehen die ganzen Blocklisten. Jetzt starte DansGuardian (unter Debian mit /etc/init.d/dansguardian start). Weil vorher in der Datei Because UNCONFIGURED stand, kann er noch nicht gestartet worden sein. Um deine Installation so weit zu testen, konfiguriere deinen Browser so, dass der den Proxy Server localhost unter dem Port 8080 (nicht 3128!) verwendet und öffne eine Seite, die blockiert werden würde. Ich schlage www.dgtest.dyndns.org vor (das ist einfach die Datei /etc/dansguardian/phraselists/pornography/weighted die ich auf 8Kb reduziert und auf diesem Server hochgeladen wurde). Die Seite muss blockiert werden, weil all die gewichteten Phrasen in dieser Datei enthalten sind! Mein Dansguardian hat das insgesamt 29365 errechnet (was definitiv höher als der eingestellte Wert ist). Jetzt denkst du vielleicht: Ich mag nicht jeden Browser so konfigurieren, dass sie diesen Proxy verwenden und schon gar nicht die ganzen Browser in meinen VMWare Maschinen. Und was ist damit, den Proxy einfach zu deaktivieren Würde das nicht das ganze System überflüssig machen und vollständigen Zugriff erlauben? Richtig. Momentan kannst du den Browser wieder auf “Direkter Internetzugriff” setzen und hast wieder ungefilterten und unüberwachten Internetzugriff. Aber lies weiter... Eine einfache und schnelle Möglichkeit jeden Browserrequest automatisch umzuleiten ist eine iptables Regel aufzustellen. Das führt effektiv dazu, dass Squid nicht mehr als normaler Proxy, sondern als transparenter Proxy fungiert (Browser merken nicht, dass sie über einen Proxy laufen und müssen nicht dafür konfiguriert werden). Um Squid beizubringen das zu unterstützen öffne die Datei /etc/squid/squid.conf als root zum Bearbeiten und ändere die Zeile http_port 3128 folgendermaßen: http_port 3128 transparent und starte squid und dansguardian neu: /etc/init.d/squid restart /etc/init.d/dansguardian restart Dann führe, immer noch als root, folgenden Befehl aus (das ist nur ein Befehl, alles muss in eine Zeile): iptables -t nat -A OUTPUT -p tcp -m owner ! --uid-owner proxy --dport 80 -j REDIRECT --to-port 8080 Teste den transparenten Proxy, indem du in deinem Browser die Proxyeinstellungen auf “Direkten Internetzugriff” zurücksetzt und eine Webseite aufrufst, die blockiert würde. Du solltest also gefilterten Internetzugriff haben, wenn du www.dgtest.dyndns.org aufrufst. Wenn du keine Webseite erreichen kannst, kann es sein, dass Squid nicht als Benutzer “proxy” läuft und daher in eine unendliche Schleife läuft. Um das zu testen, führe folgenden Befehl aus: lsof -i|grep -e '^squid\W' und beachte die dritte Spalte in der Ausgabe, den Benutzernamen. Wenn da nicht “proxy” sondern z.B. “squid” steht, musst du die vorher gesetzte iptables Regel wieder entfernen: iptables -t nat -F OUTPUT und musst den Befehl erneut ausführen, aber mit einem geänderten Benutzernamen (der Parameter nach “--uid-owner”) nämlich den, den du herausgefunden hast. Wenn das für dich funktioniert, musst du noch eine Datei erstellen, die nur folgende Zeile enthält: iptables -t nat -A OUTPUT -p tcp -m owner ! --uid-owner proxy --dport 80 -j REDIRECT --to-port 8080 Browser Netzwerk iptables (oder den von dir angepassten Befehl, s.o.). Speicher diese Datei vorzugsweise als /etc/init.d/transparentproxy. Mache die Datei ausführbar mit chmod a+x /etc/init.d/transparentproxy und erstelle startup Links indem du (unter Debian) folgenden Befehl ausführst update-rc.d transparentproxy defaults Dadurch wird der iptables Befehl automatisch beim Booten ausgeführt. Die Struktur des Systems: DansGuardian Squid Internet Email Client Instant Messaging Client Wie du siehst, werden Anfragen vom Browser von iptables abgefangen und durch Dansguardian an Squid weitergeleitet, bevor sie wirklich in das Internet gehen und alle anderen Programme funktionieren weiterhin wie gewohnt. Wenden wir uns der Zugriffsüberwachung zu: Erstelle das folgende Script, z.B. in /bin/visited_urls: #!/bin/bash # # gib alle URLs aus, die von Squid angefordert wurden # echo $1 echo "" cat /var/log/squid/access.log | \ grep -v .tar.bz2 | grep -v .tar.gz | grep -v .pdf | \ grep -v .jpg | grep -v .gif | grep -v .png | \ grep -v .ra | grep -v .ram | grep -v .rm | grep -v .mp3 | grep -v .mid | \ grep -v .css | grep -v .js | grep -v .ico | \ sed -e 's#.*http://#http://#' -e 's#.*CONNECT.#https://#' -e 's#[[:blank:]].*##' | \ sed -e 's#\?##' -e 's#:[0-9][0-9]*##' -e 's#[\|\;].*##' | \ sed -e 's#/#§#3' -e 's#§.*##' | \ sort -u 2>&1 Und erstelle dieses Script, z.B. in /bin/mail_visited_urls: #!/bin/bash # # maile die besuchten URLs an einen Rechenschaftspartner # /bin/visited_urls "Meinname hat etwas von folgenden Webseiten abgerufen:" | \ mail -s "Webseiten – Meinname " [email protected] echo "mail_visited_urls @ $(date)" >> /var/log/mail_visited_urls.log Im Zweiten Script solltest du die Werte natürlich anpassen, also Meinname und [email protected]. Wenn du die Email an mehrere Personen senden möchtest, wiederhole diese Zeilen einfach /bin/visited_urls "Meinname hat etwas von folgenden Webseiten abgerufen:" | \ mail -s "Webseiten – Meinname " [email protected] mit anderen Werten. Es ist wichtig, dass du beide Zeilen für jeden Empfänger direkt hintereinander einfügst. Mache die Scripte ausführbar: chmod a+x /bin/*visited_urls Wenn du das monitoring überprüfen möchtest, bearbeite das Script mail_visited_urls so dass deine eigene Emailadresse angegeben ist und führe “/bin/mail_visited_urls” als root aus. Dann checke deine Emails. Hier der letzte Teil: Bearbeite /etc/logrotate.d/squid so dass folgendes enthalten ist. Die wichtigen Teile sind rot markiert: /var/log/squid/*.log { weekly compress delaycompress rotate 8 missingok nocreate sharedscripts prerotate /bin/mail_visited_urls endscript postrotate test ! -e /var/run/squid.pid || /usr/sbin/squid -k rotate endscript } Wenn du die Logs nicht jede Woche (weekly) überprüfen lassen willst, kannst du diese Zeile auch auf täglich (daily) oder monatlich (monthly) setzen. Jetzt hast du es geschafft. AnaCron wird das LogRotate Script für die Squid Logdateien jeden Sonntag, wenn du deinen Computer anmachst ausführen (wenn du wöchentlich (weekly) angegeben hast), und das Script mail_visited_urls verwenden um eine schön formatierte und alphabetisch sortierte Email zu versenden. Wenn du deinen Computer am Sonntag nicht anmacht, wird die Mail das nächste mal versendet, wenn du ihn startest. Bei Fragen kannst du eine Email an [email protected] senden. Den Autor der deutschen Übersetzung erreichst du unter [email protected], Tippfehler oder Sonstiges, das die Übersetzung betrifft bitte dorthin mailen. Anhang A: Installation und Konfiguration des Email Servers Das hier ist sehr wichtig, also sorgfältig lesen. Zunächst solltest du Postfix installieren (der ist recht einfach zu konfigurieren) und ein paar Module dafür. Unter Debian reicht ein einfaches „sudo apt-get install postfix postfixtls libsasl2 libsasl2-modules“ While installing Postfix, you probably have to answer some questions. As generic configuration choose “Internet with Smarthost”. If asked for the relay or smart host, type in your provider's SMTP server. Dann füge folgende Zeilen der Datei /etc/postfix/main.cf hinzu: # verwende SMTP mit SASL Authentifizierung smtp_sasl_auth_enable = yes # Passwoerter stehen in /etc/postfix/smtp_auth smtp_sasl_password_maps = hash:/etc/postfix/smtp_auth # keine anonymen Emails smtp_sasl_security_options = noanonymous Wenn da schon so eine Zeile relayhost = smtp.myprovider.com existiert,wurde sie erstellt, als du vorher die „Internet with Smarthost“ Option ausgewählt hast. Wenn nicht füge diese Zeile mit dem SMTP Server deines Providers hinzu. Dann erstelle die Datei /etc/postfix/smtp_auth und bearbeite sie wie folgt: smtp.meinprovider.de meinbenutzername:meingeheimespasswort Führe den Befehl postmap /etc/postfix/smtp_auth aus um die Datei in das HashFormat umzuwandeln. Jetzt sollte alles konfiguriert sein. Lade die neue Konfiguration für Postfix (unter Debian mit /etc/init.d/postfix reload). Dann sende eine Email an eine Adresse, die nicht von deinem Provider verwaltet wird. Das ist nötig, weil sonst die Passwortüberprüfung nicht stattfindet, weil der Provider die Mail auf seinem eigenen Server zustellt und sie nicht weitergeleitet wird, aber das wollen wir ja testen. Folgender Befehl testet die Konfiguration echo test | mail -s subject [email protected]. Jetzt prüfe ob du eine Email bekommen hast. In der Datei /var/log/mail.log sollte etwas ähnliches wie das hier stehen: Feb 2 13:14:51 myhost postfix/pickup[5966]: 8883118058: uid=0 from=<root> Feb 2 13:14:51 myhost postfix/cleanup[5972]: 8883118058: messageid=<20050202121451.8883118058@myhost> Feb 2 13:14:51 myhost postfix/qmgr[5967]: 8883118058: from=<root@myhost>, size=278, nrcpt=1 (queue active) Feb 2 13:14:52 myhost postfix/smtp[5974]: 8883118058: to=<[email protected]>, relay=smtp.myprovider.com[12.34.56.78], delay=1, status=sent (250 Ok: queued as 0F577342749) Feb 2 13:14:52 myhost postfix/qmgr[5967]: 8883118058: removed Wenn dem so ist, funktioniert Postfix. Wenn nicht überprüfe deine Konfiguration undschau in die Dokumentation auf www.postfix.org!