pfSense HAProxy als Reverse Proxy

HAProxy auf pfSense

Für den Einsatz eines Reverse Proxys gibt es verschiedene Gründe. Ein Reverse Proxy kann zum Beispiel genutzt werden, um hinter einer einzelnen IP-Adresse und Port Kombination mehrere Netzwerkdienste zu betreiben. Außerdem kann ein Reverse Proxy erheblich zur Sicherheit der Dienste beitragen. Dies erreicht man durch den Einsatz von Verschlüsselung und Header Manipulation. In diesem Beitrag wird erklärt, wie man pfSense HAProxy als Reverse Proxy einrichten kann. Die genutzten Domains und Subdomains sollten schon vorhanden und korrekt konfiguriert sein. Bei einer dynamischen IP bietet sich die Konfiguration von Dynamic DNS an (GoDaddy Dynamic DNS mit pfSense).

HAProxy besteht aus drei grundlegenden Bereichen.

  • Allgemeine Einstellungen (Ressourcen, Statistik, Logging usw.)
  • Frontend (IP-Adresse und Port Kombination mit der HAProxy Verbindungen entgegen nimmt.)
  • Backend (Netzwerkdienste, auf welche HAProxy weiter leiten soll.)

pfSense HAProxy als Reverse Proxy einrichten

Zuerst installiert man das Paket in der pfSense Paket Verwaltung.

Reverse Proxy Installation

Nach der Installation erscheint HAProxy im Services Menü. Hier konfiguriert man die gewünschten Einstellungen.

pfSense HAProxy Menue

General settings

Zuerst den Haken bei „Enable HAProxy“ setzen, um HAProxy zu aktivieren und einen Wert für „Maximum connections“ festlegen (z. B. 1000).
Unter „Tuning“ empfehle ich das setzen von 2048 für die maximale Länge des Diffie Hellman Parameters.

Solltet ihr ein HA Cluster betreiben wie hier erklärt, wählt man zusätzlich eine Carp Monitor Schnittstelle aus (z. B. LAN CARP). Der HAProxy Dienst ist anschließend nur auf dem CARP Master Gerät aktiv. Zusätzlich muss man noch „Configuration synchronization“ aktivieren.

Backend

Da in der Frontend Konfiguration ein Backend ausgewählt werden muss, konfigurieren wir das Backend zuerst. Für jeden internen Server legt man eine eigene Backend Konfiguration an. Hier am Beispiel von „subdomain.example.com“.

HAProxy Backend

Frontend

Es werden mindestens zwei Frontend Konfigurationen benötigt. Eine für Port 80 zur Umleitung auf HTTPS und eine auf dem HTTPS Port 443.

Im HTTP Frontend definiert man, dass dieses Frontend auf Port 80 lauscht und alle Anfragen, welche mit der eingetragenen Domain (z. B. example.com) enden zu HTTPS umgeleitet werden.
Bei einem HA Cluster wählt man als „Listen address“ die CARP WAN IP aus.

HAProxy HTTP Frontend

Im HTTPS Frontend ist etwas mehr Konfiguration erforderlich. Zusätzlich zu IP und Port Einstellungen konfiguriert man die gewünschten Backends und SSL Einstellungen.

In der Sektion „Advanced pass thru“ trägt man folgende HTTP Header ein. Was diese bewirken beschreibt das OWASP Projekt ausführlich.

http-response set-header X-Xss-Protection 1;\ mode=block
http-response set-header X-Content-Type-Options nosniff
http-response set-header X-Robots-Tag noindex
http-response set-header X-Frame-Options SAMEORIGIN
http-response set-header Referrer-Policy same-origin

Achtung:

  • Das Setzen des X-Content-Type-Options Parameters kann Probleme beim Login einiger Dienste erzeugen (z. B. Nextcloud)
  • Der „X-Robots-Tag“ verhindert die Suchmaschinen Indizierung.

Zusätzlich fügt man bei „Advanced ssl options“ noch die gewünschten Ciphers für die Verschlüsselung ein.

force-tlsv12 ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256

Als Zertifikat empfiehlt sich ein Wildcard Zertifikat zum Beispiel von Let’s Encrypt.

Bei einem HA Cluster wählt man als „Listen address“ die CARP WAN IP aus.

HTTPS Frontend

Firewall-Regel

Damit der HAProxy Dienst auch von außen erreichbar ist, sollte man eine Firewall-Regel auf dem WAN Interface konfigurieren. Zuerst legt man dafür einen Alias mit den verwendeten Ports an.

HAProxy Alias

Dann kann man anschließend die benötigte Firewall Regel einrichten.

HAProxy WAN Regel

Damit ist die Konfiguration abgeschlossen.