Debian Lenny - Squid Proxy mit squidGuard

Problem

Der Internetzugang wird bereits über einen Proxy realisiert. Verschiedene Websites sollen nicht aufgerufen werden können, weil deren Inhalte die Computer des eigenen Netzwerkes gefährden. Wenn eine gesperrte Seite aufgerufen wird, soll die Anfrage an eine im System vorgegebene Seite umgeleitet werden.

Lösung

Squid mit squidGuard installieren. Wie Squid eingerichtet wird, ist in verschiedenen Varianten auf dieser Website beschrieben, zum Beispiel unter Debian, Debian Lenny. Hier folgt nun die Erläuterung, wie squidGuard eingerichtet wird.

squidGuard installieren

# aptitude install squidguard

Sperrlisten besorgen

Weiter Informationen sind hier zu finden: http://www.squidguard.org/
Sperrlisten können zum Beispiel hier gefunden werden: http://www.squidguard.org/blacklists.html .

Sperrlisten kopieren

Entpacken Sie die Dateien und kopieren Sie die Inhalte nach /var/lib/squidGuard/db/.

Datenbanken erstellen

Wenn die Unterordner mit den Dateien und Einträgen erstellt sind, muss das System diese Einträge noch verarbeiten und Datenbanken erstellen.

# /usr/sbin/update-squidguard

Meldung

Re-buildung SquidGuard db files...done!
Reloading Squid...done!

Bei einem erneuten Aufruf des Kommandos meldet das System

Double checking directory and file permissions...done!
Re-buildung SquidGuard db files...done!

Bei wheezy wurde die geänderte Liste sogleich angewendet. Squid muss die Konfiguration nicht neu laden. Squid musste nicht neu gestartet werden. Allenfalls die Ansicht im Browser muss aktualisiert werden, weil die Umleitungsseite noch zu sehen war.

Datenbank neu erstellen

Die entsprechenden Dateien, domains oder urls in einem Ordner kann man ändern. Damit diese Änderungen wirksam werden, muss die Datenbank (gegebenenfalls neu) erstellt werden.

Für domains

# squidGuard -C domains

Für urls

# squidGuard - C urls

/etc/squid/squidGuard.conf

bzw. /etc/squidguard/squidGuard.conf bei wheezy (!)

Ich habe die Originaldatei squidGuard.conf geändert. Alle Einträge habe ich mit '#' deaktiviert. Am Ende ist ein Bereich 'test' eingetragen, damit das Schema des Systems für dieses Beispiel deutlich wird.

Unter /var/lib/squidguard/db/ habe ich einen Ordner 'test' erstellt. In diesem Ordner gibt es eine Datei namens domains und eine Datei namens urls. Nach diesem Schema können Sie weitere Ordner erstellen. In jedem Ordner muss wiederum eine Datei domains und eine Datei urls enthalten sein.

In der Datei domains werden alle Adressen erfasst, die nicht aufgerufen werden dürfen, beispielsweise foobar.com.

In der Datei urls werden alle Einträge von Unterseiten von Domains erfasst. Beispielsweise dürfte die Hauptseite einer Domain aufgerufen werden, ebenso etliche Unterseiten, aber eine bestimmte Unterseite eben nicht: domain.com/chat.html.

Kopieren Sie innerhalb von squidGuard.conf den entsprechende den Bereich mit test und fügen Sie ihn an das Ende der Datei vor den Bereich acl ein. Ersetzen Sie im neu kopierten Bereich test durch den neuen Ausdruck. Denken Sie daran, diesen neuen Ausdruck in den Bereich von acl einzutragen, wie es für test zu sehen ist.

Bereiche, für die ein Filter aktiviert ist, hier ist das der Abschnitt dest test, müssen unten im Bereich acl hinter pass mit einem vorangestellten '!' aufgeführt werden. Die entsprechenden Übereinstimmungen sind mit Fettdruck hervorgehoben.

#
# CONFIG FILE FOR SQUIDGUARD
#

dbhome /var/lib/squidguard/db
logdir /var/log/squid

#
# TIME RULES:
# abbrev for weekdays:
# s = sun, m = mon, t =tue, w = wed, h = thu, f = fri, a = sat

#time workhours {
# weekly mtwhf 08:00 - 16:30
# date *-*-01 08:00 - 16:30
#}

#
# REWRITE RULES:
#

#rew dmz {
# s@://admin/@://admin.foo.bar.no/@i
# s@://foo.bar.no/@://www.foo.bar.no/@i
#}

#
# SOURCE ADDRESSES:
#

