HAProxy vor Squid Proxy – Client IP-Adressen weiterleiten

Verwendet man einen Loadbalancer wie z.B. HAProxy um Webzugriffe von Clients auf mehrere Squid Proxy Server zu verteilen, sieht es im access.log des Squid Proxy so aus, als kämen die Zugriffe alle vom HAProxy nicht vom eigentlichen Client. Da das HTTP Forwarding des HAProxy auf Applikationsebene basiert, ist dieses Verhalten korrekt. Wenn man TCP Offloading machen würde, wäre dies wahrscheinlich nicht der Fall.

Um beim HTTP Forwarding dennoch die originale Client-IP im Squid access.log zu sehen, kann man diese über den HTTP Header X-Forwarded-For (Beschreibung) weiterleiten.

In Squid kommen die Requests alle von der IP-Adresse des HAProxy:

1514450659.711  40186 10.0.0.5 TCP_MISS/200 31540 CONNECT images.outbrain.com:443 - HIER_DIRECT/2.19.240.34 -
1514450660.977  40078 10.0.0.5 TCP_MISS/200 3753 CONNECT www.summerhamster.com:443 - HIER_DIRECT/52.27.8.169 -

In HAProxy müssen die folgenden beiden Optionen gesetzt werden. Diese setzen den Header „X-Forwarded-For“ auf die Client IP-Adresse. Dadurch wird die eigentliche Client IP im Header mitgegeben:

option http-server-close
option forwardfor

Der Squid Proxy registriert den veränderten Header, verwirft ihn aber aus Sicherheitsgründen standardmäßig – sofern nicht anderweitig konfiguriert. Also muss in der Konfiguration des Squid der QuellIP des HAProxy vertraut werden. Dies wird dementsprechend über eine acl in der squid.conf angepasst:

acl haproxy src 10.0.0.5
follow_x_forwarded_for allow haproxy

Abschließend den Squid neustarten und den Webzugriff über ein Client testen. Wie man nun im access.log sieht, ist die Client-IP jetzt korrekt weitergeleitet.

1514451557.721      5 10.0.0.10 TCP_MISS/200 910 POST http://ocsp.digicert.com/ - HIER_DIRECT/93.184.220.29 application/ocsp-response
1514451557.749      5 10.0.0.10 TCP_MISS/200 2194 POST http://ocsp2.globalsign.com/gsalphasha2g2 - HIER_DIRECT/104.31.74.124 application/ocsp-response

Squid Web Cache Proxy Server installieren unter Ubuntu 10.10

Ich habe ein kleines Howto geschrieben, wie man den Squid squid-3.0.STABLE25 auf einem Ubuntu 10.10 installieren und konfigurieren kann.
Hier gibts es 2 Wege, einmal den etwas komplizierteren über die eigene Installation – oder über das fertige debian Paket.
Ich beschreibe beide Wege……
### Die einfache Variante über ein fertiges Ubuntu Paket

sudo apt-get install squid3

Fertig 🙂 – Das Startscript etc. wird automatisch angelegt. Der Config Folder ist nun aber /etc/squid3/.
Für eine einfachere Konfiguration über ein Webinterface empfehle ich die Installation von webmin. Diese Webseite bereitet die Konfig etwas vereinfacht auf.
# webmin installieren

cd /tmp
wget http://prdownloads.sourceforge.net/webadmin/webmin_1.530_all.deb
sudo dpkg --install webmin_1.530_all.deb

– Eventuell – falls Abhängigkeiten fehlen sollten noch:

apt-get install perl libnet-ssleay-perl openssl libauthen-pam-perl libpam-runtime libio-pty-perl

