Benutzer-Werkzeuge

Webseiten-Werkzeuge


tachtler:squid_centos_5

squid CentOS 5

Squid ist ein „caching proxy“ welcher die Protokolle HTTP, HTTPS, FTP, uvm. unterstützt. Es kann eine Reduzierung der Bandweite der Internetverbindung und eine Reduzierung der Ladezeiten von Internetseiten durch den Einsatz eines Proxy-Servers erreicht werden. Ein weiterer sehr wichtiger Punkt beim Einsatz eines Proxy-Servers ist die Möglichkeit der Zugriffsbeschränkung und der Authentifizierung beim Zugriff auf das Internet aus dem lokalen Netzwerk.

Installation

Folgendes Paket sollte für den Betrieb von Squid als Proxy-Server installiert werden:

  • squid (squid.i386)

Konfiguration

Um einen Proxy-Sever wie Squid betreiben zu können, ist eine Grundkonfigurationen notwendig.

Konfigurationsdatein

Nach der Installation des Squid-Paketes sind folgende Konfigurationsdateien von Bedeutung:

  • /etc/squid/squid.conf (Hauptkonfigurationsdatei)
  • /etc/logrotate.d/squid (Anweisungen zum logrotate)
  • /etc/pam.d/squid (PAM-Legitimationsanweisungen)
  • /etc/sysconfig/squid (Starteinstellungen squid-Daemon)
  • /etc/httpd/conf.d/squid.conf (httpd-Daemon CGI-Konfigurationen für Apache Webserver)

Konfigurationsdatei /etc/squid/squid.conf

Da die Konfigurationsdatei /etc/squid/squid.conf aufgrund von sehr vielen Kommentar- und Leerzeichen sehr schnell an Übersichtlichkeit verliert, kann mit folgendem Befehl eine Ausgabe ohne Kommentar- und Leerzeilen erzeugt werden, welche dann nach der Grundinstallation von Squid wie folgt aussehen sollte:

# egrep -v '(^#|^$)' /etc/squid/squid.conf
Die Konfigurationsdatei /etc/squid/squid.conf ohne Kommentar- und Leerzeichen:
http_port 3128
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
cache deny QUERY
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
access_log /var/log/squid/access.log squid
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern .               0       20%     4320
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443
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 CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access deny all
http_reply_access allow all
icp_access allow all
coredump_dir /var/spool/squid

Änderungen an /etc/squid/squid.conf

Folgenden Änderungen werden für einen ersten grundlegenden Betrieb des Squid-Proxy-Servers an der Konfigurationsdatei /etc/squid/squid.conf vorgenommen:

  • Der Squid-Proxy-Server wird nicht an allen Netzwerkkarten (0.0.0.0:3128, wie in der Standardkonfiguration vorgegeben) lauschen, sondern an (127.0.0.1:3128) und nur an der Netzwerkkarte die ins interne Netzwerk, in diesem Beispiel die Netzwerkkarte mit der IP-Adresse 192.168.0.1 an dem Port 3128, lauschen.

http_port 127.0.0.1:3128
http_port 192.168.0.1:3128

  • Es soll nicht das Standard-Log-Format von Squid-Proxy-Server verwendet werden, sondern ein anderes, auch als common bezeichnet.

logformat common %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %<st %Ss:%Sh

  • Zweite Einstellung, das das common-Log-Format angezogen wird:

access_log /var/log/squid/access.log common

  • Der Squid-Proxy-Server soll nicht nur als „caching proxy“ sondern auch zur Authentifizierung (NCSA-Auth) verwendet werden.

auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd
auth_param basic children 3
auth_param basic realm Bitte Internet-Authentifizierung eingeben
auth_param basic credentialsttl 30 minutes
auth_param basic casesensitive off

  • Die ACL (Access Control List) des Squid-Proxy-Server wird den internen Sicherheitsansprüchen angepasst.

acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
# Tachtler
acl localnetwork src 192.168.0.0/28
acl SSL_ports port 443
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443         # https
# Tachtler - DISABLED -
# acl Safe_ports port 70                # gopher
# Tachtler - DISABLED -
# acl Safe_ports port 210               # wais
acl Safe_ports port 1025-65535  # unregistered ports
# Tachtler - DISABLED -
# acl Safe_ports port 280               # http-mgmt
# Tachtler - DISABLED -
# acl Safe_ports port 488               # gss-http
# Tachtler - DISABLED -
# acl Safe_ports port 591               # filemaker
# Tachtler - DISABLED -
# acl Safe_ports port 777               # multiling http
# Tachtler
# NCSA-Auth.
acl ncsa_users proxy_auth REQUIRED
acl CONNECT method CONNECT
:!: Wichtig ist hier die Zeile acl ncsa_users proxy_auth REQUIRED, welche eine Authentifizierung durch NCSA-Auth definiert!

  • Zugriff auf den Squid-Proxy-Server nur vom localhost undlocalnetwork und nur als ncsa_users erlauben.