#src admin {
# ip 1.2.3.4 1.2.3.5
# user root foo bar
# within workhours
#}

#src foo-clients {
# ip 172.16.2.32-172.16.2.100 172.16.2.100 172.16.2.200
#}

#src bar-clients {
# ip 172.16.4.0/26
#}

#
# DESTINATION CLASSES:
#

#dest good {
#}

#dest local {
#}

#dest adult {
# domainlist adult/domains
# urllist adult/urls
# expressionlist adult/expressions
# redirect https://www.sicher-im-netz.de/
#}


#acl {
# admin {
# pass any
# }

# foo-clients within workhours {
# pass good !in-addr !adult any
# } else {
# pass any
# }

# bar-clients {
# pass local none
# }

# default {
# pass local none
# rewrite dmz
# https://www.sicher-im-netz.de/
# }
#}

dest test {
domainlist test/domains
urllist test/urls
redirect 302:https://www.sicher-im-netz.de/
}

acl {
default {
pass !test any
redirect 302:https://www.sicher-im-netz.de/
}
}
### Hinweis
### Wenn nach 'pass' mehr als 25 Eintraege stehen, funktioniert squidGuard nicht
### korrekt. Vgl. dazu den Text am Ende dieser Seite.

/etc/squid/squid.conf ändern

In /etc/squid/squid.conf muss eingetragen werden, dass squidGuard verwendet werden soll. Die Änderung ist in diesem Ausschnitt der Datei fett gedruckt. Der gesamte Ausschnitt kann so nicht verwendet werden. Er gehört zu einer Installation die an anderer Stelle auf dieser Website beschrieben ist und sich mit gesperrten, freigegebenen Webadressen und der Abfrage von Benutzername und Passwort befasst. SquidGuard ist dann ergänzend installiert.

[...]
#Recommended minimum configuration per scheme:
#auth_param negotiate program <uncomment and complete this line to activate>
#auth_param negotiate children 5
#auth_param negotiate keep_alive on
#auth_param ntlm program <uncomment and complete this line to activate>
#auth_param ntlm children 5
#auth_param ntlm keep_alive on
#auth_param digest program <uncomment and complete this line>
#auth_param digest children 5
#auth_param digest realm Squid proxy-caching web server
#auth_param digest nonce_garbage_interval 5 minutes
#auth_param digest nonce_max_duration 30 minutes
#auth_param digest nonce_max_count 50
#auth_param basic program <uncomment and complete this line>
# Naechste Zeile aktiviert die Abfrage von Benutzername und Passwort
auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd
# Anweisung fuer squidGuard
redirect_program /usr/bin/squidGuard -c /etc/squid/squidGuard.conf

#auth_param basic children 5
#auth_param basic realm Squid proxy-caching web server
auth_param basic realm Squid - Proxy Server
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off
[...]

Änderungen anwenden

Squid muss neu gestartet werden, damit die Änderungen wirksam werden.

# /etc/init.d/squid restart

Fehler Permission denied

Das System meldet

Error db_open: Permission denied

Mögliche Abhilfe

# chmod -R 770 /var/lib/squidguard/db/*
# chown -R proxy.proxy /var/lib/squidguard/db/*
# /etc/init.d/squid restart

Nachtrag zu wheezy und lenny

Kürzlich habe die ich die Installation mit Debian Wheezy wiederholt. Dabei habe ich die gleichen Dateien aus /var/lib/squidguard/db/ verwendet, wie bei Lenny. Squidguard hat dort einen eigenen Ordner /etc/squidguard.

Bei Wheezy klappte es, die Liste der Domains eines Bereiches zu ergänzen, so dass die ergänzte Domainadresse ebenfalls umgeleitet würde.

# /usr/sbin/update-squidguard
# /etc/init.d/squid reload

Ein Neustart von Squid (/etc/init.d/squid restart) war nicht erforderlich.

Problem

Mit Wheezy funktioniert squidGuard nur einige Male bis einige Minuten. Spätestens wenn das erste Mal eine gesperrte Adresse umgeleitet wurde, werden alle Seiten auf die eingetragene Adresse umgeleitet, obwohl die gar nicht gesperrt sind.

Lösung

Ich habe festgestellt, dass ganz unten in...

/etc/squidguard/squidguard.conf

...höchstens 25 Einträge sein dürfen. Sind es mehr, tritt der beschrieben Fehler auf.

Lenny und Wheezy haben Listen mit weiteren Unterordnern und weiteren Listen, die sind hier nicht berücksichtigt.