====== Squid ======
Hier sind diverse Squid Konfigurationen dargestellt.
===== Squid installieren =====
apt-get update
apt-get install squid3
===== Konfiguration prüfen =====
Nachdem man den Squid-Proxy konfiguriert hat oder eine Änderung an der Konfiguration vorgenommen hat, muss man diesen reloaden oder restarten.
Damit das aber auch erfolgreich ausgeführt werden kann, muss die Konfiguration fehlerfrei sein.
Man sollte also vor einem reload oder restart immer die Konfiguration prüfen lassen. Dies geht wie folgt.
squid3 -k parse
===== Logging =====
Bei Squid kann man sich sein eigenes Log zusammenstellen.
Standardmäßig sind folgende Log-Formate verfügbar.
logformat squid %ts.%03tu %6tr %>a %Ss/%03>Hs %a %[ui %[un [%tl] "%rm %ru HTTP/%rv" %>Hs %a %[ui %[un [%tl] "%rm %ru HTTP/%rv" %>Hs %h" "%{User-Agent}>h" %Ss:%Sh
logformat referrer %ts.%03tu %>a %{Referer}>h %ru
logformat useragent %>a [%tl] "%{User-Agent}>h"
Aktiv wird nur das "squid" Log-Format verwendet und in die ''access.log'' geschrieben.
Quelle: [[http://www.squid-cache.org/Doc/config/logformat/|Squid_Log_Format]]
Weitere Informationen zum Squid Log-Format findet man auf deren [[http://wiki.squid-cache.org/SquidFaq/SquidLogs|Web-Site]]
Man kann sich einfach eigene Log-Formate zusammenstellen und in eigene Log-Dateien schreiben lassen.
logformat
access_log /var/log/squid3/.log
===== Authentifizierung über PAM =====
Quelle: [[http://abechik.wordpress.com/2008/12/26/ubuntu-810-squid3-with-pam_auth-revisited/|abechik.wordpress.com]]
vi /etc/squid3/squid.conf.
Folgenden Inhalt, zu den jew. Absätzen, hinzufügen:
zu den Auth-Angaben:
auth_param basic program /usr/lib/squid3/pam_auth
auth_param basic children 5
auth_param basic realm Squid
auth_param basic credentialsttl 2 hours
zu den ACLs:
acl pam proxy_auth REQUIRED
zu den Access-Regeln:
http_access allow pam
Pam muss noch wie folgt angepasst werden.
vi /etc/pam.d/squid
Die Datei wird neu erstellt.
Hier der Inhalt:
auth required pam_unix.so
account required pam_unix.so
Die folgende Datei das sticky bit zuweisen:
chmod u+s /usr/lib/squid3/pam_auth
Nun noch Squid neustarten.
service squid3 restart
Nach einem erfolgreichen Start können nun lokale User angelegt werden:
useradd
passwd
===== Authentifizierung über Active Directory =====
Squid kann auf verschiedene Weise die Authentifizierung über ein Active Directory bewerkstelligen.
==== per NTLM Authentifizierung ====
Samba, Winbind und Kerberos lt. dieser [[http://wiki.stizi.de/linux:samba#samba_und_active_directory|Anleitung]] installieren und Server in die Domäne aufnehmen.
(Mapping der UIDs und GIDs vom PAM einrichten => idmap config ...)
Berechtigungen für den User ''proxy'' auf das Verzeichnis ''/var/lib/samba/winbindd_privileged/'' setzen
chgrp winbindd_priv /var/lib/samba/winbindd_privileged/
usermod -a -G winbindd_priv proxy
Nur so kann der Proxy dann über das Programm ''ntlm_auth'' den jew. Benutzer authentifizieren.
Nun noch Squid mit den folgenden Parametern konfigurieren.
# Authentifizierung per NTLM
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp --require-membership-of=.#
auth_param ntlm children 10
auth_param ntlm keep_alive off
auth_param ntlm realm Proxy Server
auth_param ntlm credentialsttl 2 hours
auth_param ntlm casesensitive off
acl authuser proxy_auth REQUIRED
http_access deny !authuser
http_access allow authuser
http_access deny all
Nach der Konfiguration am besten den gesamten Server neustarten und dann den Proxy testen.
==== per Basic LDAP Authentifizierung ====
Die NTLM Authentifizierung unterstützt SingleSignOn.
Wenn man das nicht benötigt oder nicht will, dann kann man die Basic LDAP Authentifizierung verwenden.
Zunächst den Server in die Domäne aufnehmen (wie oben beschrieben).
Danach erstellt man einen Benutzer im AD, welcher für die Authentifizierung durch Squid benötigt wird.
Wichtig ist dass die folgenden Einstellungen beim Erstellen des Benutzers gesetzt sind.
^ Check ^ Funktion ^
| | Benutzer muss Kennwort bei der nächsten Anmeldung ändern |
| X | Benutzer kann Kennwort nicht ändern |
| X | Kennwort läuft nie ab |
| | Konto ist deaktiviert |
Nun erstellt man sich noch eine Passwortdatei in der das Passwort des neuen Benutzers steht.
touch /etc/squid3/ldappass.txt
echo '' > /etc/squid3/ldappass.txt
chmod o-r /etc/squid3/ldappass.txt
chgrp proxy /etc/squid3/ldappass.txt
Zuletzt setzt man folgende Authentifizierungsdirektiven in die ''squid.conf''
=== Userbasierte Authentifizierung ===
auth_param basic program /usr/lib/squid3/basic_ldap_auth -P -R -b "dc=,dc=" -D @. -W /etc/squid3/ldappass.txt -f sAMAccountName=%s -h ..
auth_param basic children 10
auth_param basic credentialsttl 2 hours
auth_param ntlm casesensitive off
auth_param ntlm keep_alive off
auth_param ntlm realm Proxy Server
=== Gruppenbasierte Authentifizierung ===
auth_param basic program /usr/lib/squid3/basic_ldap_auth -P -R -b "dc=,dc=" -D @. -W /etc/squid3/ldappass.txt -f "(&(sAMAccountName=%s)(memberOf=CN=,CN=,DC=,DC=))" -h .. -d -s sub
auth_param basic children 10
auth_param basic credentialsttl 2 hours
auth_param ntlm keep_alive off
**ACHTUNG:** Hier wird das LDAP-Attribut "memberOf" ausgelesen. Das Attribut ist nicht von jedem lesbar. In ADSI-Edit kann man aber dem Benutzer "squid" das Recht "Eigenschaften lesen" geben, so werden die Benutzer richtig authentifiziert. Am Besten gibt man dem Benutzer das Recht auf Domänenebene, so ist es z.B. egal wo sich der jew. zu authentifizierende User oder die Gruppe in der er sich befinden muss liegen.
===== Konfigurationen =====
Hier eine Beispielkonfiguration die außer der Standardkonfiguration noch über folgende Punkte verfügt:
* PAM basierte Authentifizierung
* weiterem Proxy als Parent-Cache
* ACL zum lokalen Netzwerk
* Freigabe von Domains für alle Benutzer ohne Authentifizierung über Freigabelisten (per ''dstdomain'' und ''url_regex'')
* Konfiguration des Caches
* Debugging
* LOG-Format anpassung
### Authentification with PAM
auth_param basic program /usr/lib/squid3/pam_auth
auth_param basic children 5
auth_param basic realm Squid
auth_param basic credentialsttl 2 hours
# Cache Peer -> upstream to Peer
cache_peer parent 0 no-query no-digest
never_direct allow all
# Definition local Network
acl local_domains dstdomain
acl local_servers dst ...
#ACLs
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
acl authuser proxy_auth REQUIRED
acl URL_domain_whitelist dstdomain "/etc/squid3/url_domain_whitelist"
acl URL_regex_whitelist url_regex -i "/etc/squid3/url_regex_whitelist"
# Access Rules
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager
http_access allow localhost
http_access allow all local_domains local_servers
http_access allow all URL_domain_whitelist
http_access allow all URL_regex_whitelist
http_access deny !authuser
http_access allow authuser
http_access deny all
# Listen-Port
http_port 3128
# Squid's chdir
coredump_dir /var/spool/squid3
# Cache
cache_dir ufs /var/spool/squid3/cache1 100 16 256
cache_dir ufs /var/spool/squid3/cache2 100 16 256
cache_dir ufs /var/spool/squid3/cache3 100 16 256
cache_store_log /var/log/squid3/store.log
# Other Stuff
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern (Release|Packages(.gz)*)$ 0 20% 2880
refresh_pattern . 0 20% 4320
# Debugging
debug_options ALL,1 28,4 29,6 82,6
# Log-Format
##### Default
###
#logformat squid %ts.%03tu %6tr %>a %Ss/%03>Hs %a %[ui %[un [%tl] "%rm %ru HTTP/%rv" %>Hs %a %[ui %[un [%tl] "%rm %ru HTTP/%rv" %>Hs %h" "%{User-Agent}>h" %Ss:%Sh
#logformat referrer %ts.%03tu %>a %{Referer}>h %ru
#logformat useragent %>a [%tl] "%{User-Agent}>h"
###
#####
access_log /var/log/squid3/access.log squid
access_log /var/log/squid3/common.log common
access_log /var/log/squid3/combined.log combined
access_log /var/log/squid3/referrer.log referrer
access_log /var/log/squid3/useragent.log useragent
##### Eigenes Log-Format
###
logformat %tl %6tr %>a %Ss/%03>Hs %.log
###
#####
Erläuterungen zu dieser Beispielkonfiguration weiter unten.
==== Regelsätze ====
ACL beschreiben das Regelwerk des Squid. Weitere Iformationen findet man unter [[http://wiki.squid-cache.org/SquidFaq/SquidAcl|SquidAcl]].
Man definiert zunächst in einer ''acl'' Zeile einen Regelsatz und verwendet diesen danach über das Regelwerk.
=== Verwendung ===
acl SSL_ports port 443 # https
acl Safe_ports port 80 # http
acl Safe_ports port 1025-65535 # unregistered ports
acl CONNECT method CONNECT
acl authuser proxy_auth REQUIRED
acl URL_whitelist url_regex -i "/etc/squid3/url_whitelist"
==== Regelwerke ====
Die definierten Regelsätze können über das ''http_access'' Regelwerk verwendet werden.
=== Verwendung ===
http_access deny|allow (!)||all (!)
==== Upstream Proxy ====
Wenn der Squid nicht direkt in das Internet kommt, sondern nur über andere Squids, dann muss ein Upstream-Proxy in der Konfig angegeben werden.
cache_peer parent 0 no-query no-digest
never_direct allow all
==== Konfiguration testen ====
Wenn man die Konfiguration nach dem Ändern testen möchte um die Syntax zu überprüfen, (beugt evtl. Ausfallzeiten nach einem restart des Squids vor) führt man folgenden Befehl aus.
squid3 -k parse
===== Cache löschen =====
Um den Cache von Squid zu löschen, müssen folgende Schritte abgearbeitet werden:
service squid3 stop
rm -rf /var/spool/squid3/*
squid3 -z
service squid3 start
===== Hilfe =====
Die folgenden Webseiten können bei der Konfiguration von Squid helfen (ansonsten hilft noch googlen).
* [[http://www.squid-cache.org/Doc/config/|Squid Config-Doku]]
* [[http://wiki.squid-cache.org/|Squid Wiki]]
* [[http://wiki.squid-cache.org/ConfigExamples|Squid Config-Examples]]
* [[http://www.squid-handbuch.de/hb/|Squid Handbuch in Deutsch]]
* [[http://www.selflinux.org/selflinux/html/squid.html|Squid Howto in Deutsch]]