3 min read

HAProxy pfSENSE HTTP Basic Auth

In diesem Artikel beschreibe ich wie ich HTTP Basic Auth eingerichtet habe und wie dabei mein vorgehen war und warum ich mich dafür entschieden habe.

Folgendes Szenario wollte ich mithilfe von HAProxy erreichen:‌‌ Ich möchte eine Seite als Webgalerie für meine Bilder verwenden, PiGallery2 in meinem Fall. (Ich habe lange verschiedene Produkte getestet, angefangen mit Synology Photos und dann Piwigo, PhotoPrism, PhotoView, usw.)‌‌ Diese möchte ich natürlich nicht öffentlich zugänglich im Internet stehen haben. Daher habe ich mich informiert, wie ich nur bestimme IP Adressen durchlassen kann. Das Regelwerk sähe dann in etwa so aus:

Access Control List: Domain_ACL1 | Custom ACL: | src 10.0.0.0/22

Diese ACL sollte dann in der entsprechenden Action verwendet werden.

Das Problem

Nun habe ich dies ziemlich schnell umgesetzt, aber es funktionierte nicht. ‌‌Warum? Es könnte daran liegen das mein Setup recht kompliziert ist, ich werde es aber mal probieren zu erklären:

Internet -> FritzBox -> pfSENSE -> Proxmox Server / Desktop / Unifi AP / ...

Damit hatte ich das Problem das sich mein Desktop Rechner im doppelten NAT befand - sehr ungünstig für einige Spiele. Das Problem konnte ich damals aber mithilfe einer Manual Outbound NAT Regel lösen.‌‌ Also: das Problem ist das jetzt in der FritzBox eine Portweiterleitung von 443 und 80 auf die pfSENSE Firewall zeigt. HAProxy läuft unter der 10.0.4.3, ich habe in der pfSENSE wiederrum eine Portweiterleitung von 10.0.4.1 (pfSENSE selber) auf den HAProxy Dienst gelegt.

Firewall/NAT/Port Forward

Und durch meine ganzen Weiterleitungsproblematiken erkennt HAProxy selbst leider nicht mehr woher die Anfrage stammt, die der Dienst abarbeiten soll. Auch eine Firewall Regel die alles durchlässt sowie angepasste Portforwarding Regeln in der FritzBox brachten nicht das gewünschte Ergebnis. Ihr merkt schon, das Problem ist durch meine doppelte Router Konstellation ziemlich kompliziert geworden.

Da ich es aber irgendwie lösen wollte, kam mir die folgende Idee: Ich verwende einfach ein simples HTTP Auth und gebe den Dienst komplett nach außen frei. Das hat zwar das Problem, das die Bilder theoretisch von überall aus zugreifbar sind, auf der anderen Seite ist genau das aber auch der Vorteil. Klar kann man das mit Client Zertifikaten + VPN noch sicherer und besser machen, wir reden hier aber über eine Seite die von meiner Familie benutzt werden soll. Zusätzlich bietet HTTP Auth den Vorteil das es eine zusätzliche Sicherheitsschicht über dem Dienst schafft, was Abhilfe gegen interne Probleme der Software schafft.

HTTP Auth unter HAProxy

Unter Services > HAProxy > Settings legt man den folgenden Eintrag bei Global Advanced pass thru an. Mit user spezifiert man den Benutzer und mit insecure-password (insecure weil somit kein Passwort Hash vorliegt, sondern das Passwort im Klartext vorliegt) das Passwort.

Diesen Referenziert man dann unter Services > HAProxy > Frontend > Edit > Default backend, access control lists and actions:

Ausßerdem muss die ACL dann unter Actions noch angegeben werden:
(photo1 ist die ACL die die Host Matches Regel die für die Erkennung der Domain zuständig ist):

Wenn alles erfolgreich klappt, sollte die Seite beim neuladen ein entsprechendes Fenster für die HTTP Authentifizierung anzeigen.

Die ganzen Informationen zum Umsetzen können in diesem Forumeintrag nachgelesen werden.

Author: peterge