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:
- 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
undurl_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 <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).