http_access allow localhost ncsa_users
http_access allow localnetwork ncsa_users

httpd_suppress_version_string off

  • Hostname des Squid-Proxy-Servers für verschiedene Anzeigen definieren.

visible_hostname proxy.tachtler.net

  • Änderung der englischen auf deutsche Fehlermeldungen.

error_directory /usr/share/squid/errors/German

:!: Die Konfigurationsdatei /etc/squid/squid.conf ohne Kommentar- und Leerzeichen nach den Änderungen:

# egrep -v '(^#|^$)' /etc/squid/squid.conf
http_port 127.0.0.1:3128
http_port 192.168.0.1:3128
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
cache deny QUERY
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
logformat common %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %<st %Ss:%Sh
access_log /var/log/squid/access.log common
auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd
auth_param basic children 3
auth_param basic realm Bitte Internet-Authentifizierung eingeben
auth_param basic credentialsttl 30 minutes
auth_param basic casesensitive off
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern .               0       20%     4320
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl localnetwork src 192.168.0.0/28
acl SSL_ports port 443
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443         # https
acl Safe_ports port 1025-65535  # unregistered ports
acl ncsa_users proxy_auth REQUIRED
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost ncsa_auth
http_access allow localnetwork ncsa_users
http_access deny all
http_reply_access allow all
icp_access allow all
httpd_suppress_version_string off
visible_hostname proxy.tachtler.net
error_directory /usr/share/squid/errors/German
coredump_dir /var/spool/squid

NCSA-Authentifizierung

Um die NCSA-Authentifizierung (NCSA-style Username und Passwort Authentifizierung) aktivieren zu können, fehlt noch eine Passwort-Datei in der Benutzernamen und Passwörter hinterlegt werden.

Die Anlage einer solchen NCSA-Authentifizierungs - Passwort-Datei kann im Verzeichnis /etc/squid mit folgendem Befehl erreeicht werden:

# htpasswd -c -m /etc/squid/passwd klaus
New password: 
Re-type new password: 
Adding password for user klaus
* Es wird die Datei passswd im Verzeichnis /etc/squid angelegt. Die Option -c dient zur erstmaligen Erstellung der Passwort-Datei /etc/squid/passwd.

* Das Programm htpasswd generiert für den angegeben Benutzer, in diesem Fall klaus einen Eintrag in der Passwort-Datei /etc/squid/passwd mit dem Benutzernamen klaus und einem verschlüsselten Passwort.

* Die Option -m schaltet die Nutzung der MD5-Verschlüsselung ein.

Um weitere Benutzer zur Passwort-Datei /etc/squid/passwd hinzuzufügen, wird eine Variante des oben beschriebenen Befehls, ohne die Option -c verwendet.

# htpasswd -m /etc/squid/passwd petra
New password: 
Re-type new password: 
Adding password for user petra

Die Passwort-Datei /etc/squid/passwd kann mit folgendem Befehl zur Anzeige gebracht werden und sollte wie folgt aussehen:

# cat /etc/squid/passwd 
root:$epr1$3R1z0...$V4Z6fhdsnfujer384gidj0
klaus:$upr6$hqBt2/..$MnAncgdt46skgfz4ndcyrt
petra:$asr3$vtwex...$s.mchdt264hdteiu5oNty0

LDAP-Authentifizierung

Für die Authentifizierung gegen einen LDAP-Server, hier OpenLDAP ist weder eine

  • /etc/squid/passwd-Datei erforderlich, noch
  • durch die vorhergehnde NCSA-Auth gemachten Einträge in der Konfigurationsdatei /etc/squid/squid.conf

Falls folgende Einträge in der /etc/squid/squid.conf sein sollten, sind diese wieder zu entfernen:

auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd
auth_param basic children 3
auth_param basic realm Bitte Internet-Authentifizierung eingeben
auth_param basic credentialsttl 30 minutes
auth_param basic casesensitive off
und ersetzen dies gegen:
auth_param basic program /usr/lib/squid/squid_ldap_auth -b "dc=tachtler,dc=net" -f "uid=%s" -h ldap.tachtler.net
auth_param basic children 3
auth_param basic realm Bitte Internet-Authentifizierung eingeben
auth_param basic credentialsttl 30 minutes
auth_param basic casesensitive off

