====== 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]]