Inhaltsverzeichnis
squid CentOS 6
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.
Hinweis - Die nachfolgenden Ausführungen erheben keinen Anspruch auf Vollständigkeit, sondern stellen eine „Basiskonfiguration“ eines Squid als Proxy-Server für ein kleines privates Netzwerk dar!!!
Ab hier werden zur Ausführung nachfolgender Befehle root
-Rechte benötigt. Um der Benutzer root
zu werden, melden Sie sich bitte als root
-Benutzer am System an, oder wechseln mit nachfolgendem Befehl zum Benutzer root
:
$ su - Password:
Überblick
Im nachfolgenden soll die Konfiguration Squid als Proxy-Server welcher als interner, nicht nach außen agierender Proxy-Server für ein privates Netzwerk mit zwei Netzen durchgeführt werden. Nachfolgende Netze werden dabei verwaltet:
- DMZ - Domain: dmz.tachtler.net - IP-Adressbereich: 192.168.0.0/24
- Intranet - Domain: intra.tachtler.net - IP-Adressbereich: 192.168.1.0/24
HINWEIS - Der Einsatz von IPv6 soll NICHT genutzt werden!!!
Installation
Zur Installation eines Squid als Proxy-Server wird nachfolgendes Paket benötigt:
installiert werden.
Mit nachfolgendem Befehl, wird das Pakete squid
installiert:
# yum install squid Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: centos.vieth-server.de * extras: centos.vieth-server.de * updates: centos.vieth-server.de Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package squid.x86_64 7:3.1.4-1.el6 set to be updated --> Processing Dependency: perl(DBI) for package: 7:squid-3.1.4-1.el6.x86_64 --> Running transaction check ---> Package perl-DBI.x86_64 0:1.609-4.el6 set to be updated --> Finished Dependency Resolution Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: squid x86_64 7:3.1.4-1.el6 base 1.7 M Installing for dependencies: perl-DBI x86_64 1.609-4.el6 base 705 k Transaction Summary ================================================================================ Install 2 Package(s) Upgrade 0 Package(s) Total download size: 2.4 M Installed size: 7.1 M Is this ok [y/N]: y Downloading Packages: (1/2): perl-DBI-1.609-4.el6.x86_64.rpm | 705 kB 00:00 (2/2): squid-3.1.4-1.el6.x86_64.rpm | 1.7 MB 00:04 -------------------------------------------------------------------------------- Total 449 kB/s | 2.4 MB 00:05 Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running Transaction Installing : perl-DBI-1.609-4.el6.x86_64 1/2 Installing : 7:squid-3.1.4-1.el6.x86_64 2/2 Installed: squid.x86_64 7:3.1.4-1.el6 Dependency Installed: perl-DBI.x86_64 0:1.609-4.el6 Complete!
Mit nachfolgendem Befehl kann überprüft werden, welche Inhalte mit den Paket squid
installiert wurden.
# rpm -qil squid Name : squid Relocations: (not relocatable) Version : 3.1.4 Vendor: CentOS Release : 1.el6 Build Date: Thu 11 Nov 2010 06:29:14 PM CET Install Date: Fri 07 Oct 2011 01:56:59 PM CEST Build Host: c6b5.bsys.dev.centos.org Group : System Environment/Daemons Source RPM: squid-3.1.4-1.el6.src.rpm Size : 5751696 License: GPLv2 and (LGPLv2+ and Public Domain) Signature : RSA/8, Sun 03 Jul 2011 07:02:24 AM CEST, Key ID 0946fca2c105b9de Packager : CentOS BuildSystem <http://bugs.centos.org> URL : http://www.squid-cache.org Summary : The Squid proxy caching server Description : Squid is a high-performance proxy caching server for Web clients, supporting FTP, gopher, and HTTP data objects. Unlike traditional caching software, Squid handles all requests in a single, non-blocking, I/O-driven process. Squid keeps meta data and especially hot objects cached in RAM, caches DNS lookups, supports non-blocking DNS lookups, and implements negative caching of failed requests. Squid consists of a main server program squid, a Domain Name System lookup program (dnsserver), a program for retrieving FTP data (ftpget), and some management and client tools. /etc/NetworkManager/dispatcher.d/20-squid /etc/httpd/conf.d/squid.conf /etc/logrotate.d/squid /etc/pam.d/squid /etc/rc.d/init.d/squid /etc/squid /etc/squid/cachemgr.conf /etc/squid/cachemgr.conf.default /etc/squid/errorpage.css /etc/squid/errorpage.css.default /etc/squid/mime.conf /etc/squid/mime.conf.default /etc/squid/msntauth.conf /etc/squid/msntauth.conf.default /etc/squid/squid.conf /etc/squid/squid.conf.default /etc/sysconfig/squid /usr/bin/squidclient /usr/lib64/squid /usr/lib64/squid/cachemgr.cgi /usr/lib64/squid/digest_edir_auth /usr/lib64/squid/digest_ldap_auth /usr/lib64/squid/digest_pw_auth /usr/lib64/squid/diskd /usr/lib64/squid/fakeauth_auth /usr/lib64/squid/getpwname_auth /usr/lib64/squid/ip_user_check /usr/lib64/squid/msnt_auth /usr/lib64/squid/ncsa_auth /usr/lib64/squid/negotiate_kerb_auth /usr/lib64/squid/negotiate_kerb_auth_test /usr/lib64/squid/no_check.pl /usr/lib64/squid/ntlm_smb_lm_auth /usr/lib64/squid/pam_auth /usr/lib64/squid/pop3.pl /usr/lib64/squid/sasl_auth /usr/lib64/squid/smb_auth /usr/lib64/squid/smb_auth.pl /usr/lib64/squid/smb_auth.sh /usr/lib64/squid/squid_db_auth /usr/lib64/squid/squid_kerb_auth /usr/lib64/squid/squid_kerb_auth_test /usr/lib64/squid/squid_ldap_auth /usr/lib64/squid/squid_ldap_group /usr/lib64/squid/squid_radius_auth /usr/lib64/squid/squid_session /usr/lib64/squid/squid_unix_group /usr/lib64/squid/unlinkd /usr/lib64/squid/wbinfo_group.pl /usr/lib64/squid/yp_auth /usr/sbin/squid /usr/share/doc/squid-3.1.4 /usr/share/doc/squid-3.1.4/COPYING /usr/share/doc/squid-3.1.4/COPYRIGHT /usr/share/doc/squid-3.1.4/ChangeLog /usr/share/doc/squid-3.1.4/QUICKSTART /usr/share/doc/squid-3.1.4/README /usr/share/doc/squid-3.1.4/rredir.c /usr/share/doc/squid-3.1.4/rredir.pl /usr/share/doc/squid-3.1.4/squid.conf.documented /usr/share/doc/squid-3.1.4/url-normalizer.pl /usr/share/doc/squid-3.1.4/user-agents.pl /usr/share/man/man1/squidclient.1.gz /usr/share/man/man8/cachemgr.cgi.8.gz /usr/share/man/man8/ncsa_auth.8.gz /usr/share/man/man8/pam_auth.8.gz /usr/share/man/man8/squid.8.gz /usr/share/man/man8/squid_db_auth.8.gz /usr/share/man/man8/squid_ldap_auth.8.gz /usr/share/man/man8/squid_ldap_group.8.gz /usr/share/man/man8/squid_radius_auth.8.gz /usr/share/man/man8/squid_session.8.gz /usr/share/man/man8/squid_unix_group.8.gz /usr/share/snmp/mibs/SQUID-MIB.txt /usr/share/squid /usr/share/squid/errors /usr/share/squid/errors/COPYRIGHT /usr/share/squid/errors/TRANSLATORS ... ... weitere länderspezifische Fehlerseiten... ... /usr/share/squid/errors/de /usr/share/squid/errors/de-at /usr/share/squid/errors/de-ch /usr/share/squid/errors/de-de /usr/share/squid/errors/de-li /usr/share/squid/errors/de-lu /usr/share/squid/errors/de/ERR_ACCESS_DENIED /usr/share/squid/errors/de/ERR_CACHE_ACCESS_DENIED /usr/share/squid/errors/de/ERR_CACHE_MGR_ACCESS_DENIED /usr/share/squid/errors/de/ERR_CANNOT_FORWARD /usr/share/squid/errors/de/ERR_CONNECT_FAIL /usr/share/squid/errors/de/ERR_DIR_LISTING /usr/share/squid/errors/de/ERR_DNS_FAIL /usr/share/squid/errors/de/ERR_ESI /usr/share/squid/errors/de/ERR_FORWARDING_DENIED /usr/share/squid/errors/de/ERR_FTP_DISABLED /usr/share/squid/errors/de/ERR_FTP_FAILURE /usr/share/squid/errors/de/ERR_FTP_FORBIDDEN /usr/share/squid/errors/de/ERR_FTP_NOT_FOUND /usr/share/squid/errors/de/ERR_FTP_PUT_CREATED /usr/share/squid/errors/de/ERR_FTP_PUT_ERROR /usr/share/squid/errors/de/ERR_FTP_PUT_MODIFIED /usr/share/squid/errors/de/ERR_FTP_UNAVAILABLE /usr/share/squid/errors/de/ERR_ICAP_FAILURE /usr/share/squid/errors/de/ERR_INVALID_REQ /usr/share/squid/errors/de/ERR_INVALID_RESP /usr/share/squid/errors/de/ERR_INVALID_URL /usr/share/squid/errors/de/ERR_LIFETIME_EXP /usr/share/squid/errors/de/ERR_NO_RELAY /usr/share/squid/errors/de/ERR_ONLY_IF_CACHED_MISS /usr/share/squid/errors/de/ERR_READ_ERROR /usr/share/squid/errors/de/ERR_READ_TIMEOUT /usr/share/squid/errors/de/ERR_SECURE_CONNECT_FAIL /usr/share/squid/errors/de/ERR_SHUTTING_DOWN /usr/share/squid/errors/de/ERR_SOCKET_FAILURE /usr/share/squid/errors/de/ERR_TOO_BIG /usr/share/squid/errors/de/ERR_UNSUP_HTTPVERSION /usr/share/squid/errors/de/ERR_UNSUP_REQ /usr/share/squid/errors/de/ERR_URN_RESOLVE /usr/share/squid/errors/de/ERR_WRITE_ERROR /usr/share/squid/errors/de/ERR_ZERO_SIZE_OBJECT ... ... weitere länderspezifische Fehlerseiten... ... /usr/share/squid/icons /usr/share/squid/icons/anthony-binhex.gif /usr/share/squid/icons/anthony-bomb.gif /usr/share/squid/icons/anthony-box.gif /usr/share/squid/icons/anthony-box2.gif /usr/share/squid/icons/anthony-c.gif /usr/share/squid/icons/anthony-compressed.gif /usr/share/squid/icons/anthony-dir.gif /usr/share/squid/icons/anthony-dirup.gif /usr/share/squid/icons/anthony-dvi.gif /usr/share/squid/icons/anthony-f.gif /usr/share/squid/icons/anthony-image.gif /usr/share/squid/icons/anthony-image2.gif /usr/share/squid/icons/anthony-layout.gif /usr/share/squid/icons/anthony-link.gif /usr/share/squid/icons/anthony-movie.gif /usr/share/squid/icons/anthony-pdf.gif /usr/share/squid/icons/anthony-portal.gif /usr/share/squid/icons/anthony-ps.gif /usr/share/squid/icons/anthony-quill.gif /usr/share/squid/icons/anthony-script.gif /usr/share/squid/icons/anthony-sound.gif /usr/share/squid/icons/anthony-tar.gif /usr/share/squid/icons/anthony-tex.gif /usr/share/squid/icons/anthony-text.gif /usr/share/squid/icons/anthony-unknown.gif /usr/share/squid/icons/anthony-xbm.gif /usr/share/squid/icons/anthony-xpm.gif /var/log/squid /var/spool/squid
Dienst/Deamon-Start einrichten
Um einen Squid als Proxy-Server, welcher als Dienst/Deamon als Hintergrundprozess läuft, auch nach einem Neustart des Servers zur Verfügung zu haben, soll der Dienst/Daemon mit dem Server mit gestartet werden, was mit nachfolgendem Befehl realisiert werden kann:
# chkconfig squid on
Eine Überprüfung, ob beim Neustart des Server der squid
-Dienst/Deamon wirklich mit gestartet wird, kann mit nachfolgendem Befehl erfolgen und sollte eine Anzeige, wie ebenfalls nachfolgend dargestellt ausgeben:
# chkconfig --list | grep squid squid 0:off 1:off 2:on 3:on 4:on 5:on 6:off
iptables Regel
Damit der Squid als Proxy-Server auch erreichbar ist und nicht die Weitergabe der IP-Paket vom Paketfilter iptables
blockiert wird, muss nachfolgende Regel zum iptables
-Regelwerk hinzugefügt werden.
Um die aktuellen iptables
-Regeln erweitern zu können, sollten diese erst einmal aufgelistet werden, was mit nachfolgendem Befehl durchgeführt werden kann:
# iptables -L -nv --line-numbers Chain INPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 3269 2693K ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 2 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 3 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 4 1 60 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 5 16 512 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT 2563 packets, 1114K bytes) num pkts bytes target prot opt in out source destination
Nachfolgender Befehl, fügt folgende iptables
-Regel dem iptables
-Regelwerk nach der Position 4 hinzu, ohne das der Paketfilter angehalten werden muss:
-A INPUT -p tcp --dport 3128 -j ACCEPT
und hier der Befehl:
# iptables -I INPUT 5 -p tcp --dport 3128 -j ACCEPT
Ein erneute Abfrage des iptables
-Regelwerts, sollte dann nachfolgend dargestellte Ausgabe ergeben, was mit folgendem Befehl durchgeführt werden kann:
# iptables -L -nv --line-numbers Chain INPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 3359 2701K ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 2 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 3 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 4 1 60 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 5 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:3128 6 16 512 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT 4 packets, 624 bytes) num pkts bytes target prot opt in out source destination
Die neuen Zeile ist an Position 4 (INPUT) zu sehen, hier nachfolgend zur Verdeutlichung noch einmal dargestellt (nur relevanter Ausschnitt):
... 5 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:3128 ...
Um diese iptables
-Regel dauerhaft, auch nach einem Neustart des Server, weiterhin im iptables
-Regelwerk zu speichern, muss nachfolgend dargestellter Befehl abschließend noch ausgeführt werden:
# service iptables save iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
Basis-Konfiguration
Nachfolgende Konfiguration stellt eine Basiskonfiguration dar, mit verschiedenen Ausprägung in Bezug auf die Authentifizierung.
Konfigurationsdateien
Nach der Installation des Squid als Proxy-Server 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)
und ggf.
/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:
# egrep -v '(^#|^$)' /etc/squid/squid.conf acl manager proto cache_object acl localhost src 127.0.0.1/32 acl localhost src ::1/128 acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 acl to_localhost dst ::1/128 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 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 localnet http_access allow localhost http_access deny all http_port 3128 hierarchy_stoplist cgi-bin ? coredump_dir /var/spool/squid 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
Änderungen an /etc/squid/squid.conf
Die Konfigurationsdatei /etc/squid/squid.conf
ohne Kommentar- und Leerzeichen mit persönlichen Anpassungen:
# egrep -v '(^#|^$)' /etc/squid/squid.conf
auth_param basic program /usr/lib64/squid/squid_ldap_auth -b "ou=People,dc=tachtler,dc=net" -f "uid=%s" -h ldap.dmz.tachtler.net -D "cn=Anonymous,dc=tachtler,dc=net" -W /etc/squid/ldap_anonymous_passwd auth_param basic utf8 on auth_param basic children 3 auth_param basic concurrency 0 auth_param basic realm Bitte geben Sie Ihre Internet-Authentifizierung ein! auth_param basic credentialsttl 30 minutes auth_param basic casesensitive off acl QUERY urlpath_regex cgi_bin \? acl manager proto cache_object acl localhost src 127.0.0.1/32 acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 acl localnet src 192.168.0.0/24 acl localnet src 192.168.0.1/24 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 acl noauthsites url_regex productactivation.one.microsoft.com:443 acl noauthsites url_regex download\.windowsupdate\.com/* acl noauthsites url_regex update\.microsoft\.com/* acl noauthsites url_regex www\.update\.microsoft\.com/t.com/* acl noauthsites url_regex windowshelp\.microsoft\.com/* acl noauthsites url_regex gadgets\.live\.com/config\.xml acl noauthsites url_regex weather\.service\.msn\.com/data\.aspx acl noauthsites url_regex go\.microsoft\.com/fwlink/?* acl noauthsites url_regex news\.de\.msn\.com/rss_newshome\.aspx acl noauthsites url_regex r\.office\.microsoft\.com/* follow_x_forwarded_for allow localhost follow_x_forwarded_for allow localnet http_access allow manager localhost http_access allow manager localnet http_access deny manager http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow localhost noauthsites http_access allow localhost ldap_auth http_access allow localnet noauthsites http_access allow localnet ldap_auth http_access deny all http_reply_access allow all icp_access allow localhost icp_access allow localnet icp_access deny all http_port 3128 hierarchy_stoplist cgi-bin ? coredump_dir /var/spool/squid cache deny QUERY 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 cache_mgr squid mail_from squid@tachtler.net cache_effective_group squid visible_hostname proxy.dmz.tachtler.net unique_hostname proxy.dmz.tachtler.net hostname_aliases rechner50.dmz.tachtler.net error_directory /usr/share/squid/errors/de error_default_language de forwarded_for delete cachemgr_passwd geheim all
Einsatz von Authentifizierung
Betreffender Absatz aus der Konfigurationsdatei /etc/squid/squid.conf
(nur relevanter Ausschnitt):
auth_param basic program /usr/lib64/squid/squid_ldap_auth -b "ou=People,dc=tachtler,dc=net" -f "uid=%s" -h ldap.dmz.tachtler.net -D "cn=Anonymous,dc=tachtler,dc=net" -W /etc/squid/ldap_anonymous_passwd auth_param basic utf8 on auth_param basic children 3 auth_param basic concurrency 0 auth_param basic realm Bitte geben Sie Ihre Internet-Authentifizierung ein! auth_param basic credentialsttl 30 ...
Für weitere Details, um durch Squid als Proxy-Server auch eine Authentifizierung durchführen zu lassen, siehe nachfolgende interne Links
NICHT cachen von dynamischen Inhalten (cgi-scripte)
Betreffende Absätze aus der Konfigurationsdatei /etc/squid/squid.conf
(nur relevanter Ausschnitt):
... acl QUERY urlpath_regex cgi_bin \? ... cache deny QUERY ...
Erzwingen eine Authentifizierung
Betreffender Absatz aus der Konfigurationsdatei /etc/squid/squid.conf
(nur relevanter Ausschnitt):
... acl ldap_auth proxy_auth REQUIRED ...
* Es wird hier eine Authentifizierung gegen LDAP erzwungen !!!
Definitionen von Ausnahmen aus der Authentifizierung
Betreffender Absatz aus der Konfigurationsdatei /etc/squid/squid.conf
(nur relevanter Ausschnitt):
...
acl noauthsites url_regex productactivation.one.microsoft.com:443
acl noauthsites url_regex download\.windowsupdate\.com/*
acl noauthsites url_regex update\.microsoft\.com/*
acl noauthsites url_regex www\.update\.microsoft\.com/t.com/*
acl noauthsites url_regex windowshelp\.microsoft\.com/*
acl noauthsites url_regex gadgets\.live\.com/config\.xml
acl noauthsites url_regex weather\.service\.msn\.com/data\.aspx
acl noauthsites url_regex go\.microsoft\.com/fwlink/?*
acl noauthsites url_regex news\.de\.msn\.com/rss_newshome\.aspx
acl noauthsites url_regex r\.office\.microsoft\.com/*
...
Weitergabe der tatsächlichen IP-Adressen
Betreffender Absatz aus der Konfigurationsdatei /etc/squid/squid.conf
(nur relevanter Ausschnitt):
... follow_x_forwarded_for allow localhost follow_x_forwarded_for allow localnet ...
Zugriffsregeln zum Proxy
Betreffender Absatz aus der Konfigurationsdatei /etc/squid/squid.conf
(nur relevanter Ausschnitt):
... http_access allow localhost noauthsites http_access allow localhost ldap_auth http_access allow localnet noauthsites http_access allow localnet ldap_auth ...
Definitionen zum Server und zum e-Mail-Versand
Betreffender Absatz aus der Konfigurationsdatei /etc/squid/squid.conf
(nur relevanter Ausschnitt):
... cache_mgr squid mail_from squid@tachtler.net cache_effective_group squid visible_hostname proxy.dmz.tachtler.net unique_hostname proxy.dmz.tachtler.net hostname_aliases rechner50.dmz.tachtler.net ...
Definitionen der Sprache für die HTML-Meldungen
Betreffender Absatz aus der Konfigurationsdatei /etc/squid/squid.conf
(nur relevanter Ausschnitt):
... error_directory /usr/share/squid/errors/de error_default_language de ...
Definiton zu Anzeige von Forwarded-For Header Zeilen - „komplett entfernen“
... forwarded_for delete ...
Passwort für den Vollzugriff auf den Cache-Manager
Betreffender Absatz aus der Konfigurationsdatei /etc/squid/squid.conf
(nur relevanter Ausschnitt):
... cachemgr_passwd geheim all ...
NCSA-Authentifizierung
Falls folgende Einträge müssen in die Konfigurationsdatei /etc/squid/squid.conf
hinzugefügt werden:
auth_param basic program ncsa_passwd/ncsa_auth /etc/squid/ncsa_passwd auth_param basic utf8 on auth_param basic children 3 auth_param basic concurrency 0 auth_param basic realm Bitte geben Sie Ihre Internet-Authentifizierung ein! auth_param basic credentialsttl 30 minutes auth_param basic casesensitive off
Weiterhin müssen nachfolgende Zeilen ebenfalls an geeigenter Stelle zur Konfigurationsdatei /etc/squid/squid.conf
hinzugefügt werden (nur relevanter Ausschnitt):
... acl ncsa_users proxy_auth REQUIRED acl CONNECT method CONNECT ...
Zum Abschluss müssen nachfolgende Zeilen zusätzlich an geeigenter Stelle zur Konfigurationsdatei /etc/squid/squid.conf
hinzugefügt werden (nur relevanter Ausschnitt):
... # 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 # Tachtler # default: http_access allow localnet # default: http_access allow localhost # Tachtler http_access allow localhost ncsa_users http_access allow localnet ncsa_users ...
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 erreicht werden:
# htpasswd -c -m /etc/squid/ncsa_passwd klaus New password: Re-type new password: Adding password for user klaus
* Es wird die Datei ncsa_passwd
im Verzeichnis /etc/squid
angelegt. Die Option -c
dient zur erstmaligen Erstellung der Passwort-Datei /etc/squid/ncsa_passwd
.
* Das Programm htpasswd
generiert für den angegeben Benutzer, in diesem Fall klaus
einen Eintrag in der Passwort-Datei /etc/squid/ncsa_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/ncsa_passwd
hinzuzufügen, wird eine Variante des oben beschriebenen Befehls, ohne die Option -c
verwendet.
# htpasswd -m /etc/squid/ncsa_passwd petra New password: Re-type new password: Adding password for user petra
Die Passwort-Datei /etc/squid/ncsa_passwd
kann mit folgendem Befehl zur Anzeige gebracht werden und sollte wie folgt aussehen:
# cat /etc/squid/ncsa_passwd 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/ncsa_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 ncsa_passwd/ncsa_auth /etc/squid/ncsa_passwd auth_param basic utf8 on auth_param basic children 3 auth_param basic concurrency 0 auth_param basic realm Bitte geben Sie Ihre Internet-Authentifizierung ein! auth_param basic credentialsttl 30 minutes auth_param basic casesensitive off
und ersetzen dies gegen:
auth_param basic program /usr/lib64/squid/squid_ldap_auth -b "ou=People,dc=tachtler,dc=net" -f "uid=%s" -h ldap.dmz.tachtler.net auth_param basic utf8 on auth_param basic children 3 auth_param basic concurrency 0 auth_param basic realm Bitte geben Sie Ihre Internet-Authentifizierung ein! 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 localnet ncsa_users
durch nachfolgende Einträge ersetzt:
http_access allow localhost ldap_auth http_access allow localnet ldap_auth
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/lib64/squid/squid_ldap_auth -b "ou=People,dc=tachtler,dc=net" -f "uid=%s" -h ldap.dmz.tachtler.net auth_param basic utf8 on auth_param basic children 3 auth_param basic concurrency 0 auth_param basic realm Bitte geben Sie Ihre Internet-Authentifizierung ein! 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/lib64/squid/squid_ldap_auth -b "ou=People,dc=tachtler,dc=net" -f "uid=%s" -h ldap.dmz.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/squid.conf
auskommentiert zu lassen, wie nachfolgend beschrieben:
# Uncomment and adjust the following to add a disk cache directory. #cache_dir ufs /var/spool/squid 100 16 256
Squid und Bandbreitenbegrenzung
Es gibt verschiedene Ausprägungen der Möglichkeit im Squid die Bandbreite der z.B. Verbindung zum Internet, zu begrenzen.
Dies geschieht unter Zuhilfenahme und Erstellung von sogenannten delay_pools
!
Nachfolgendes Beispiel, soll die Möglichkeit zeigen, wie
- ein Benutzer, welcher sich am Squid authentifiziert hat (z.B. gegen LDAP)
- eine Benutzer bezogene Bandbreitenbeschränkung
eingerichtet werden kann.
Dazu sind nachfolgende Ergänzungen in der Squid-Konfigurationsdatei
/etc/squid/squid.conf
mindestens notwendig (nur relevanter Ausschnitt):
... acl delay_pool_user1 proxy_auth user1 delay_pools 1 delay_class 1 1 delay_access 1 allow delay_pool_user1 delay_access 1 deny all delay_parameters 1 8000/8000 ...
Nachfolgend sollen die einzelnen Zeilen und deren Bedeutung dargestellt werden
Erstellung einer ACL mit dem Inhalt des Benutzernamens, mit dem sich der Benutzer authentifiziert hat:
acl delay_pool_user1 proxy_auth user1
Angabe, wie viele delay_pools
eingerichtet und von Squid verwaltet werden sollen:
delay_pools 1
Angabe welcher delay_pool
von welchem Klasse-Typ (class) sein soll:
delay_class 1 1
* Hier ist delay_pool 1 vom Klassen-Typ delay_class 1 !!!
HINWEIS - Es gibt nachfolgende Klassen-Typen:
Klassen-Typ | Erklärung |
---|---|
class 1 | Alles ist nur in einem gesamten Klassen-Container limitiert |
class 2 | Alles ist jeweils in einem Klassen-Container limitiert, welche zusätzlich anhand der IP-Adressen Bits 25 bis 32 (d) einer IPv4-Adresse unterschieden werden (a.b.c.d) |
class 3 | Alles ist jeweils in einem Klassen-Container limitiert, welche jedoch in „Netzwerke“ anhand der Bits 17 bis 24 © unterschieden werden und zusätzlich auch noch anhand der IP-Adressen Bits 25 bis 32 (d) einer IPv4-Adresse unterschieden werden (a.b.c.d) |
class 4 | Genau wie class 3 , jedoch mit einem zusätzlichen Limit basierend auf einer Benutzerkennung, was nur im Zusammenhang mit einer Authentifizierung angewandt werden kann |
class 5 | Anfragen, welche gruppiert mit einem „tag“ versehen, in einer „externen ACL„ hinterlegt sind |
Angabe unter welchen Umständen der delay_pool 1
zum tragen kommt bzw. welche „ACL„ auf diesen delay_pool
Anwendung findet und vor allem auch welche nicht!:
delay_access 1 allow delay_pool_user1 delay_access 1 deny all
Angabe der Bandbreitenbeschränkung für den delay_pool 1
:
delay_parameters 1 8000/8000
HINWEIS - Die Parameter sind wie folgt aufgebaut:
Parameter | Erklärung |
---|---|
1 | delay_pool (Nummer) |
8000/8000 | „restore“/„maximum“ |
HINWEIS - Erklärung zur Angabe „restore“/„maximum“:
- „restore“ in Byte, bezeichnet nach wie vielen Byte pro Zeiteinheit (1 Sekunde), der Angeforderte (Download, URL usw.) - auf die Byte Angabe, hier 8000, begrenzt wird = 8k pro Sekunde.
- * „maximum“ in Byte, bezeichnet nach wie vielen Byte - ohne Zeitbeschränkung, der Angeforderte (Download, URL usw.) - auf die Byte Angabe, hier 8000, begrenzt wird = 8k pro Anfrage.
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 localnets
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 2011/10/07 17:15:44| 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 Starting 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 | grep squid tcp 0 0 0.0.0.0:3128 0.0.0.0:* LISTEN 0 16076 6523/(squid) udp 0 0 0.0.0.0:50934 0.0.0.0:* 23 15863 6523/(squid)
Die Ausgabe in der Log-Datei, hier /var/log/squid/cache.log
sollte folgendermaßen aussehen:
2011/10/07 17:20:52| Starting Squid Cache version 3.1.4 for x86_64-unknown-linux-gnu... 2011/10/07 17:20:52| Process ID 6596 2011/10/07 17:20:52| With 1024 file descriptors available 2011/10/07 17:20:52| Initializing IP Cache... 2011/10/07 17:20:52| DNS Socket created at 0.0.0.0, FD 7 2011/10/07 17:20:52| Adding domain dmz.tachtler.net from /etc/resolv.conf 2011/10/07 17:20:52| Adding domain intra.tachtler.net from /etc/resolv.conf 2011/10/07 17:20:52| Adding domain tachtler.net from /etc/resolv.conf 2011/10/07 17:20:52| Adding nameserver 10.0.0.20 from /etc/resolv.conf 2011/10/07 17:20:52| helperOpenServers: Starting 3/3 'squid_ldap_auth' processes 2011/10/07 17:20:52| User-Agent logging is disabled. 2011/10/07 17:20:52| Referer logging is disabled. 2011/10/07 17:20:53| Unlinkd pipe opened on FD 18 2011/10/07 17:20:53| Local cache digest enabled; rebuild/rewrite every 3600/3600 sec 2011/10/07 17:20:53| Store logging disabled 2011/10/07 17:20:53| Swap maxSize 0 + 262144 KB, estimated 20164 objects 2011/10/07 17:20:53| Target number of buckets: 1008 2011/10/07 17:20:53| Using 8192 Store buckets 2011/10/07 17:20:53| Max Mem size: 262144 KB 2011/10/07 17:20:53| Max Swap size: 0 KB 2011/10/07 17:20:53| Using Least Load store dir selection 2011/10/07 17:20:53| Set Current Directory to /var/spool/squid 2011/10/07 17:20:53| Loaded Icons. 2011/10/07 17:20:53| Accepting HTTP connections at 0.0.0.0:3128, FD 19. 2011/10/07 17:20:53| HTCP Disabled. 2011/10/07 17:20:53| Squid modules loaded: 0 2011/10/07 17:20:53| Adaptation support is off. 2011/10/07 17:20:53| Ready to serve requests. 2011/10/07 17:20:54| storeLateRelease: released 0 objects
Um den Proxy-Server Squid zu stoppen kann folgender Befehl angewandt werden:
# service squid stop Stopping squid: ................ [ OK ]
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/lib64/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 localnet 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 Passwörter vergeben!
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-6.1.tar.gz
(Programm) SquidAnalyzerperl
5.005_03 oder höher Perl
Herunterladen SquidAnalyzer
Di Programmdateien von SquidAnalyzer können unter folgendem Link heruntergeladen werden:
Installation Systemvoraussetzungen SquidAnalyzer
Zur Installation eines SquidAnalyzer werden nachfolgende Pakete benötigt:
installiert werden.
Mit nachfolgendem Befehl, werden die Pakete installiert:
# yum install perl-ExtUtils-MakeMaker make Loaded plugins: fastestmirror, priorities Loading mirror speeds from cached hostfile * base: ftp.plusline.de * extras: ftp.plusline.de * rpmforge: ftp-stud.fht-esslingen.de * updates: ftp.plusline.de 1 packages excluded due to repository priority protections Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package make.x86_64 1:3.81-19.el6 set to be updated ---> Package perl-ExtUtils-MakeMaker.x86_64 0:6.55-115.el6 set to be updated --> Processing Dependency: perl(Test::Harness) for package: perl-ExtUtils-MakeMaker-6.55-115.el6.x86_64 --> Processing Dependency: perl-devel for package: perl-ExtUtils-MakeMaker-6.55-115.el6.x86_64 ---> Package perl-Test-Harness.x86_64 0:3.17-115.el6 set to be updated ---> Package perl-devel.x86_64 4:5.10.1-115.el6 set to be updated --> Processing Dependency: perl(ExtUtils::ParseXS) for package: 4:perl-devel-5.10.1-115.el6.x86_64 --> Running transaction check ---> Package perl-ExtUtils-ParseXS.x86_64 1:2.2003.0-115.el6 set to be updated --> Finished Dependency Resolution Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: make x86_64 1:3.81-19.el6 base 389 k perl-ExtUtils-MakeMaker x86_64 6.55-115.el6 base 289 k Installing for dependencies: perl-ExtUtils-ParseXS x86_64 1:2.2003.0-115.el6 base 41 k perl-Test-Harness x86_64 3.17-115.el6 base 228 k perl-devel x86_64 4:5.10.1-115.el6 base 419 k Transaction Summary ================================================================================ Install 5 Package(s) Upgrade 0 Package(s) Total download size: 1.1 M Installed size: 3.4 M Is this ok [y/N]: y Downloading Packages: (1/5): make-3.81-19.el6.x86_64.rpm | 389 kB 00:00 (2/5): perl-ExtUtils-MakeMaker-6.55-115.el6.x86_64.rpm | 289 kB 00:00 (3/5): perl-ExtUtils-ParseXS-2.2003.0-115.el6.x86_64.r | 41 kB 00:00 (4/5): perl-Test-Harness-3.17-115.el6.x86_64.rpm | 228 kB 00:00 (5/5): perl-devel-5.10.1-115.el6.x86_64.rpm | 419 kB 00:00 -------------------------------------------------------------------------------- Total 499 kB/s | 3.6 MB 00:07 Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running Transaction Installing : 1:perl-ExtUtils-ParseXS-2.2003.0-115.el6.x86_64 1/5 Installing : perl-ExtUtils-MakeMaker-6.55-115.el6.x86_64 2/5 Installing : 4:perl-devel-5.10.1-115.el6.x86_64 3/5 Installing : perl-Test-Harness-3.17-115.el6.x86_64 4/5 Installing : 1:make-3.81-19.el6.x86_64 5/5 Installed: make.x86_64 1:3.81-19.el6 perl-ExtUtils-MakeMaker.x86_64 0:6.55-115.el6 Dependency Installed: perl-ExtUtils-ParseXS.x86_64 1:2.2003.0-115.el6 perl-Test-Harness.x86_64 0:3.17-115.el6 perl-devel.x86_64 4:5.10.1-115.el6 Complete!
Ab SquidAnalyzer Version 5.1
# yum install perl-Time-HiRes Loaded plugins: priorities 1309 packages excluded due to repository priority protections Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package perl-Time-HiRes.x86_64 4:1.9721-136.el6 will be installed --> Finished Dependency Resolution Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: perl-Time-HiRes x86_64 4:1.9721-136.el6 base 48 k Transaction Summary ================================================================================ Install 1 Package(s) Total download size: 48 k Installed size: 56 k Is this ok [y/N]: y Downloading Packages: perl-Time-HiRes-1.9721-136.el6.x86_64.rpm | 48 kB 00:00 Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running Transaction Installing : 4:perl-Time-HiRes-1.9721-136.el6.x86_64 1/1 Verifying : 4:perl-Time-HiRes-1.9721-136.el6.x86_64 1/1 Installed: perl-Time-HiRes.x86_64 4:1.9721-136.el6 Complete!
Eine Auflistung der jeweiligen Inhalt der Pakete kann mit dem Befehl:
# rpm -qil <Paketname, ohne Versionsnummern und ohne Architekturangaben>
durchgeführt werden.
Installation SquidAnalyzer
Die Datei squidanalyzer-6.1.tar.gz
muss zuerst mit folgendem Befehl Entpackt werden:
# tar xfzv /tmp/squidanalyzer-6.1.tar.gz squidanalyzer-6.1/ squidanalyzer-6.1/ChangeLog squidanalyzer-6.1/INSTALL squidanalyzer-6.1/etc/ squidanalyzer-6.1/etc/included squidanalyzer-6.1/etc/user-aliases squidanalyzer-6.1/etc/squidanalyzer.conf squidanalyzer-6.1/etc/network-aliases squidanalyzer-6.1/etc/excluded squidanalyzer-6.1/resources/ squidanalyzer-6.1/resources/images/ squidanalyzer-6.1/resources/images/domain.png squidanalyzer-6.1/resources/images/info.png squidanalyzer-6.1/resources/images/network.png squidanalyzer-6.1/resources/images/cursor.png squidanalyzer-6.1/resources/images/back-arrow.png squidanalyzer-6.1/resources/images/logo-squidanalyzer.png squidanalyzer-6.1/resources/images/user.png squidanalyzer-6.1/resources/images/up-arrow.png squidanalyzer-6.1/resources/flotr2.js squidanalyzer-6.1/resources/squidanalyzer.css squidanalyzer-6.1/resources/sorttable.js squidanalyzer-6.1/README squidanalyzer-6.1/doc/ squidanalyzer-6.1/doc/SquidAnalyzer.pod squidanalyzer-6.1/META.yml squidanalyzer-6.1/SquidAnalyzer.pm squidanalyzer-6.1/TODO squidanalyzer-6.1/MANIFEST squidanalyzer-6.1/Makefile.PL squidanalyzer-6.1/squid-analyzer squidanalyzer-6.1/lang/ squidanalyzer-6.1/lang/ru_RU.txt squidanalyzer-6.1/lang/fr_FR.txt squidanalyzer-6.1/lang/de_DE.txt squidanalyzer-6.1/lang/pl_PL.txt squidanalyzer-6.1/lang/es_ES.txt squidanalyzer-6.1/lang/en_US.txt squidanalyzer-6.1/lang/uk_UA.txt squidanalyzer-6.1/lang/cs_CZ.txt squidanalyzer-6.1/lang/pt_BR.txt squidanalyzer-6.1/packaging/ squidanalyzer-6.1/packaging/RPM/ squidanalyzer-6.1/packaging/RPM/squidanalyzer.spec
Das so erhaltene Verzeichnis, hier z.B. /tmp/squidanalyzer-6.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:
# cd /tmp/squidanalyzer-6.1
# perl Makefile.PL Checking if your kit is complete... Looks good Writing Makefile for SquidAnalyzer Done... Now type 'make && make install'
# make cp SquidAnalyzer.pm blib/lib/SquidAnalyzer.pm cp squid-analyzer blib/script/squid-analyzer /usr/bin/perl -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/squid-analyzer Manifying blib/man3/squidanalyzer.3
# make install Installing /usr/share/perl5/vendor_perl/SquidAnalyzer.pm Installing /usr/share/man/man3/squidanalyzer.3 Installing /usr/bin/squid-analyzer sh install_all.sh ----------------------------------------------------------------------------- 1. Modify your httpd.conf to allow access to HTML output like follow: Alias /squidreport /var/www/squidanalyzer <Directory /var/www/squidanalyzer> Options -Indexes FollowSymLinks MultiViews AllowOverride None Order deny,allow Deny from all Allow from 127.0.0.1 </Directory> 2. If necessary, give additional host access to SquidAnalyzer in httpd.conf. Restart and ensure that httpd is running. 3. Browse to http://my.host.dom/squidreport/ to ensure that things are working properly. 4. Setup a cronjob to run squid-analyzer daily: # SquidAnalyzer log reporting daily 0 2 * * * /usr/local/bin/squid-analyzer > /dev/null 2>&1 or run it manually. For more information, see /README file. ----------------------------------------------------------------------------- Appending installation info to /usr/lib64/perl5/perllocal.pod
Konfiguration SquidAnalyzer
Der erste Schritt zur Konfiguration beginnt mit dem Anpassen der Konfigurationsdatei
/etc/squidanalyzer/squidanalyzer.conf
/etc/squidanalyzer/squidanalyzer.conf
Die Konfigurationsdatei /etc/squidanalyzer/squidanalyzer.conf
könnte wie folgt aussehen:
#### # This file is the default configuration file for SquidAnalyzer # Edit it to match your needs and copy it under /etc/squidanalyzer.conf ##### # Path where SquidAnalyzer should dump all HTML and images files. # Choose a path that can be read by a Web browser Output /var/www/squidanalyzer # The URL of the SquidAnalyzer javascript, HTML and images files. # Tachtler # default: WebUrl /squidreport WebUrl / # Set the path to the Squid log file # Tachtler # default: LogFile /var/log/squid3/access.log LogFile /var/log/squid/access.log # If you want to use DNS name instead of client Ip address as username enable # this directive. When you don't have authentication, the username is set to # the client ip address, this allow you to use the DNS name instead. # Note that you must have a working DNS resolution and that it can really slow # down the generation of reports. UseClientDNSName 0 # If you have enabled UseClientDNSName and have lot of ip addresses that do # not resolve you may want to increase the DNS lookup timeout. By default # SquidAnalyzer will stop to lookup a DNS name after 0.0001 second (100 ms). DNSLookupTimeout 0.0001 # 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 # Path to the file containing client ip addresses, network ip address, # and/or auth login to include into the report. Other entries will be # excluded by default. Include /etc/squidanalyzer/included # Translation Language file to use (fr_FR.txt, pt_BR.txt, es_ES.txt, # en_US.txt, ru_RU.txt, uk_UA.txt, cs_CZ.txt, pl_PL.txt and de_DE.txt). # Default to: #Lang /etc/squidanalyzer/lang/en_US.txt # Tachtler Lang /etc/squidanalyzer/lang/de_DE.txt # Date format use to display date (year = %y, month = %m and day = %d) # You can also use %M to replace month by its 3 letters abbreviation. DateFormat %y-%m-%d # 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. #FooterFile /etc/squidanalyzer/lang/fr_FR_footer.txt # Tachtler FooterFile /etc/squidanalyzer/lang/de_DE_footer.txt #â¯Set this to 1 if you want to anonymize all user login. The username # will be replaced by an unique id that change at each squid-analyzer # run. Default disable. AnonymizeLogin 0 # Adds peer cache hit (CD_SIBLING_HIT) to be taken has local cache hit. # Enabled by default, you must disabled it if you don't want to report # peer cache hit onto your stats. SiblingHit 1 # Set the default unit for transfert size. Default is BYTES, other possible # values are KB, MB and GB TransfertUnit BYTES # Minimum percentage of data in pie's graphs to not be placed in the others item. MinPie 2 # Set this to your locale to display generated date in your language. Default # is to use the current locale of the system. If you want date in German for # example, set it to de_DE. For french, fr_FR should do the work. # Tachtler # default: #Locale en_US Locale de_DE # By default SquidAnalyzer is saving current collected statistics each time # a new hour is found in log file. Most of the time this is enough but if # you have huge log file and don't have enough memory this will slow down the # parser by forcing Perl to use temporaries files. Use lower value following # your memory and the size of your log file, on very huge log file with lot of # requests/seconde a value of 30 minutes (1800) or less should help. WriteDelay 3600 # Use this directive to show the top N users that look at an URL or a domain. # Set it to 0 to disable this feature. TopUrlUser 10 # This directive allow you to replace the SquidAnalyze logo by your custom # logo. The default value is defined as follow: # <a href="$self->{WebUrl}"> # <img src="$self->{WebUrl}images/logo-squidanalyzer.png" title="SquidAnalyzer $VERSION" border="0"> # </a> SquidAnalyzer # Feel free to define your own header but take care to not break current design. #CustomHeader <a href="http://my.isp.dom/"><img src="http://my.isp.dom/logo.png" title="My ISP link" border="0" width="100" height="110"></a> My ISP Company # This directive allow exclusion of some unwanted methods in report statistics # like HEAD, POST, CONNECT, etc. Can be a comma separated list of methods. #ExcludedMethods HEAD # This directive allow exclusion of some unwanted mimetypes in report statistics # like text/html, text/plain, or more generally text/*, etc. Can be a comma separated # list of perl regular expression. #ExcludedMimes text/.*,image/.*
/etc/squidanalyzer/excluded
Die Konfigurationsdatei /etc/squidanalyzer/excluded
könnte wie folgt aussehen:
#------------------------------------------------------------------------------ # File used to defined which client ip address, network with netmask, network # regex address, auth login and URI to exclude from the report. # # You can define one by line exclusion by specifying first the type of the # exclusion (USER, CLIENT or URI) and a space separated list of valid regex. # You can also use the NETWORK type to define network address with netmask # using the CIDR notation: xxx.xxx.xxx.xxx/n # # See example bellow: #------------------------------------------------------------------------------ #NETWORK 192.168.1.0/24 10.10.0.0/16 #CLIENT 192\.168\.1\.2 #CLIENT 10\.169\.1\.\d+ 192\.168\.10\..* #USER myloginstr #USER guestlogin\d+ guestdemo #URI http:\/\/myinternetdomain.dom.* #URI .*\.webmail\.com\/.*\/login\.php.* # Tachtler USER root
/etc/squidanalyzer/included
Die Konfigurationsdatei /etc/squidanalyzer/included
könnte wie folgt aussehen:
#------------------------------------------------------------------------------ # File used to defined which client ip address, network with netmask, network # regex address, auth login and URI to include in the report. All other entries # will be exclude, this is the opposite of the excluded file. # # You can define one by line inclusion by specifying first the type of the # inclusion (USER or CLIENT) and a space separated list of valid regex. # You can also use the NETWORK type to define network address with netmask # using the CIDR notation: xxx.xxx.xxx.xxx/n # # See example bellow: #------------------------------------------------------------------------------ #NETWORK 192.168.1.0/24 10.10.0.0/16 #CLIENT 192\.168\.1\.2 #CLIENT 10\.169\.1\.\d+ 192\.168\.10\..* #USER myloginstr #USER guestlogin\d+ guestdemo
/etc/squidanalyzer/network-aliases
Die Konfigurationsdatei /etc/squidanalyzer/network-aliases
könnte wir folgt aussehen:
#------------------------------------------------------------------------------- # Squid Analyzer Network Alias configuration file # FORMAT: NETWORK_NAME NETWORK_REGEX1,NETWORK_REGEX2,... # Field separator must be one or more tabulation. # You can also use the CIDR notation: # FORMAT: NETWORK_NAME xxx.xxx.xxx.xxx/n # # See examples below. # #------------------------------------------------------------------------------- #Home Network 192\.168\.1\. #Associated Networks ^10\.169\.[2-4]\.,^10\.169\.[7-9]\. #ClassB Network 10.172.0.0/16 #ClassC Network 192.168.1.0/24 # Tachtler EDMZ 88\.217\.171\.167 XDMZ 192\.168\.1\. DMZ 192\.168\.0\. Intranet 192\.168\.10\.
/etc/squidanalyzer/user-aliases
Die Konfigurationsdatei /etc/squidanalyzer/user-aliases
könnte wir folgt aussehen:
#------------------------------------------------------------------------------- # Squid Analyzer User Alias configuration file # FORMAT : FULL_USER_NAME IP_ADDRESS|LOGIN_NAME,LOGIN_REGEX # Field separator must be one or more tabulation. Space in user name are not # allowed. See example bellow #------------------------------------------------------------------------------- #MyFirstName mylogin,192.168.1.12 #MyOtherNames logon\d+ # Tachtler Klaus klaus
cron-job SquidAnalyzer
Nachfolgender Befehl legt eine Datei mit dem Namen:
squidanalyzer-update.sh
im Verzeichnis
/etc/cron.daily
an
# touch /etc/cron.daily/squidanalyzer-update.sh
Der Inhalt dieser Datei könnte wie folgt aussehen:
#!/bin/sh /usr/local/bin/squid-analyzer --configfile /etc/squidanalyzer/squidanalyzer.conf /var/log/squid/access.log
Damit die Datei auch via cron
-job ausgeführt werden kann müssen mit dem nachfolgendem Befehl die entsprechenden Dateirecht noch angepasst werden:
# chmod +x /etc/cron.daily/squidanalyzer-update.sh
HIWNEIS - Einmal pro Tag/Nacht werden via cron
-job die Datensätze der Statistiken aktualisiert !!!
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 --rebuild --configfile /etc/squidanalyzer/squidanalyzer.conf /var/log/squid/access.log
Nach der Ausführung des oben genannten Befehls, kann mit nachfolgendem Befehl die korrekte Erstellung der benötigten Komponenten des SquidAnalyzer überprüft werden:
# ls -la /var/www/squidanalyzer/ total 180 drwxr-xr-x 13 root root 4096 Dec 1 2012 2012 drwxr-xr-x 16 root root 4096 Dec 1 08:01 2013 drwxr-xr-x 10 root root 4096 May 16 08:46 2014 -rw-r--r-- 1 root root 1406 Nov 2 2011 favicon.ico -rw-r--r-- 1 root root 102194 May 16 08:30 flotr2.js drwxr-xr-x 2 root root 4096 May 16 08:30 images -rw-r--r-- 1 root root 3340 May 16 08:48 index.html -rw-r--r-- 1 root root 23628 Sep 12 2012 logo-squidanalyzer.png -rw-r--r-- 1 root root 0 Nov 2 2011 robots.txt -rw-r--r-- 1 root root 17262 May 16 08:30 sorttable.js -rw-r--r-- 1 root root 7604 May 16 08:30 squidanalyzer.css -rw-r--r-- 1 root root 14 May 16 08:46 SquidAnalyzer.current
Apache VHOST für SquidAnalyzer
Nachstehend soll ein möglicher virtueller Host welcher unter dem Apache HTTP Server realisiert werden kann für den Web-Anwendungsbereich des SquidAnalyzer als Beispiel dargestellt werden.
Nachfolgende Konfigurationsdatei in nachfolgendem Verzeichnis und mit nachfolgendem Namen
/etc/httpd/conf.d/squidanalyzer.conf
könnte wie folgt realisiert werden:
NameVirtualHost *:80 # # squidanalyzer.tachtler.net (SquidAnalyzer) # <VirtualHost _default_:80> ServerAdmin webmaster@tachtler.net ServerName squidanalyzer.tachtler.net ServerAlias www.squidanalyzer.tachtler.net ServerPath / DocumentRoot "/var/www/squidanalyzer" <Directory "/var/www/squidanalyzer"> Options -Indexes FollowSymLinks MultiViews # Tachtler (enable for .htaccess file support) # AllowOverride AuthConfig AllowOverride None # Tachtler (enable for unlimited access) Order allow,deny Allow from all </Directory> DirectoryIndex index.html ErrorLog logs/squidanalyzer_error.log CustomLog logs/squidanalyzer_access.log combined </VirtualHost>
Ein Aufruf kann dann über die URL http://www.squidanalyzer.tachtler.net erfolgen!