Hallo zusammen,
ich bin gerade dabei mailcow in der Hetzner Cloud aufzusetzen und das komplette Mailing in meine Hände zu übertragen. Geplant habe ich, dass mailcow nicht direkt im Internet steht, sondern hinter einer Firewall in einem separaten Servernetz. Als „Relay“ sollen dann das bereits installierte Proxmox Mail Gateway in der ebenfalls hinter der Firewall existierende DMZ (für die Kommunikation mit anderen Mailservern über Port 25) sowie für alle anderen Ports wie 80 (http), 443 (https), 993 (imaps), 465 (smtps) und 587 (submission) ein HAProxy (als Plugin in OPNsense) dienen und die Kommunikation zu mailcow „managen“, so dass mailcow selbst auch in der Lage ist mit ACME das Let‘s Encrypt Zertifikat zu ziehen bzw. zu erneuern. Ich habe mich extra für HAProxy entschieden, da HAProxy neben OSI-Layer 7 (http und https) auch Layer 4 (tcp) verarbeiten kann.
Mittlerweile sitzt ich an der Konfiguration des HAProxy bloß schon seit zwei Wochen und tue mir ehrlich gesagt gerade noch irgendwie mega schwer, HAProxy über die GUI von OPNsense zu konfigurieren. Ich habe jetzt schon einige Beispiele aus der CLI für HAProxy im Netz gefunden, kann diese bloß irgendwie nicht auf die GUI umstricken. Leider finde ich im Netz aber auch keine brauchbaren Anleitungen oder zumindest mal Blogeinträge wo man sich die Config vielleicht ableiten kann. Daher hoffe ich, dass jemand von Euch das schon mal konfiguriert hat und vielleicht seine Config mit der Community teilen mag oder ein paar Screenshots aus OPNsense.
Schon mal Danke für Eure Antworten.
Viele Grüße
svenson-man
Moin, du musst ja auf jeden Fall nicht im HAProxy von 80 auf 443 umleiten. Weil dann funktioniert Letsencrypt nicht…
Was hast du denn bis jetzt?
Moin,
wie gesagt, ich habe Beispiele und Anleitungen gefunden, welche aber auf die CLI Config von HAProxy ausgerichtet waren und habe dann versucht, die nach bestem Wissen in der GUI von HAProxy auf der OPNsense umzusetzen. Momentan sieht meine HAProxy Einstellung wie folgt aus:
Unter „Real Servers“ habe ich erstmal für jeden Port den ich durchreichen will
https (443)
http (80)
imaps (993)
smtps (465)
submission (587)
imap (143)
einen Eintrag auf die interne IP des Mailservers (Backend) gesetzt. Alles ist im Mode TCP eingerichtet und mit der Optionsweiterleitung „send-proxy-v2“. Diese Option ist (soweit ich das gelesen habe) wichtig, damit mailcow hinter dem HAProxy wohl nicht die IP-Adresse der OPNsense als Quelle sieht sondern die tatsächliche IP-Adresse der Datenquelle.
Dann habe ich unter Backend Pools für jeden Backend-Eintrag ebenfalls einen Eintrag vorgenommen und diese jeweils dem passenden Backend-Eintrag zugeordnet.
Dann habe ich nach dem gleichen Schema für jeden Port unter „Public Services“ einen Eintrag erstellt (Frontend, was von außen quasi erreichbar ist). Hier ist in jedem Eintrag bei „Listen Address“ die externe IP-Adresse (WAN-IP) inkl. dem Port angegeben.
Dann hatte ich noch den Hinweis gefunden, dass man für https Passthrough dies mit SNI-Routing machen muss. Dies macht man wohl als Condition und Rule für https mit „SNI TLS Extension“ und http wird einfach mit „Host matches“ durchgereicht da ja kein TLS. Sonst klappt es wohl mit dem ACME Client und Let’s Encrypt nicht. Für alle anderen TCP Protokolle wie SMTPS, IMAP, IMAPS und Submisson wurde einfach nur eine Rule erstellt ohne eine Condition.
Wenn ich jetzt eine Syntax Prüfung mache, sagt HAProxy dass zumindest die Syntax korrekt ist. Ich würde das einfach gerne mal abgleichen wollen, falls jemand auch mailcow hinter einem HAProxy betreibt.
OK, das sind ganz andere Bezeichnungen als in der pfSense. Hab das gestern mal nebenbei versucht einzurichten, das hat nicht geklappt. Aber ich muss auch in meinem Labor um die Sicherheitstechniken noch drumherum arbeiten..