Internte Filter und Zugriffsüberwachung unter Linux.

Werbung
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!
Herunterladen