Einrichtung Squid

Hallo alle zusammen,

dieses Mal geht es um den netten Tintenfisch Squid.
Tintenfische leben im Daten-Meer und geben bekanntlich schwarze Tinte auf den weißen Bildschirm.
Außerdem lassen Sie unbekannte meinst stehen, weshalb sie sich wunderbar zum filtern eignen.

Was ist Squid?
Squid ist ein Proxy-Server zur Filterung, Zugriffskontrolle und Zwischenspeicherung von HyperText-Zugriffen.

Was beinhaltet dieser Post?
In diesem Post geht es um die Konfiguration eines installierten Squid-Proxy.
Themen wie: Zugriffs-Steuerung, Blacklisten, ADS-Integration.

Wie installiere ich ggf. einen Squid nach?
Dieser Dienst ist meist in jeder Distribution vertreten, bei RHEL/CentOS verwendet man YUM:

yum install squid

Bei SLES/openSuse würde man die Installation per Yast vornehmen.
Nun geht es aber endlich los mit der…

Einrichtung von Squid

1. Allgemeines
2. squid.conf
3. Beispiel-ACLs

1. Allgemeines

Vor ab klären wir doch einmal die Grund-Informationen des Dienstes,
ich gehe von einer sauberen Vorinstallation wie bei CentOS mit dem Standard-Server-Paket aus.

Dienstname: squid
Dienst-Befehle: start stop restart reload
Beispiel:

service squid restart

Bevor wir mit der Konfiguration des Squid starten noch ein kleiner Tipp:

chkconfig squid on

Falls es etwas zu bemängeln gibt an der Konfiguration – werden wir gerne darauf hingewiesen…

Welche Konfigurationsdateien verwendet Squid – welche ist besonders interessant?
mime.conf
cachemgr.conf
msntauth.conf
squid.conf – welche für die effektive Konfiguration steht.

Ich spare mir das durchgehen aller Möglichen Konfigurationen und gebe daher wie die meisten anderen Autoren nur meine persönliche im Schnelldurchgang an:

2. Konfigurationsdatei: squid.conf

# schneller Neustart des Squid
shutdown_lifetime 1 seconds


# Bindungen des Dienstes
icp_port 0
http_port 0.0.0.0:3128 transparent
#http_port 3128
#http_port 127.0.0.1:8080


# Prozess-ID-File
pid_filename /var/run/squid.pid


# Arbeitsspeicher & Speicherverwaltung
cache_mem 512 MB
cache_dir aufs /var/spool/squid 2048 16 256


# Verzeichnis Fehlerdateien
error_directory /usr/share/squid/errors/German


max_filedesc 25822
server_persistent_connections off
half_closed_clients off
buffered_logs on
log_mime_hdrs off
forwarded_for on


# Anpassung des Formates für Logdateien
emulate_httpd_log on
log_fqdn on
# Formatierung „access“ für später access.log
logformat access %tl %6tr %>a %Ss/%03Hs %<st %rm %ru %un %Sh/%<A %mt


# Pfade Logfiles
cache_log /var/log/squid/cache.log
cache_access_log syslog:local6.info
access_log /var/log/squid/access.log access
cache_store_log /var/log/squid/store.log
useragent_log /var/log/squid/useragent.log


refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern .               0       20%     4320


# freundlicher Umgang mit Apache
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache


# Konfiguration Authentifizierung
# windows logon name for auth
#auth_param ntlm program /usr/bin/ntlm_auth –helper-protocol=squid-2.5-ntlmssp
#auth_param ntlm children 20
# domain user or auth


# Basis-Authentifizierung über NTLM(Winbind)
auth_param basic program /usr/bin/ntlm_auth –helper-protocol=squid-2.5-basic
auth_param basic children 20
# Kunden-Domäne für Logins
auth_param basic realm domain.local


# Pfad zu Perl-Skript zur Prüfung von Gruppenmitgliedschaften 
external_acl_type NT_global_group children=20 ttl=300 %LOGIN /etc/squid/ress/wbinfo_group.pl


