| This content in english |

Debian Squeeze - Squid Proxy Computer, Domains, Benutzer

Proxy-Server stehen zwischen Clientcomputern, die Informationen aus dem Internet abrufen wollen und dem Internet. Der Proxy-Server handelt an der Stelle des Clientcomputers, ist eine Art Stellvertreter. Der Proxy hat gewöhnlich eine feste IP-Adresse im Internet und leitet die Anfragen der Clientcomputer, die selbst keine IP-Adresse im Internet haben, weiter.

Der Proxy trennt das hauseigene Netzwerk von anderen Netzwerken. Im besseren Fall hat der Proxy zwei Netzwerkkarten und zwei feste IP-Adressen. Eine IP-Adresse gehört zum eigenen und eine zum äußeren Netzwerk (nicht in diesen Beispielen). Es ist auch möglich, einer Netzwerkkarte zwei IP-Adressen aus verschiedenen Netzen zuzuordnen.

Weiterhin speichert der Proxy Daten, die aus dem Internet abgerufen wurden. Werden die gleichen Daten erneut abgerufen, müssen diese nicht unbedingt erneut aus dem Internet angefordert werden, sondern sie werden aus dem Zwischenspeicher (Cache) angezeigt. Dadurch wird die Seite auf dem Client wesentlich schneller angezeigt.

Der Zugriff auf das Internet lässt sich in unterschiedlicher Weise regeln. Dazu sind hier einige kombinierte Beispiele zu sehen. Damit der Zugriff mittels Benutzername und Password über htpasswd eingerichtet werden kann, muss auf dem Server der Apache2 Webserver installiert sein oder wenigstens die 'apache2-utils'.

Ziele

Dass die Benutzer/innen sich manuell am Proxy authentifizieren müssen, ist kein Nachteil, wenn man beachtet, dass im Alltag viele Inhalt in E-Mails externe Inhalte nach laden wollen, während die E-Mail angezeigt wird. Mir gefällt das nicht. So kann ich immer entscheiden, ob ich zulasse, dass weitere Daten geladen werden, indem ich Benutzername und Passwort eingebe. Die Anwender/inne mögen das nicht. So habe ich spöter einen zweiten Proxy installiert und in die Windows-Domäne integriert. Alle Benutzerkonten einer bestimmten Grupppe haben nun Internetzugang, ohne dass nach Benutzername und Passwort gefragt wird.

Verwendet habe ich:

Debian Squeeze der Grundinstallation
+ apache2 Webserver - wegen der Passworteinrichtung; es genügt auch, 'apache2-utils' zu installieren.
+ mc (zum Bearbeiten der Dateien)
+ squid

Der Ablauf ist wie bei Debian Lenny. Die Reihenfolge in der squid.conf scheint mir eine andere zu sein.

Installation

# apt-get install squid
# apt-get install mc

Passwortdatei anlegen

In dieser Datei sollen die Passworte gespeichert werden.

# touch /etc/squid/passwd

Berechtigungen für die Passwortdatei einstellen

# chmod 644 /etc/squid/passwd

Durch chmod 644 /etc/squid/passwd werden die Berechtigungen eingestellt. Mit 644 klappte es in meiner Testumgebung nicht. Die Passwortabfrage erschien zwar, aber die Eingabe blieb ohne Wirkung. Hilfsweise kann man es auch mit weniger strengen Berechtigungen versuchen.

root wird Eigentümer der Passwortdatei

# chown root:root /etc/squid/passwd

Benutzer und Passwörter anlegen/Zugang einrichten

In der Konsole als root htpasswd /etc/squid/passwd benutzername eingeben, wobei 'benutzername' für den betreffenden Benutzernamen steht. Danach gibt man zwei Mal das Passwort für die/den Benutzer/in ein.

# htpasswd /etc/squid/passwd benutzername

Wenn ein neuer Zugang eingerichtet oder ein Zugang entfernt wurde, muss die Konfiguration von Squid nicht neu eingelesen (das wäre /etc/init.d/squid/reload) werden. Die Zugangsdaten werden vom System abgefragt, wenn der Zugang zum Internet angefordert wird.

Benutzer/inne/n den Zugang wieder entziehen