Desweiteren wird folgender Eintrag:

acl ncsa_users proxy_auth REQUIRED
gegen diesen Eintrag ersetzt:
acl ldap_auth proxy_auth REQUIRED

Zum Abschluss werden noch folgende Einträge:

http_access allow localhost ncsa_users
http_access allow localnetwork ncsa_users
durch nachfolgende Einträge ersetzt:
http_access allow localhost ldap_auth
http_access allow localnetwork ldap_auth

Die Konfigurationsdatei /etc/squid/squid.conf ohne Kommentar- und Leerzeichen nach den Anpassungen für LDAP-Authentifizierungen:

# egrep -v '(^#|^$)' /etc/squid/squid.conf
http_port 127.0.0.1:3128
http_port 192.168.0.1:3128
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
cache deny QUERY
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
logformat common %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %<st %Ss:%Sh
access_log /var/log/squid/access.log common
auth_param basic program /usr/lib/squid/squid_ldap_auth -b "dc=tachtler,dc=net" -f "uid=%s" -h ldap.tachtler.net
auth_param basic children 3
auth_param basic realm LDAP - Bitte geben Sie ihre Internet-Authentifizierung ein!
auth_param basic credentialsttl 30 minutes
auth_param basic casesensitive off
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern .               0       20%     4320
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl localnetwork src 192.168.0.0/28
acl SSL_ports port 443
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443         # https
acl Safe_ports port 1025-65535  # unregistered ports
acl ldap_auth proxy_auth REQUIRED
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost ldap_auth
http_access allow localnetwork ldap_auth
http_access deny all
http_reply_access allow all
icp_access allow all
httpd_suppress_version_string off
visible_hostname proxy.tachtler.net
error_directory /usr/share/squid/errors/German
coredump_dir /var/spool/squid

LDAP-Authentifizierung ohne anonymous Authentifizierung

Falls der verwendete LDAP-Server keinen aynonymous bind erlaubt, was aus Sicherheitsgründen sicherlich wünschenswert ist, sind folgende Änderungen zusätzlich zur wie oben beschriebenen LDAP-Authentifizierung notwendig:

Die Konfigurationsdatei /etc/squid/squid.conf hat folgenden Stand:

auth_param basic program /usr/lib/squid/squid_ldap_auth -b "dc=tachtler,dc=net" -f "uid=%s" -h ldap.tachtler.net
auth_param basic children 3
auth_param basic realm Bitte Internet-Authentifizierung eingeben
auth_param basic credentialsttl 30 minutes
auth_param basic casesensitive off
Hier muss nur die erste Zeile wie folgt erweitert werden:
auth_param basic program /usr/lib/squid/squid_ldap_auth -b "dc=tachtler,dc=net" -f "uid=%s" -h ldap.tachtler.net -D "cn=<Benutzername für anonymous bind>,dc=tachtler,dc=net" - W /etc/squid/ldap_passwd

In die noch neu anzulegende Datei /etc/squid/ldap_passwd ist das zum <Benutzername für anonymous bind> gehörende Passwort einzutragen.

Die Datei /etc/squid/ldap_passwd kann mit folgendem Befehl angelegt werden:

# touch /etc/squid/ldap_passwd
und sollte mit folgendem Befehle die Besitzerrechte auf lesend und schreibend durch root und lesend durch den Benutzer squid und sonst keine Rechte für alle anderen Benutzer erhalten:
# chown root.squid /etc/squid/ldap-passwd
und die Benutzerrechte mit folgendem Befehl
# chmod 640 /etc/squid/ldap-passwd

Ein Beispiel für den Inhalt der Datei /etc/squid/ldap-passwd kann wie folgt aussehen:

geheim
* Hier wäre das Passwort welches zum <Benutzername für anonymous bind> gehört einfach geheim und kann ohne weitere Angaben so in die Datei /etc/squid/ldap-passwd geschrieben werden.

Squid ohne Cache betreiben

Neben den vielen eindeutigen Vorteilen von Cache-Proxys gibt es jedoch auch gute Gründe, die gegen einen Cache-Proxy sprechen. In einigen Fällen kann es durchaus sinnvoll sein, auf eine Cache-Funktionalität zu verzichten.