# Grund-Definitionen Squid – acl = AccessControlList-Ressource
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443

acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443         # https
acl Safe_ports port 70          # gopher
acl Safe_ports port 210         # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 280         # http-mgmt
acl Safe_ports port 488         # gss-http
acl Safe_ports port 591         # filemaker
acl Safe_ports port 777         # multiling http
acl CONNECT method CONNECT


# Grund-Autorisierung – http_access allow/deny
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access deny to_localhost
http_access allow localhost
icp_access allow all

# Private ACL-Ressourcen – URL-Listen
acl blacklist url_regex „/etc/squid/acl/blacklist“
acl freelist url_regex „/etc/squid/acl/freelist“
acl whitelist url_regex „/etc/squid/acl/whitelist“


# Private ACL-Ressourcen – IP-Netzwerke 
acl networks src „/etc/squid/acl/networks“
#acl blocked_networks src „/etc/squid/acl/blocked_networks“


# Private ACL-Ressourcen – Zugriffs-Gruppen NTLM/ADS
acl users_light external NT_global_group „/etc/squid/acl/users_light“
acl users_default external NT_global_group „/etc/squid/acl/users“


# ACL zum erzwingen der Authentifizierung
acl users_auth proxy_auth REQUIRED


# Standard-Netzbereiche (zur Erinnerung)
acl to_all                  dst 0.0.0.0/0.0.0.0
acl from_localhost          src 127.0.0.1/255.255.255.255


# Nicht-Autorisierung
http_access deny    !Safe_ports !SSL_ports
http_access deny    CONNECT !SSL_ports
#http_access deny    blocked_networks
#http_access deny    blacklist

# Autorisierung Websites ohne Authentifizierung
http_access allow networks freelist


# Autorisierung Websites der Whitelist mit Authentifizierung
#http_access allow networks users_auth users_default whitelist to_all
http_access allow networks users_auth users_light whitelist to_all


# Autorisierung Websites mit Authentifizierung Filterung per Blacklist
http_access allow networks users_auth users_default !blacklist to_all
http_access allow networks users_auth users_light !blacklist to_all



coredump_dir /var/spool/squid


# max/min object size
maximum_object_size 4096 KB
minimum_object_size 0 KB


# Steuerung für Zwischenspeicherung/Zugriff
cache allow all
#cache allow users_default
#cache allow users_light
#cache allow networks


# Service-Adresse für Sperrseite des Proxy
cache_mgr administrator@domain.local


# Anzeigename des Proxy
visible_hostname Kolonie-Proxy-Server


# Verweigern aller Verbindungen
http_access deny from_localhost
http_access deny all


# globale Zugriffssteuerung
always_direct allow networks
never_direct allow all

3. Beispiel-ACLs

Wie in der „squid.conf“ beschrieben können bestimmte Daten auch in weiteren Dateien hinterlegt werden.
Aus dem oben stehenden Beispiel wären was:
./acl/freelist – URLs für Zugriff ohne Authentifizierung
./acl/blacklist – URLs die geblockt werden
./acl/whitelist – URLs die explizit zugelassen sind
./acl/networks – Netzwerke für den Zugriff auf den Proxy
./acl/blocked_networks – Netzwerke die gesperrt werden sollen
./acl/users – NTLM/ADS-Benutzergruppen für die Authentifizierung
./acl/users_light – NTLM/ADS-Benutzergruppen für die Authentifizierung
In den Dateien selbst steht immer nur der vom Squid erwartete minimale Inhalt wie:
./acl/freelist – ./acl/blacklist – ./acl/whitelist
.facebook.de
.twitter.de
.facebook.com
.twitter.com
./acl/networks – ./acl/blocked_networks
192.168.0.0/16
172.16.0.0/11
10.0.0.0/8
./acl/users – ./acl/users_light
DOMAINusers
users
proxy-benutzer
Je nach Einstellung in der „/etc/samba/smb.conf“ für die Winbind-Default-Domain.
Mehr braucht man eigentlich nicht um schnell durchzublicken oder?