Um einen eingerichteten Zugang wieder zu entfernen, genügt es, die entsprechende Zeile aus /etc/squid/passwd zu entfernen.

Webadressen sperren oder freigeben

Es müssen zwei Dateien angelegt werden. Sie enthalten die Namen der freigegebenen bzw. gesperrten Websites. In der jeweiligen Datei wird für jede Webadresse eine neue Zeile verwendet. Als Einträge sind möglich: IP-Adresse, Webadressen ohne und mit vorangestelltem www - je nach Adresse eben.

Beispiele für Inhalte von /etc/squid/bad_domains oder /etc/squid/good_domains:
123.123.123.123
domainname.de
www.domainname.de

Eingaben
# touch /etc/squid/bad_domains
# touch /etc/squid/good_domains
# chmod 640 /etc/squid/bad_domains
# chmod 640 /etc/squid/good_domains

Ausdrücke/Suchworte sperren

Unter /etc/squid ist die Datei namens gesperrt gespeichert. Sie enthält je Zeile ein Wort, das in WWW-Adressen nicht vorkommen darf. Adressen, die das Wort oder Wortteile enthalten, werden nicht angezeigt.

# touch /etc/squid/gesperrt

Inhalt

#/etc/squid/gesperrt
# Liste der in der www-Adresse
# gesperrten Ausdruecke
# ein Wort je Zeile
porno

Konfigurationsdatei /etc/squid/squid.conf

Die Konfigurationsdatei ist: /etc/squid/squid.conf vgl. unter Suse, Proxy-Server Squid

Hier die angepasste Datei. Die meisten Kommentarzeilen habe ich weggelassen, so dass beinahe nur aktivierte Einstellungen sichtbar sind. Erläuterungen sind in dieser Datei hinterlegt.

# WELCOME TO SQUID 2.7.STABLE9
# ----------------------------
#
# This is the default Squid configuration file. You may wish
# to look at the Squid home page (http://www.squid-cache.org/)
# for the FAQ and other documentation.
#
# The default Squid config file shows what the defaults for
# various options happen to be. If you don't need to change the
# default, you shouldn't uncomment the line. Doing so may cause
# run-time problems. In some cases "none" refers to no default
# setting at all, while in other cases it refers to a valid
# option - the comments for that keyword indicate if this is the
# case.
#
# OPTIONS FOR AUTHENTICATION
#
#Recommended minimum configuration per scheme:
#auth_param negotiate program
#auth_param negotiate children 5
#auth_param negotiate keep_alive on
#auth_param ntlm program
#auth_param ntlm children 5
#auth_param ntlm keep_alive on
#auth_param digest program
#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
### naechste Zeile eingefuegt
auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd
#auth_param basic children 5
### naechste Zeile aktiviert
auth_param basic realm Squid proxy-caching web server
### naechste Zeile aktiviert
auth_param basic credentialsttl 2 hours
###naechste Zeile aktiviert
auth_param basic casesensitive off

# TAG: acl
# Defining an Access List
# Examples:
#acl macaddress arp 09:00:2b:23:45:67
#acl myexample dst_as 1241
#acl password proxy_auth REQUIRED
#acl fileupload req_mime_type -i ^multipart/form-data$
#acl javascript rep_mime_type -i ^application/x-javascript$
#
#Recommended minimum configuration:
acl all src all
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32
#
# Example rule allowing access from your local networks.
# Adapt to list your (internal) IP networks from where browsing
# should be allowed
acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
#
acl SSL_ports port 443 # https
acl SSL_ports port 563 # snews
acl SSL_ports port 873 # rsync
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl Safe_ports port 631 # cups
acl Safe_ports port 873 # rsync
acl Safe_ports port 901 # SWAT
acl purge method PURGE
acl CONNECT method CONNECT

### naechste Zeile - gesperrte Ausdruecke
acl gesperrt url_regex -i "/etc/squid/gesperrt"
### naechste Zeile - gesperrte Domains
acl bad_domains dstdom_regex -i "/etc/squid/bad_domains"
### naechste Zeile - zugelassene Domains
acl good_domains dstdom_regex -i "/etc/squid/good_domains"
### nachste Zeile - Definition der Zugriffe
### Liste mit Computernamen und deren IP-Adresse Anfang
acl computer001 src 123.123.123.123/255.255.255.255 # Hinweistext
acl computer002 src 124.124.124.124/255.255.255.255 # Hinweistext
### Liste der Computername und deren IP-Adresse Ende
### Naechste Zeile - Aktivieren der Benutzerauthentifizierung
acl AUTHUSERS proxy_auth REQUIRED