Vorteile eines Cache-Proxy's:

  • Beschleunigung - Da die Antwortzeiten des Proxys aus dem eigenen Cache meist deutlich kürzer sind - abgesehen von Webservern im lokalen Netz, kann je nach Entfernung und Anbindung zum Webserver die Antwortzeit aus dem Cache um den Faktor 2 bis 100 schneller sein, als direkte Zugriffe.
  • Bandbreite - Durch die Datenhaltung im Cache werden viele Anfragen an den Zielserver überflüssig. Der Proxy liefert die Antwort aus dem Cache, anstatt sie über eine (externe) Verbindung zu holen.
  • Verfügbarkeit - Bei unsicheren Verbindungen oder schlechter Verfügbarkeit externer Webserver kann ein Proxyserver u.U. auch zu einer Erhöhung der Verfügbarkeit dieser Inhalte führen. Wurde ein Objekt einmal im Cache abgelegt, kann es bei Ausfall der Verbindung noch aus dem Cache geliefert werden.

Nachteile eines Cache-Proxy's:

  • Kosten eines Cache - Ein Cache braucht eine entsprechende Speicherkapazität, sowohl auf der Festplatte sowie auch im Hauptspeicher.
  • Verzögerungen durch einen Cache - Ein Cache spart Ladezeit. Nutzen Sie den Proxy nur für Webserver in einem lokalen Netz mit guter Bandbreite, kann dieser Effekt unter sehr ungünstigen Umständen sogar zu geringfügig längeren Antwortzeiten führen als bei einem direkten Zugriff.
  • Aktualität - Die Aktualität, kann ein starkes Argument gegen einen Cache sein. Teilweise kann es zur Auslieferung veralteter Objekte kommen. Ist eine laufende Aktualität aller Informationen ein zwingendes Argument, ist evtl. von einem Cache abzuraten.
  • Rechtliche Probleme - Je nach aktueller Rechtslage können Probleme in Bereichen wie Urheberrecht auftreten.

Um den Cache-Speicher zu deaktivieren ist folgender Eintrag in der Konfigurationsdatei /etc/squid/suqid.conf durchzuführen:

cache_dir null /var/spool/squid

Squid hinter einem DansGuardian

Fall der Squid hinter einem Content-Filter (Inhaltsfilter für Web-Seiten) wie DansGuardian betrieben wird, sind einige Dinge zu beachten:

Log-Schreibung

Falls der Squid hinter einem DansGuardian der Proxy-Server ist, ist in der Log-Datei /var/log/squid/access.log als absendende IP-Adresse nur noch die IP-Adresse des DansGuardian zu sehen. Dies kann mit einer Konfiguration in der Konfiguratiosdatei /etc/squid/squid.conf und der Funktion follow_x_forwarded_for korrigiert werden. Der Eintrag lautet:

follow_x_forwarded_for allow localhost
follow_x_forwarded_for allow localnetwork

Starten des squid-Daemons

Bevor der Proxy-Server Squid in den Lastbetrieb genommen wird, sollten noch die „Swap Directories“ mit nachfolgendem Befehl angelegt werden.

# squid -z
2008/08/11 11:08:54| Creating Swap Directories

Die „Swap Directories“ dienen zum „caching“ / zwischenspeichern von statischen „content“ / Seiteninhalten, welche der Proxy-Server ohne erneutes Anfragen beim eigentlichen Ziel-Server für eine gewisse Zeit, eben aus diesem Speicher, an den Browser zur Anzeige übergibt. Dies vermindert den Netzwerkverkehr nach außen und die Geschwindigkeit der anzuzeigenden Seiten nach innen!

Um den Proxy-Server Squid zu starten kann folgender Befehl angewandt werden:

# service squid start
init_cache_dir /var/spool/squid... Starting squid: .       [  OK  ]

Um den Proxy-Server Squid zu stoppen kann folgender Befehl angewandt werden:

# service squid stop
Stopping squid: .                                          [  OK  ]

Eine Überprüfung ob der Start des Proxy-Servers Squid erfolgreich war kann mit folgendem Befehl durchgeführt werden, welcher nachfolgende Ausgabe erzeugen sollte:

# netstat -tulpen
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       User       Inode      PID/Program name             
tcp        0      0 192.168.0.1:3128            0.0.0.0:*                   LISTEN      0          67156      1240/(squid)        
tcp        0      0 127.0.0.1:3128              0.0.0.0:*                   LISTEN      0          67155      1240/(squid)

Die Ausgabe in der Log-Datei, hier /var/log/squid/cache.log sollte folgendermaßen aussehen:

