Inhaltsverzeichnis

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 %<st %rm %ru %[un %Sh/%<a %mt
logformat common     %>a %[ui %[un [%tl] "%rm %ru HTTP/%rv" %>Hs %<st %Ss:%Sh
logformat combined   %>a %[ui %[un [%tl] "%rm %ru HTTP/%rv" %>Hs %<st "%{Referer}>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: Squid_Log_Format
Weitere Informationen zum Squid Log-Format findet man auf deren Web-Site

Man kann sich einfach eigene Log-Formate zusammenstellen und in eigene Log-Dateien schreiben lassen.

logformat <LOG_FORMAT_NAME> <FORMAT_SPEZIFIKATION>
access_log /var/log/squid3/<LOG_DATEI_NAME>.log <LOG_FORMAT_NAME>

Authentifizierung über PAM

Quelle: 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 <BENUTZERNAME>
passwd <BENUTZERNAME>

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 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=<DOMAIN_NAME>.<TLD>#<DOMAINGROUP>
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 '<PASSWORD>' > /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=<DOMAIN_NAME>,dc=<TLD>" -D <USER>@<DOMAIN_NAME>.<TLD> -W /etc/squid3/ldappass.txt -f sAMAccountName=%s -h <DOMAINCONTROLLERNAME>.<DOMAIN_NAME>.<TLD>
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=<DOMAIN_NAME>,dc=<TLD>" -D <USER>@<DOMAIN_NAME>.<TLD> -W /etc/squid3/ldappass.txt -f "(&(sAMAccountName=%s)(memberOf=CN=<PROXY_USER_GROUP_NAME>,CN=<PARENT_CONTAINER_NAME_OF_GROUP>,DC=<DOMAIN_NAME>,DC=<TLD>))" -h <DOMAINCONTROLLERNAME>.<DOMAIN_NAME>.<TLD> -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:

### 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 <FQDN_OF_PEER_CACHE> parent <PEER_CACHE_PORT> 0 no-query no-digest
never_direct allow all

# Definition local Network
acl local_domains dstdomain <LOCAL_DOMAIN_NAME>
acl local_servers dst <LOCAL_NETWORK1_IN_CIDR_FORMAT> <LOCAL_NETWORK2_IN_CIDR_FORMAT> <LOCAL_NETWORK3_IN_CIDR_FORMAT> ...

#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 %<st %rm %ru %[un %Sh/%<a %mt
#logformat common     %>a %[ui %[un [%tl] "%rm %ru HTTP/%rv" %>Hs %<st %Ss:%Sh
#logformat combined   %>a %[ui %[un [%tl] "%rm %ru HTTP/%rv" %>Hs %<st "%{Referer}>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 <LOG_FORMAT_NAME> %tl %6tr %>a %Ss/%03>Hs %<st %rm %ru %[un %Sh/%<a %mt

access_log /var/log/squid3/<LOG_DATEI_NAME>.log <LOG_FORMAT_NAME>
###
#####

Erläuterungen zu dieser Beispielkonfiguration weiter unten.

Regelsätze

ACL beschreiben das Regelwerk des Squid. Weitere Iformationen findet man unter 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 (!)<USER>|<GRUPPE>|all (!)<NAME_REGELSATZ>

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 <IP_ADRESSE_ODER_FQDN> parent <PORT> 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).