Management und Überwachung des Squid-Proxy-Servers
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
- http_access allow manager localnet
Ferner setzen wir noch ein Passwort für unseren Cache-Manager cache_mgr, den wir bereits bei der Erstkonfiguration angelegt hatten.
- cachemgr_passwd S0g3ned! all
Den Zugriff auf die Menüpunkte:
- shutdown
- offline_toggle
- reconfigure
sperren wir. Hierzu tragen wir die folgende Zeile am Ende unserer Konfigurationsdatei ein:
- cachemgr_passwd disable shutdown offline_toggle reconfigure
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.
Hier geben wir den Namen des definierten Managers cache_mgr sowie das zugehörieg Passwort, welches wir unter cachemgr_passwd definiert hatten, ein.
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:
- –output-dir=/var/www/squid-graph/ dem Ausgabeverzeichnis
- </var/log/squid/access.log dem Squidlog
# /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.
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
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