2008/08/11 14:18:14| Squid Cache (Version 2.6.STABLE6): Exiting normally.
2008/08/11 14:42:40| Starting Squid Cache version 2.6.STABLE6 for i686-redhat-linux-gnu...
2008/08/11 14:42:40| Process ID 1240
2008/08/11 14:42:40| With 1024 file descriptors available
2008/08/11 14:42:40| Using epoll for the IO loop
2008/08/11 14:42:40| DNS Socket created at 0.0.0.0, port 46515, FD 5
2008/08/11 14:42:40| Adding domain tachtler.net from /etc/resolv.conf
2008/08/11 14:42:40| Adding nameserver 192.168.0.1 from /etc/resolv.conf
2008/08/11 14:42:40| helperOpenServers: Starting 5 'ncsa_auth' processes
2008/08/11 14:42:40| User-Agent logging is disabled.
2008/08/11 14:42:40| Referer logging is disabled.
2008/08/11 14:42:40| Unlinkd pipe opened on FD 15
2008/08/11 14:42:40| Swap maxSize 102400 KB, estimated 7876 objects
2008/08/11 14:42:40| Target number of buckets: 393
2008/08/11 14:42:40| Using 8192 Store buckets
2008/08/11 14:42:40| Max Mem  size: 8192 KB
2008/08/11 14:42:40| Max Swap size: 102400 KB
2008/08/11 14:42:40| Local cache digest enabled; rebuild/rewrite every 3600/3600 sec
2008/08/11 14:42:40| Rebuilding storage in /var/spool/squid (CLEAN)
2008/08/11 14:42:40| Using Least Load store dir selection
2008/08/11 14:42:40| Set Current Directory to /var/spool/squid
2008/08/11 14:42:40| Loaded Icons.
2008/08/11 14:42:40| Accepting proxy HTTP connections at 127.0.0.1, port 3128, FD 17.
2008/08/11 14:42:40| Accepting proxy HTTP connections at 192.168.0.1, port 3128, FD 18.
2008/08/11 14:42:40| Accepting ICP messages at 0.0.0.0, port 3130, FD 19.
2008/08/11 14:42:40| WCCP Disabled.
2008/08/11 14:42:40| Ready to serve requests.
2008/08/11 14:42:40| Done reading /var/spool/squid swaplog (5 entries)
2008/08/11 14:42:40| Finished rebuilding storage from disk.
2008/08/11 14:42:40|         0 Entries scanned
2008/08/11 14:42:40|         0 Invalid entries.
2008/08/11 14:42:40|         0 With invalid flags.
2008/08/11 14:42:40|         0 Objects loaded.
2008/08/11 14:42:40|         0 Objects expired.
2008/08/11 14:42:40|         0 Objects cancelled.
2008/08/11 14:42:40|         0 Duplicate URLs purged.
2008/08/11 14:42:40|         0 Swapfile clashes avoided.
2008/08/11 14:42:40|   Took 0.0 seconds (  0 objects/sec).
2008/08/11 14:42:40| Beginning Validation Procedure
2008/08/11 14:42:40|   Completed Validation Procedure
2008/08/11 14:42:40|   Validated 0 Entries
2008/08/11 14:42:40|   store_swap_size = 32k
2008/08/11 14:42:41| storeLateRelease: released 0 objects

Um den squid-Daemon dauerhaft bei jedem Neustart des Rechners automatisch zu starten geben Sie bitte als root folgenden Befehl ein, um zu überprüfen wie die aktuelle Konfiguration des Startverhaltens des aktuellen „squid“-Daemons aussieht:

chkconfig --list | grep squid
squid           0:off   1:off   2:off   3:off   4:off   5:off   6:off

Falls die Ausgabe wie oben gezeigt erscheinen sollte, wird der squid-Daemon nicht bei jedem Neustart des Rechners gestartet. Um dies zu ändern geben Sie bitte folgende Befehle ein:

# chkconfig squid on
* Aktivieren des automatischen Startens des „squid“-Daemons.

Das erneute Eingeben des Befehls zur Überprüfung, wie die aktuelle Konfiguration des Startverhaltens des squid-Daemons aussieht, sollte dann wie folgt erscheinen:

# chkconfig --list | grep squid
squid           0:off   1:off   2:on    3:on    4:on    5:on    6:off

Cache Manager Interface

Squid liefert ein recht einfach zu bedienendes und sehr aussagekräftiges Webinterface mit, das Cache Manager Interface (CMI).

Das CMI ist ein CGI (Common Gateway Interface). Dieses CGI kann auf einen beliebigen Webserver installiert werden. Voraussetzung: Der Webserver unterstützt CGI-Funktionalität und es besteht eine Netzverbindung zum Proxyserver.

Konfiguration CMI

Um das CMI nutzen zu können, muss zum einen das CGI auf einem Webserver installiert werden und die nötigen Optionen in der Konfigurationsdatei /etc/squid/squid.conf angepasst werden.

Installation des CMI