# TAG: http_access
# Allowing or Denying access based on defined access lists
#
# Access to the HTTP port:
# http_access allow|deny [!]aclname ...
#
# NOTE on default values:
#
# If there are no "access" lines present, the default is to deny
# the request.
#
# If none of the "access" lines cause a match, the default is the
# opposite of the last line in the list. If the last line was
# deny, the default is allow. Conversely, if the last line
# is allow, the default will be deny. For these reasons, it is a
# good idea to have an "deny all" or "allow all" entry at the end
# of your access lists to avoid potential confusion.
#
#Default:
# http_access deny all
#
#Recommended minimum configuration:
#
# Only allow cachemgr access from localhost
http_access allow manager localhost
http_access deny manager
# Only allow purge requests from localhost
http_access allow purge localhost
http_access deny purge
# Deny requests to unknown ports
http_access deny !Safe_ports
# Deny CONNECT to other than SSL ports
http_access deny CONNECT !SSL_ports
#
# We strongly recommend the following be uncommented to protect innocent
# web applications running on the proxy server who think the only
# one who can access services on "localhost" is a local user
#http_access deny to_localhost
#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS

# Example rule allowing access from your local networks.
# Adapt localnet in the ACL section to list your (internal) IP networks
# from where browsing should be allowed
#http_access allow localnet
http_access allow localhost

### Kennungen von oben verwenden, um den Zugriff
### zu erlauben oder zu verbieten
### Liste der gesperrten Ausdruecke anwenden
http_access deny gesperrt
### Liste der geperrten Domains anwenden
http_access deny bad_domains
### Liste der frei gegebenen Domains anwenden
http_access allow good_domains
### Naechste Zeilen enthalten die
### Liste der Definitionen von oben Anfang
http_access allow computer001
http_access allow computer002
### Liste der Definitionen von oben Ende
### Naechste Zeile - authentifizierte Benutzer/innen zulassen
http_access allow AUTHUSERS

# And finally deny all other access to this proxy
http_access deny all

# TAG: http_port
# Usage: port [options]
# hostname:port [options]
# 1.2.3.4:port [options]
#
# Squid normally listens to port 3128
http_port 3128

# TAG: cache_peer_access
# Similar to 'cache_peer_domain' but provides more flexibility by
# using ACL elements.
#
# cache_peer_access cache-host allow|deny [!]aclname ...
#
# The syntax is identical to 'http_access' and the other lists of
# ACL elements. See the comments for 'http_access' below, or
# the Squid FAQ (http://www.squid-cache.org/FAQ/FAQ-10.html).
#
#Default:
# none
### Den Proxy eintragen, der von diesem Proxy
### nach Daten gefragt wird.
### Erforderlich, wenn dieser Proxy keinen direkten
### Zugang zum Internet hat.
cache_peer 123.123.123.123 parent 8000 0 no-query default


# TAG: hierarchy_stoplist
# A list of words which, if found in a URL, cause the object to
# be handled directly by this cache. In other words, use this
# to not query neighbor caches for certain objects. You may
# list this option multiple times. Note: never_direct overrides
# this option.
#We recommend you to use at least the following line.
hierarchy_stoplist cgi-bin ?

#
#Suggested default:
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern (Release|Packages(.gz)*)$ 0 20% 2880
refresh_pattern . 0 20% 4320


# TAG: never_direct
#Default:
# none
never_direct allow all

# TAG: hosts_file

#Default:
# hosts_file /etc/hosts
#
hosts_file /etc/host

Änderungen wirksam werden lassen

Wenn in /etc/squid/squid.conf die Berechtigungen geändert wurden, werden diese aktiviert mit /etc/init.d/squid reload. Ein Neustart mit /etc/init.d/squid restart ist nicht erforderlich und würde zudem auch länger dauern und die Verbindungen der Clientcomputer unterbrechen.

# /etc/init.d/squid reload