Inhaltsverzeichnis
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-Adresse192.168.0.1
an dem Port3128
, 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 alsncsa_users
erlauben.
http_access allow localhost ncsa_users http_access allow localnetwork ncsa_users
- Verhindern der Anzeige der Squid-Proxy-Server-Version bei Apache Webserver-Fehlermeldungen.
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:
SquidAnalyzer-3.1.tar.gz
(Programm) SquidAnalyzergd-2.0.35.tar.gz
(libgd) www.libgd.orglibpng
(libpng) www.libpng.orgperl
5.005_03 oder höher PerlCPAN
www.cpan.org/
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 €
# 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