Die Installation des CMI wurde bereits durch die Installation des squid an sich selbst durch das RPM von CentOS durchgeführt. Es befindet sich eine Konfigurationsdatei des, hier Apache Webserver's, im folgenden Verzeichnis

  • /etc/httpd/conf.d/squid.conf

Der Inhalt der Datei sieht nach der Installation wie folgt aus:

#
# This is /etc/httpd/conf.d/squid.conf
#
 
ScriptAlias /Squid/cgi-bin/cachemgr.cgi /usr/lib/squid/cachemgr.cgi
 
# Only allow access from localhost by default
<Location /Squid/cgi-bin/cachemgr.cgi>
 order allow,deny
 allow from localhost.localdomain
 # Add additional allowed hosts as needed
 # allow from .example.com
</Location>

Der Aufruf des Scripts kann grundsätzlich durch folgende Eingabe im Browser erfolgen:

http://localhost/Squid/cgi-bin/cachemgr.cgi

Konfiguration squid.conf

In der Konfigurationsdatei squid.conf finden Sie in der Standardkonfiguration eine Access-Liste mit dem Namen manager:

acl manager proto cache_object 
Diese Access-Liste vom Typ proto beinhaltet das Protokoll cache_object. Über dieses Squid-eigene Protokoll werden die Zugriffe des CMI abgehandelt.

Die Zugriffe auf den Cachemanager erfolgen über den HTTP-Port. Daher wird der Zugriff auch über http_access geregelt. In der Standardkonfiguration ist nur dem lokalen Server selbst (localhost) der Zugriff erlaubt:

http_access allow manager localhost 
http_access deny manager 
Wenn das CMI auch von anderen Clients genutzt werden soll, muss diese entsprechend wie nachfolgend dargestellt freigeben werden:
http_access allow manager localhost 
http_access allow manager localnetwork
http_access deny manager

Sofern noch nicht geschehen, sollten Sie noch ein Passwort für den Zugriff vergeben.

cachemgr_passwd disable shutdown offline_toggle 
cachemgr_passwd bekannt info 
cachemgr_passwd geheim all 
:!: Die Passwörter werden im Klartext in der Konfigurationsdatei abgelegt. Sie sind damit kaum geschützt.

Eine Passwort-Abfrage ist im obigen Beispiel für die Funktion shutdown abgeschaltet. Für die Funktionen info und all werden jeweils separate Passworter vergeben!

Hier noch einmal die gesamte Kondiguratiosndatei /ect/squid/squid.conf, welche mit folgendem Befehl und folgender Ausgabe angezeigt werden kann:

# egrep -v '(^#|^$)' /etc/squid/squid.conf
http_port 127.0.0.1:3128 transparent
http_port 192.168.0.1:3128 transparent
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
cache deny QUERY
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
logformat common %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %<st %Ss:%Sh
access_log /var/log/squid/access.log common
auth_param basic program /usr/lib/squid/squid_ldap_auth -b "dc=tachtler,dc=net" -f "uid=%s" -h ldap.tachtler.net
auth_param basic children 3
auth_param basic realm LDAP - Bitte geben Sie ihre Internet-Authentifizierung ein!
auth_param basic credentialsttl 30 minutes
auth_param basic casesensitive off
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern .               0       20%     4320
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl localnetwork src 192.168.0.0/28
acl SSL_ports port 443
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443         # https
acl Safe_ports port 1025-65535  # unregistered ports
acl ldap_auth proxy_auth REQUIRED
acl CONNECT method CONNECT
http_access allow manager localhost
http_access allow manager localnetwork
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access allow localnetwork ldap_auth
http_access deny all
http_reply_access allow all
icp_access allow all
cache_mgr squid
httpd_suppress_version_string off
visible_hostname proxy.tachtler.net
cachemgr_passwd geheim all
error_directory /usr/share/squid/errors/German_Tachtler
coredump_dir /var/spool/squid

SquidAnalyzer

SquidAnalyzer untersucht die Log-Datei /var/log/squid/access.log im Standard-Log-Format von Squid und erstellt Statistiken und Reports über Zugriffe, Bytes, Benutzer, Netze, Liste von URL's und Listen von Domains. Die Auswertungen orientieren sich an den Benutzern und an der Bandbreite des installierten Squid.

:!: WICHTIG !!! - Die Log-Auswertung erfolgt nur dann, wenn das Log-Format squid ist. Andere Log-Formate wie z.B.

  • squidmime
  • common
  • combined

:!: werden NICHT unterstützt !!!

Voraussetzungen SquidAnalyzer

Als Voraussetzung für die Installation von SquidAnalyzer sind folgende Komponenten erforderlich:

Herunterladen SquidAnalyzer

