Inhaltsverzeichnis

Management und Überwachung des Squid-Proxy-Servers

Squid Proxy Logo

Im letzten Kapitel befassen wir uns nun mit dem Managemnt und Überwachung unseres Squid-Proxy-Server unter CentOS 6.x.

Cache Manager Interface

Der Squid-Proxy-Server bringt bei der Installation das CMI1), ein sehr umfangreiches WEB-basierendes Management Interface, mit. Das CMI ist ein CGI (Common Gateway Interface). Dieses CGI2) kann auf einen beliebigen Webserver installiert werden, der natürlich eine Verbindung zu unserem Proxyserver haben, wie auch die CGI-Funktionalität unterstützen muss.

cachemgr.conf

In der cachemgr.conf auf welchen Zielhost (Squid_Server zugegriffen werden soll. Mit dem Editor unserer Wahl bearbeiten wir diese Konfigurationsdatei.

 # vim /etc/squid/cachemgr.conf
/etc/squid/cachemgr.conf
# This file controls which servers may be managed by
# the cachemgr.cgi script
#
# The file consists of one server per line on the format
#   hostname:port  description
#
# Specifying :port is optional. If not specified then
# the default proxy port is assumed. :* or :any matches
# any port on the target server.
#
# hostname is matched using shell filename matching, allowing
# * and other shell wildcards.
#
# Django 2011-11-17 Definition des Squid-Proxy-Servers
# default : localhost
proxy.dmz.nausch.org

squid.conf

In der zentralen Konfigurationsdatei unseres Squid-Servers, nehmen wir nun noch die notwendigen Konfigurationen vor. So erlauben wir nicht nur den Zugriff auf den CMI vom lokalen Host aus, sondern auch aus dem lokalen Netzwerk. Hierzu erweitern wir Freigabe der ACL für unseren manager

Ferner setzen wir noch ein Passwort für unseren Cache-Manager cache_mgr, den wir bereits bei der Erstkonfiguration angelegt hatten.

Den Zugriff auf die Menüpunkte:

sperren wir. Hierzu tragen wir die folgende Zeile am Ende unserer Konfigurationsdatei ein:

Wollen wir einzelnen Befehle sperren, so Hilft die Dokumentation der Squid configuration directives bei www.squid-cache.org weiter.

All dies erledigen wir mit unserem Lieblingseditor, z.B.: vim

 # vim /etc/squid/squid.conf

In Summer ergibt sich somit folgende Gesamtkonfiguration unseres Squid-Servers.

/etc/squid/squid.conf
# Django : 2011-11-14 LDAP-Benutzerauthentifizierung
auth_param basic program /usr/lib64/squid/squid_ldap_auth -b "ou=People,dc=nausch,dc=org" -f "uid=%s" -h ldap.dmz.nausch.org -D "cn=Technischeruser,dc=nausch,dc=org" -W "/etc/squid/ldap_passwd" -d
auth_param basic children 4
auth_param basic utf8 on
#auth_param basic concurrency on
auth_param basic realm Bitte geben Sie Ihren Benutzernamen und Passwort fuer die Internetberechtigung ein!
auth_param basic credentialsttl 60 minutes
auth_param basic casesensitive off
 
#
# Recommended minimum configuration:
#
# Django : 2011-11-14 NICHT cachen von dynamischen Inhalten (cgi-scripte)
acl QUERY urlpath_regex cgi_bin \?
#
acl manager proto cache_object
acl localhost src 127.0.0.1/32
# Django : 2011-11-14 IPv6 deaktiviert
# acl localhost src ::1/128
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32
# Django : 2011-11-14 IPv6 deaktiviert
# acl to_localhost dst ::1/128
 
# Example rule allowing access from your local networks.
# Adapt to list your (internal) IP networks from where browsing
# should be allowed
# Django : 2011-11-14 Definition des/der eigenen Netzwerke
# 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 localnet src fc00::/7   # RFC 4193 local private network range
# acl localnet src fe80::/10  # RFC 4291 link-local (directly plugged) machines
acl localnet src 10.0.0.0/24
acl localnet src 10.0.10.0/26
 
# Django : 2011-11-14 LDAP-Benutzerauthentifizierung
acl ldap_auth proxy_auth REQUIRED
 
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
 
# Django : 2011-11-14 Ausnahmeregelung für den Zugriff ohne caching aktiviert
acl noauthsites url_regex repository\.nausch\.org/*
acl noauthsites url_regex static-cdn\.addons\.mozilla\.net:443
acl noauthsites url_regex ocsp\.digicert\.com/*
acl noauthsites url_regex ocsp\.verisign\.com/*
acl noauthsites url_regex evsecure-ocsp\.verisign\.com/*
acl noauthsites url_regex releases\.mozilla\.org/*
acl noauthsites url_regex addons\.mozilla\.org:443
acl noauthsites url_regex services\.addons\.mozilla\.org:443
 
# Django : 2011-11-14 Anpassen der Request-IP-Adresseder Clients bei Verwendung von Dansguardian
follow_x_forwarded_for allow localhost
follow_x_forwarded_for allow localnet
 
#
# Recommended minimum Access Permission configuration:
#
# Only allow cachemgr access from localhost
http_access allow manager localhost
# Django 2011-11-16 Zugriff auch aus dem lokalen Netz erlauben
http_access allow manager localnet
http_access deny manager
 
# Deny requests to certain unsafe ports
http_access deny !Safe_ports
 
# Deny CONNECT to other than secure 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
# Django : 2011-11-14 Zugriffsregeln für die LDAP-Benutzerauthentifizierung
# default: 
# http_access allow localnet
# http_access allow localhost
http_access allow localhost noauthsites
http_access allow localhost ldap_auth
http_access allow localnet noauthsites
http_access allow localnet ldap_auth
 
# And finally deny all other access to this proxy
http_access deny all
 
# Squid normally listens to port 3128
http_port 3128
 
# We recommend you to use at least the following line.
hierarchy_stoplist cgi-bin ?
 
# Uncomment and adjust the following to add a disk cache directory.
#cache_dir ufs /var/spool/squid 100 16 256
# Django 2011-11-14 : Squid Cache aktiviert
cache_dir ufs /var/spool/squid 100 16 256
 
# Django : 2011-11-14 Cache-Memory heruntergesetzt, wegen der Fehlermeldung
#                     WARNING cache_mem is larger than total disk cache space!
# default cache_mem 256 MB
cache_mem 100 MB 
 
# Leave coredumps in the first cache dir
coredump_dir /var/spool/squid
 
# Django : 2011-11-14 Aktivieren der ACL-Regel zum Unterdrücken des Cachen von dynamischen Inhalten
cache deny QUERY
 
# Add any of your own refresh_pattern entries above these.
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern .               0       20%     4320
 
# Django : 2011-11-14 Definition des Squid-Logformates
logformat squid  %tl.%03tu %6tr %>a %un %Ss/%03>Hs %<st %rm %ru %Sh/%<A %mt
 
# Django : 2011-11-14 deutsche Rückmeldungen bei den Fehlermeldungen aktiviert
error_directory /usr/share/squid/errors/de
error_default_language de
 
# Django : 2011-11-14 Serveralias statt des Hostnamens ausgeben:
visible_hostname proxy.dmz.nausch.org
 
# Django : 2011-11-14 Unterdrücken der Squidversion bei der Ausgabe von Fehlerseiten
httpd_suppress_version_string on
 
# Django : 2011-11-14 Setzen des Cache-Admins und Angabe der eMailadresse
cache_mgr squid-manager@nausch.org
 
# Django : 2011-11-14 Setzen der eMail-Absendeadresse im Fehlerfall
mail_from squid-proxy@nausch.org
 
# Django : 2011-11-17 Konfiguration des CMI (Sperren von Menüpunkten uns setzen des Manager-Passwortes)
cachemgr_passwd disable shutdown offline_toggle reconfigure
cachemgr_passwd S0g3ned! all

Zur Aktivierung unserer Konfiguration starten wir nun unseren Squid-Server einmal durch.

 # service squid restart
 Stopping squid: ................                           [  OK  ]
 Starting squid: .                                          [  OK  ]

Apache Konfiguration

Bei der Installation unseres Squid-Proxy-Servers wurde bereits die nötige Apache-Konfigurationsdatei squid.conf im Verzeichnis /etc/httpd/conf.d/squid.conf abgelegt.

Diese Datei passen wir nun unseren Bedürfnissen an. Die Konfiguration wird sich dabei im ersten Schritt wohl auf die Definition der erlaubten Zugriffe, also allow from beschränken.

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

Zugriffstest auf das CMI

Mit einem Browser greifen wir dann auf die definierte Webseite zu und erreichen die WEB-GUI des CMI.

Bildschirmhardcopy der Anmeldemaske des Cache Manager Interfaces

Hier geben wir den Namen des definierten Managers cache_mgr sowie das zugehörieg Passwort, welches wir unter cachemgr_passwd definiert hatten, ein.

Bildschirmhardcopy der Befehlsübersicht des Cache Manager Interfaces

Squid Graph

Zur Darstellung der Squid-Acces Logs gibt es im Netz unzählige Scripte und Programme. Eine einfache Variante zur übersichtlichen graphischen Aufbereitung kann mittels dem Projekt Squid Graph erfolgen.

vorbereitende Installation

Die für Squid-Graph notwenigen Programmabhängigkeiten installieren wir vor der eigentlichen Installation von Squid-Graph via yum.

 # yum install gd perl-GDGraph3d -y

Download

Von der Projektseite bei Sourceforge holen wir uns das Pgrogrammarchiv auf unseren Rechner.

 # wget http://downloads.sourceforge.net/project/squid-graph/squid-graph/3.2/squid-graph-3.2.tar.gz

Installation

Die Installation von Squid-Graph selbst ist relativ einfach und schnell erledigt. Als erstes entpacken das heruntergeladene Archiv.

 # tar -zxvf squid-graph-3.2.tar.gz

Anschließend verscheiben wir das erhaltene Verzeichnis an den Platz unserer Wahl.

 # mv squid-graph /usr/local/

Konfiguration

Zur Darstellung der Auswertungsergebnisse werden wir einen internen Webserver verwenden. Wir legen hierzu auf diesem ein Zielverzeichnis an.

 # mkdir /var/www/html/squid-graph

Als nächstes holen wir uns noch die Logo-Graphik auf unseren Server; hierzu wechseln wir einfach in unser zuvor angelegtes Webserver-Verzeichnis.

 # cd /var/www/html/squid-graph
 # wget http://squid-graph.sourceforge.net/logo.png

vHOST-Definition

Da wir für die Präsentation der Ergebnisse einen vHost auf unserem Webserver verwenden wollen, benötigen wir noch eine entsprechende Konfigurationsdatei. Diese legen wir im nächsten Schritt an.

 # vim /etc/httpd/conf.d/vhosts.conf
vim /etc/httpd/conf.d/vhosts.conf
#
# squid-graph.nausch.org
#
<VirtualHost *:80>
        ServerAdmin webmaster@nausch.org
        ServerName squid-graph.nausch.org:80
        ServerAlias www.squid-graph.nausch.org squid-graph.nausch.org
        ServerPath /
        DocumentRoot "/var/www/squid-graph"
        <Directory "/var/www/squid-graph">
                Options -Indexes FollowSymLinks
                Order deny,allow
                Deny from all
                Allow from 127.0.0.1
                Allow from 10.0.0.0/24
                Allow from 10.0.10.0/26
        </Directory>
        DirectoryIndex index.html
        ErrorLog logs/squid-graph_error.log
        CustomLog logs/squid-graph_access.log combined
</VirtualHost>

Bevor wir die Konfiguration neu laden, überprüfen wir noch die Ändewrungen auf Syntaxfehler.

 # service httpd configtest
 Syntax OK

Zur Aktivierung starten wir nun den Apache-Webserver einmal durch.

 # service httpd restart

Programmstart

Der Aufruf von Squid-Graph selbst ist sehr einfach, beschränkt es sich doch beim Programmaufruf auf folgende Parameter:

 # /usr/local/squid-graph/squid-graph --output-dir=/var/www/squid-graph/ </var/log/squid/access.log 
[Thu Nov 17 17:16:21 2011] Squid-graph 3.2 release OK. Program started.
[Thu Nov 17 17:16:21 2011] Graph domain is 86400 seconds.
[Thu Nov 17 17:16:21 2011] Setting report title to "Squid Graph Logfile Analysis Report".
[Thu Nov 17 17:16:21 2011] Configured for default histograms.
[Thu Nov 17 17:16:21 2011] Configured have_tcp and have_udp.
[Thu Nov 17 17:16:21 2011] Transfer duration graph(s) enabled.
[Thu Nov 17 17:16:21 2011] Configured start time to 1321460181.
[Thu Nov 17 17:16:21 2011] Reading STDIN for logfile input.
[Thu Nov 17 17:16:21 2011] Calculating averages for TCP/UDP transfer duration.
[Thu Nov 17 17:16:21 2011] Done reading 2188 lines from logfile on STDIN. (0 errors)
[Thu Nov 17 17:16:21 2011] Analysis duration is 1 seconds, 2188 lines/sec.
[Thu Nov 17 17:16:21 2011] Creating TCP image objects.
[Thu Nov 17 17:16:21 2011] Creating UDP image objects.
[Thu Nov 17 17:16:21 2011] Plotting graph of TCP accesses.
[Thu Nov 17 17:16:21 2011] Plotting graph of TCP transfers.
[Thu Nov 17 17:16:21 2011] Plotting graph of TCP transfer duration.
[Thu Nov 17 17:16:21 2011] Plotting graph of UDP accesses.
[Thu Nov 17 17:16:21 2011] Plotting graph of UDP transfers.
[Thu Nov 17 17:16:21 2011] Plotting graph of UDP transfer duration.
[Thu Nov 17 17:16:21 2011] Writing to file /var/www/squid-graph/tcp-access.png
[Thu Nov 17 17:16:21 2011] Writing to file /var/www/squid-graph/tcp-transfer.png
[Thu Nov 17 17:16:21 2011] Writing to file /var/www/squid-graph/tcp-duration.png
[Thu Nov 17 17:16:21 2011] Writing to file /var/www/squid-graph/udp-access.png
[Thu Nov 17 17:16:21 2011] Writing to file /var/www/squid-graph/udp-transfer.png
[Thu Nov 17 17:16:21 2011] Writing to file /var/www/squid-graph/udp-duration.png
[Thu Nov 17 17:16:21 2011] Gathering additional statistics.
[Thu Nov 17 17:16:21 2011] Writing index.html file.
[Thu Nov 17 17:16:21 2011] Done.
[Thu Nov 17 17:16:21 2011] Remember to copy logo.png found in your Squid Graph images/ directory to /var/www/squid-graph!

Client-Ansicht

Rufen wir nun in einem Browser unseren vorher definierten vHOST auf, so werden übersichtlich die wichtigsten Werte dargestellt.

Bildschirmhardcopy von Squid Graph

automatische Generierung der Webseite

Damit in regelmäßigen Abständen automatisch die Übersichtsgraphiken erstellt werden, reicht es einfach aus, einen cronjob einzurichten.

 # crontab -e
# Django 2011-11-17
# squid-graph Seiten Update alle 5 Minuten
*/5  *  *  *  *  /root/bin/squid-graph.sh 1>/dev/null 2>&1
 crontab: installing new crontab

SARG - Squid Analysis Report Generator

SARG Logo




Eine weitere interessante Variante zum Auswerten des Squid-Access-Logfiles ist die Web-Applikation Squid Analysis Report Generator, oder kurz SARG.

Download

Von der Projektseite holen wir uns das passende RPM für CentOS 6 auf unseren Rechner.

 # cd /usr/local/src/packages
 # wget http://pkgs.repoforge.org/sarg/sarg-2.3.1-1.el6.rft.x86_64.rpm

Installation

Die Installation von SARG ist Dank des RPMs einfach durchzuführen.

 # yum --nogpgcheck localinstall /usr/local/src/packages/sarg-2.3.1-1.el6.rft.x86_64.rpm -y

Was uns das RPM alles mitgebracht hat, erkunden wir mit Hilfe des Befehls rpm.

 # rpm -qil sarg
Name        : sarg                         Relocations: (not relocatable)
Version     : 2.3.1                             Vendor: Dag Apt Repository, http://dag.wieers.com/apt/
Release     : 1.el6.rft                     Build Date: Thu 26 Jan 2012 10:12:09 AM CET
Install Date: Mon 19 Mar 2012 06:42:01 PM CET      Build Host: lisse.hasselt.wieers.com
Group       : Applications/Internet         Source RPM: sarg-2.3.1-1.el6.rft.src.rpm
Size        : 1211395                          License: GPL
Signature   : DSA/SHA1, Thu 26 Jan 2012 10:47:24 AM CET, Key ID a20e52146b8d79e6
Packager    : Dag Wieers <dag@wieers.com>
URL         : http://sarg.sourceforge.net/sarg.php
Summary     : Squid usage report generator per user/ip/name
Description :
Squid Analysis Report Generator is a tool that allows you to view "where"
your users are going to on the Internet. Sarg generate reports in html
showing users, IP addresses, bytes, sites and times.
/etc/cron.daily/sarg
/etc/cron.monthly/sarg
/etc/cron.weekly/sarg
/etc/httpd/conf.d/sarg.conf
/etc/sarg
/etc/sarg/exclude_codes
/etc/sarg/fonts
/etc/sarg/fonts/DejaVuSans.ttf
/etc/sarg/fonts/FreeSans.ttf
/etc/sarg/fonts/README
/etc/sarg/fonts/license
/etc/sarg/images
/etc/sarg/images/datetime.png
/etc/sarg/images/graph.png
/etc/sarg/images/sarg-squidguard-block.png
/etc/sarg/images/sarg.png
/etc/sarg/languages
/etc/sarg/languages/Afrikaans
/etc/sarg/languages/Bulgarian_windows1251
/etc/sarg/languages/Catalan
/etc/sarg/languages/Czech
/etc/sarg/languages/Czech_UTF8
/etc/sarg/languages/Dutch
/etc/sarg/languages/English
/etc/sarg/languages/French
/etc/sarg/languages/German
/etc/sarg/languages/Greek
/etc/sarg/languages/Hungarian
/etc/sarg/languages/Indonesian
/etc/sarg/languages/Italian
/etc/sarg/languages/Japanese
/etc/sarg/languages/Latvian
/etc/sarg/languages/Polish
/etc/sarg/languages/Polish_windows1250
/etc/sarg/languages/Portuguese
/etc/sarg/languages/Romanian
/etc/sarg/languages/Russian_UTF-8
/etc/sarg/languages/Russian_koi8
/etc/sarg/languages/Russian_windows1251
/etc/sarg/languages/Serbian
/etc/sarg/languages/Slovak
/etc/sarg/languages/Spanish
/etc/sarg/languages/Turkish
/etc/sarg/languages/Ukrainian_windows1251
/etc/sarg/sarg.conf
/usr/bin/sarg
/usr/share/doc/sarg-2.3.1
/usr/share/doc/sarg-2.3.1/CONTRIBUTORS
/usr/share/doc/sarg-2.3.1/COPYING
/usr/share/doc/sarg-2.3.1/ChangeLog
/usr/share/doc/sarg-2.3.1/DONATIONS
/usr/share/doc/sarg-2.3.1/README
/usr/share/man/man1/sarg.1.gz
/var/www/sarg
/var/www/sarg/ONE-SHOT
/var/www/sarg/daily
/var/www/sarg/index.html
/var/www/sarg/monthly
/var/www/sarg/sarg.css
/var/www/sarg/weekly

vHOST-Definition

Für die Präsentation der Ergebnisse wird im RPM bereits eine Konfigurationsdatei für den Apache-Webserver mitgeliefert.

 # less /etc/httpd/conf.d/sarg.conf
/etc/httpd/conf.d/sarg.conf
Alias /sarg /var/www/sarg
 
<Directory /var/www/sarg>
    DirectoryIndex index.html
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
    Allow from ::1
    # Allow from your-workstation.com
</Directory>

Da unser Webserver aber nur die Inhalte mit Hilfe von vHosts präsentieren soll, werden wir kurzerhand die mitgelieferte Musterkonfigurationsdatei deaktivieren und eine entsprechende vHost-Definition anlegen. Die Definition des vHosts legen wir nun im nächsten Schritt an.

 # vim /etc/httpd/conf.d/vhosts.conf
vim /etc/httpd/conf.d/vhosts.conf
#
# sarg.nausch.org
#
<VirtualHost *:80>
        ServerAdmin webmaster@nausch.org
        ServerName sarg.nausch.org
        ServerAlias www.sarg.nausch.org
        ServerPath /
        DocumentRoot "/var/www/sarg"
        <Directory "/var/www/sarg">
                Options -Indexes FollowSymLinks
                Order deny,allow
                Deny from all
                Allow from 127.0.0.1
                Allow from 10.0.0.0/24
                Allow from 10.0.10.0/26
        </Directory>
        DirectoryIndex index.html
        ErrorLog logs/sarg_error.log
        CustomLog logs/sarg_access.log combined
</VirtualHost>

Die Konfigurationsdatei für das Verzeichnis /var/www/sarg benennen wir einfach um.

 # mv /etc/httpd/conf.d/sarg.conf /etc/httpd/conf.d/sarg.conf.rpm

Bevor wir die Konfiguration neu laden, überprüfen wir noch die Änderungen auf Syntaxfehler.

 # service httpd configtest
 Syntax OK

Zur Aktivierung starten wir nun den Apache-Webserver einmal durch.

 # service httpd restart

Links

1)
Cache Manager Interface
2)
Common Gateway Interface