Im webmin unter Servers / squid web proxy cache müssen dann evlt. noch die Pfade angepasst werden, wenn squid nicht per apt-get insall squid installiert wurde.
Folgende Werte müssen geändert werden:
Full path to squid config file: /usr/local/squid/etc/squid.conf
Squid executable: /usr/local/squid/sbin/squid
Full path to PID file: /usr/local/squid/var/logs/squid.pid
Full path to squid cache directory: /usr/local/squid/var/cache
Squid cachemgr.cgi executable: /usr/local/squid/libexec/cachemgr.cgi
Full path to squid log directory: /usr/local/squid/var/logs
(Thanks to http://www.admin-wissen.de/eigene-tutorials/linux/squid/squid-tutorial-teil-3/)
### Installation via Source Files (….weiterlesen)

Weiterlesen

Squid Proxy – Blockieren von Bestimmten Dateitypen

Eigentlich ganz simpel. Ich habe einen Squid Proxy erstellt und möchte den Zugriff auf bestimmte Dateitypen wie z.B. den Download von Mp3’s, Avi’s etc. verbieten. Durch die Access Control Lists die Squid verwendet, funktioniert dies sehr einfach.
Als erstes legen wir uns eine Datei an, in der wir die entsprechenden Dateitypen eintragen.

vi /etc/squid3/forbidden_filetypes.acl

Ich habe diese im Format:

\.[Aa][Vv][Ii]$
\.[Mm][Pp]3$

bei mir eingetragen. Speichern und fertig.
Nun öffnen wir die squid Config

vi /etc/squid3/squid.conf

Im Bereich der ACL’s fügen wir folgende Zeile hinzu:

acl forbidden_filetypes urlpath_regex "/etc/squid3/forbidden_filetypes.acl"

Damit wird eine Regel „forbidden_filetypes“ angelegt. Nun muss dieser Regel noch eine Aktion hinzugefügt werden (Zeile hinzufügen):

http_access deny forbidden_filetypes

Wenn man eine gesonderte Fehlermeldung für diese Regel anzeigen möchte kann man dafür eine neue Fehlerseite angeben: (Zeile hinzufügen)

deny_info ERR_BLOCKED_FILETYPE forbidden_filetypes

Nun muss man noch eine HTML Datei anlegen unter /usr/share/squid3/errors + gewünschter Sprache mit dem Namen: ERR_BLOCKED_FILETYPE
Anschließend noch die Config speichern und Squid neustarten. Das wars.

/etc/init.d/squid3 restart

Squid Proxy – Active Directory Authentifizierung / LDAP

Diesen Beitrag musste ich einfach schreiben, mich hat es beinahe in den Wahnsinn getrieben, dass ich dieAuthentifizierung gegen eine Windows 2008 R2 Domäne auf anhieb nicht funktionieren wollte.
Ich habe mich auch an diverse Anleitungen / Howto’s gehalten, doch es klappte einfach nicht.
Beispiel, wie es in mehreren Blogs beschrieben wird:

/usr/lib/squid/group_ldap_auth -b dc=my-domain,dc=de -h "server.my-domain.de" -p 636 -g distinguishedName -d "CN=lookup,OU=Services,OU=Users,DC=my-domain,DC=de" -w lookup -u cn -m member -o group -S

oder

auth_param basic program /usr/lib/squid/ldap_auth -b o=Company -h ldapserver -D cn=Tim,ou=IT-Services,o=Company -w timspassword -f (&(objectclass=person)(cn=%s))

Bekam ich jedesmal den Fehler: Invalid Credentials for Binddn
Ich wusste, dass es also an der Authentifizierung des Users liegt, welcher das AD abfragt. (LDAP Abfragen, ohne Authentifizierung sollte ja bei jedem ausgeschaltet sein 😉
Nur warum funktioniert es nicht…..
Am nächsten Tag, habe ich das ganze nochmal mit dem LDAP Browser nachgestellt, und da ist es mir direkt ins Auge gesprungen….
Anstatt bei dem Befehl -D „CN=…..“ anzugeben, muss „DOMAINE\USERNAME“ stehen 🙂
So funktioniert es bei uns:
# Testen

admin@SQUIDSRV:/usr/lib/squid3$ ./squid_ldap_auth -R -b "DC=DOMAINE,DC=INFO" -D "DOMAINE\LDAPREADUSER" -w "PASSWORT" -f sAMAccountName=%s -h 192.168.0.1

Viele Grüße
Constey