Di Programmdateien von SquidAnalyzer können unter folgendem Link heruntergeladen werden:

Die benötigte libgd kann unter folgendem Link heruntergeladen werden:

Installation Systemvoraussetzungen SquidAnalyzer

Ab hier werden root-Rechte zur Ausführung der nachfolgenden Befehle benötigt. Um root zu werden geben Sie bitte folgenden Befehl ein:

$ su -
Password: 

libgd

Die Datei gd-2.0.35.tar.gz muss zuerst mit folgendem Befehl Entpackt werden:

# tar xfzv gd-2.0.35.tar.gz

Das so erhaltene Verzeichnis, hier z.B. /tmp/gd-2.0.35 beinhaltet eine Datei mit dem Namen INSTALL. Die hier aufgeführte Beschreibung kann zur Installation der libgd genutzt werden.

Die Schritte zusammengefasst sollten wie folgt aussehen:

# ./configure

# make

# make check

# make install

libpng

Die Installation der libpng kann über den yum-Paketmanager mit folgendem Befehl erfolgen:

# yum install libpng

perl

Die Installation der Script-Sprache perl kann ebenfalls einfach über den yum-Paketmanager mit folgendem Befehl erfolgen:

# yum install perl

CPAN

Die Konfiguration von CPAN ist ebenfalls in diesem dokuwiki unter CPAN beschrieben.

Folgende Perl-Module sind zur Ausführung von SquidAnalyzer notwendig:

  • GD
  • GD::Graph
  • GD::Graph3d

Zunächst wird eine CPAN-Shell mit folgendem Befehl gestartet:

# perl -MCPAN -e shell

Danach wird als erstes das Perl-Modul GD mit folgendem Befehl über die CPAN-Shell installiert:

cpan> install GD

Als zweites wird anschließend dann das Perl-Modul GD::Graph mit folgendem Befehl über die CPAN-Shell installiert:

cpan> install GD::Graph

Als letztes wird abschließend das Perl-Modul GD::Graph3d mit folgendem Befehl über die CPAN-Shell installiert:

cpan> install GD::Graph3d

Mit folgendem Befehl wird die CPAN-Shell verlassen:

cpan> q
Terminal does not support GetHistory.
Lockfile removed.

Installation SquidAnalyzer

Die Datei SquidAnalyzer-3.1.tar.gz muss zuerst mit folgendem Befehl Entpackt werden:

# tar xfzv SquidAnalyzer-3.1.tar.gz

Das so erhaltene Verzeichnis, hier z.B. /tmp/SquidAnalyzer-3.1 beinhaltet eine Datei mit dem Namen INSTALL. Die hier aufgeführte Beschreibung dient zur Installation des SquidAnalyzer.

Die Schritte zusammengefasst sollten wie folgt aussehen:

# perl Makefile.PL
Writing Makefile for SquidAnalyzer

# make
cp SquidAnalyzer.pm blib/lib/SquidAnalyzer.pm

# make install
Installing /usr/lib/perl5/site_perl/5.8.8/SquidAnalyzer.pm
Writing /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/auto/SquidAnalyzer/.packlist
Appending installation info to /usr/lib/perl5/5.8.8/i386-linux-thread-multi/perllocal.pod

Konfiguration SquidAnalyzer

Der erste Schritt zur Konfiguration beginnt mit der Anlage des Verzeichnisses /etc/squidanalyzer mit folgendem Befehl:

# mkdir /etc/squidanalyzer

Danach wird das Verzeichnis, hier z.B. /tmp/SquidAnalyzer-3.1/lang mit folgendem Befehl nach /etc/squidanalyzer kopiert:

# cp -R /tmp/SquidAnalyzer-3.1/lang/ /etc/squidanalyzer/

Als zweiten Schritt wird das Perl-Script /tmp/SquidAnalyzer-3.1/squid-analyzer in das Verzeichnis /usr/local/bin/ kopiert:

# cp /tmp/SquidAnalyzer-3.1/squid-analyzer /usr/local/bin/

Als dritten Schritt wird die Datei /tmp/SquidAnalyzer-3.1/squidanalyzer.conf in das Verzeichnis /etc/squidanalyzer kopiert:

# cp /tmp/SquidAnalyzer-3.1/squidanalyzer.conf /etc/squidanalyzer/squidanalyzer.conf

Die Konfigurationsdatei /etc/squidanalyzer/squidanalyzer.conf könnte wir folgt aussehen:

####
# This file is the default configuration file for SquidAnalyzer
# Edit it to match your needs and copy it under /etc/squidanalyzer.conf
#####
 
# Where SquidAnalyzer should dump all HTML and images files.
# Choose a path that can be read by a Web browser
# Tachtler
# default: Output          /usr/local/apache/htdocs/SquidReport
Output          /var/www/html/squid/squidanalyzer
 
# Set the path to the Squid log file
LogFile         /var/log/squid/access.log
 
# Set the file containing network alias name. Network are
# show as Ip addresses so if you want to display name instead
# create a file with this format :
# LOCATION_NAME IP_NETWORK_ADDRESS
# Separator must be a tabulation
NetworkAlias    /etc/squidanalyzer/network-aliases
 
# Set the file containing user alias name. If you don't have auth_proxy
# enable user are seen as Ip addresses, or if you want to replace login
# name by full user name, create a file with this format :
# FULL_USERNAME IP_ADDRESS || LOGIN_NAME
# Separator must be a tabulation
UserAlias       /etc/squidanalyzer/user-aliases
 
# How do we sort Network, User and Url report screen
# Value can be: bytes, hits or duration. Default is bytes.
OrderNetwork    bytes
OrderUser       bytes
OrderUrl        bytes
 
# How do we sort Mime types report screen
# Value can be: bytes or hits. Default is bytes.
OrderMime       bytes
 
# Should we display user details. This will show all URL read
# by user. Take care to have enougth space disk for large user.
UrlReport       1
 
# Run in quiet mode or print debug information
QuietMode       1
 
# Cost of the bandwith per Mb. If you want to generate invoice per Mb
# for bandwith traffic this can help you. Value 0 mean no cost.
# Tachtler
# default: CostPrice    0.5
CostPrice       0.01
 
# Currency of the bandwith cost
Currency        &euro;
 
# Top number of url to show
TopNumber       100
 
# Path to the file containing client ip addresses, network ip address,
# and/or auth login to exclude from report
Exclude /etc/squidanalyzer/excluded
 
# Language to use (currently only En and Fr are available)
Lang            /etc/squidanalyzer/lang/en_US.txt
 
# Date format use to display date (year = %y, month = %m and day = %d)
DateFormat      %y-%m-%d
 
# Custom header. Must be a path to a text file containing HTML code that
# will be placed just after the body tag and just before the program name
# and version. Default is defined internally if this directive is not set
# to a valid file.
# Tachtler
# default: #HeaderFile      /etc/squidanalyzer/lang/fr_header.txt
HeaderFile      /etc/squidanalyzer/lang/en_US_header.txt
 
# Custom Footer. Must be a path to a text file containing HTML code that
# will be placed at the bottom of each page just before the end if the
# body tag. Default is defined internally if this directive is not set
# to a valid file.
# Tachtler
# default: #FooterFile      /etc/squidanalyzer/lang/fr_footer.txt
FooterFile      /etc/squidanalyzer/lang/en_US_footer.txt

Ausführen von SquidAnalyzer

Um das Perl-Script ausführen zu können, kann mit folgendem Befehl in das Verzeichnis /usr/local/bin gewechselt werden:

# cd /usr/local/bin

Das Perl-Script wird mit folgendem Befehl ausgeführt:

# ./squid-analyzer /etc/squidanalyzer/squidanalyzer.conf

:!: Evtl. kann darüber nachgedacht werden, das Perl-Script als cron-Job auszuführen!

Problembehebung von SquidAnalyzer

:!: WICHTIG - Falls die Generierung von Bildern im PNG-Format nicht funktionieren sollte, kann durch Anpassungen am Perl-Script mit dem Namen

  • /usr/lib/perl5/site_perl/5.8.8/SquidAnalyzer.pm

auf die Generierung von Bildern im GIF-Format umgestellt werden.

Zum Austausch von sämtlichen Datei-Erweiterungen und Generierungen auf das GIF-Format öffnen Sie das Perl-Script mit dem Namen /usr/lib/perl5/site_perl/5.8.8/SquidAnalyzer.pm erfolgt im Editor vi oder vim. Dazu wird die Datei mit folgendem Befehl im Editor vi oder vim geöffnet:

# vim /usr/lib/perl5/site_perl/5.8.8/SquidAnalyzer.pm

Anschließend geben Sie bitte folgendes im Editor vi oder vim ein:

:%s/png/gif/

Abschließend speichern Sie Ihre Änderungen mit folgendem Befehl des Editors vi oder vim:

:wq

Cookies helfen bei der Bereitstellung von Inhalten. Durch die Nutzung dieser Seiten erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Rechner gespeichert werden. Weitere Information
tachtler/squid_centos_5.txt · Zuletzt geändert: 2012/06/11 11:34 von klaus