Die Suche nach einem Forefront TMG Ersatz (Teil 5: Debian 7 + HAProxy)

Forefront TMG ist ja nun abgekündigt und es muss auf Kurz oder Lang Ersatz her. Es gibt mittlerweile einige Hersteller die in die Lücke springen die Forefront TMG hinterlässt. Einige vielversprechende Lösungen werde ich also testen und zu jedem auch gleich ein Howto veröffentlichen. Zum Schluss kommt dann noch ein Artikel der die Lösungen miteinander vergleicht und aus meiner Sicht die Vor- und Nachteile auflistet. Soweit der Plan.

Ich habe also eine Standard Testumgebung erstellt, die ich für alle Lösungen verwenden werde. Die Testumgebung ist relativ einfach aufgebaut:

Zeichnung1

Es gibt einen Windows Server 2012 R2 mit dem Namen DC1 auf dem die Domain Controller Rolle und Outlook 2013 installiert ist. Exchange 2013 ist ebenfalls auf Server 2012 R2 installiert. Die Exchange Server tragen die Namen EX1 und EX2. Dies bildet immer die Ausgangssituation für alle Lösungen.

Ich habe mir vorab ein paar Bewertungskriterien festgelegt um später ein Fazit ziehen zu können, wohlgemerkt sind das meine eigenen Kriterien, die wahrscheinlich wenig über die Qualität der einzelnen Produkte aussagen. Dazu aber später mehr.

In Teil 5 kommt nun die mit Abstand günstigste Lösung in der Anschaffung: Debian und HAProxy, beides Open Source. Linux als Reverse Proxy einzusetzen ist nichts neues, Sophos, Kemp, F5 etc. basieren alle auf einem Linux Unterbau. Daher jetzt die Open Source Variante für den preisbewussten Admin Smiley

Mal sehen wie es sich schlägt. Wie üblich wieder die angepasste Testumgebung:

HAProxy

Ich habe also eine neue VM mit Debian 7 (Netinst, nur das OS) installiert, lediglich die VMware Tools habe ich nachinstalliert, und eine feste IP vergeben. Das ist schon alles. Die Installation inkl. der VMware Tools hat etwa 30 Minuten gedauert.

1

Sobald das Debian installiert ist und eine IP bekommen hat, können die Voraussetzungen installiert werden:

apt-get install build-essential make libpcre3 libpcre3-dev libssl-dev joe ssh

“Joe” ist mein favorisierter Editor, es eignet sich natürlich auch jeder andere, wie zum Beispiel Vi oder Nano, das Paket SSH installiere ich nur damit ich die VM via SSH verwalten kann, notwendig ist es nicht.

2

Sobald die Pakete installiert wurden, erzeuge ich ein neues Verzeichnis und lade HAProxy runter:

cd /usr/src/
mkdir haproxy
cd haproxy/
wget http://haproxy.1wt.eu/download/1.5/src/devel/haproxy-1.5-dev19.tar.gz

4

Als nächstes wird das Archiv ausgepackt

tar -xvzf haproxy-1.5-dev19.tar.gz

Und dann kompiliert

make TARGET=linux26 USE_OPENSSL=1 USE_STATIC_PCRE=1

5

Sobald das Paket kompiliert wurde kann es mit folgenden Befehlen installiert werden

make install

/usr/local/sbin/haproxy –vv

6

Damit HAProxy beim Starten des Betriebssystems geladen wird, wird ein Start Script benötigt. Jetzt kommt der Editor “Joe” (oder der Editor eurer Wahl zum Einsatz“):

joe /etc/init.d/haproxy

Der Befehl erzeugt eine neue Datei im Verzeichnis /etc/init.d. Folgender Inhalt kann per Copy und Paste eingefügt werden. Anpassungen sind nicht notwendig:

#!/bin/sh
# /etc/init.d/haproxy

PATH=/bin:/usr/bin:/sbin:/usr/sbin

pidfile=/var/run/haproxy.pid
binpath=/usr/local/sbin/haproxy
options=“-f /etc/haproxy/haproxy.cfg“

test -x $binpath || exit 0

case „$1“ in
start)
echo -n „Starting HAproxy“
$binpath $options
#start-stop-daemon –start –quiet –exec $binpath — $options
echo „.“
;;
stop)
echo -n „Stopping HAproxy“
kill `cat $pidfile`
#start-stop-daemon –stop –quiet –exec $binpath –pidfile $pidfile
echo „.“
;;
restart)
echo -n „Restarting HAproxy“
#start-stop-daemon –stop –quiet –exec $binpath –pidfile $pidfile
kill `cat $pidfile`
sleep 1
$binpath $options
echo „.“
;;
*)
echo „Usage: /etc/init.d/haproxy {start|stop|restart}“
exit 1
esac

exit 0

Jetzt müssen noch die Berechtigungen für das Script angepasst werden, dann kann die Startkonfiguration aktualisiert werden:

cd /etc/init.d
chmod +x haproxy
update-rc.d haproxy defaults

7

Jetzt kann der Pfad für die Konfigurationsdatei angelegt werden

mkdir /etc/haproxy
cd /etc/haproxy/

Im Verzeichnis “/etc/haproxy” wird jetzt das Zertifikat für den Virtual Service abgelegt. Das Zertifikat muss im PEM Format vorliegen. Ich verwende mein Wildcard Zertifikat aus Teil 4. Windows kann Zertifikate nicht direkt in das PEM Format exportieren, aber es gibt Online Dienste die das erledigen können, oder man konvertiert das PFX Format mit OpenSSL in das PEM Format. Einen Online Dienst gibt es hier:

https://www.sslshopper.com/ssl-converter.html

Ich erzeuge die Datei “proxy.pem”

joe proxy.pem

Und kopiere mein Zertifikat im PEM-Format in die Datei. HAProxy erwartet zuerst den privaten Schlüssel, daher muss ggf. nach der Konvertierung in der PEM-Format die Reihenfolge der Blöcke “Private Key” und “Certificate” geändert werden. In meinem Fall schaut der Inhalt der Datei “proxy.pem” so aus:

—–BEGIN PRIVATE KEY—–
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC9ztT1wfXB4q9x
Fliku9hSypzhqniJnuPOPhU6eWSNaE+fFAExpHRsxswQ5fUvYda/SyFKrifObiW/
<snip>
lqxeTvT7wje1xC0i+zdE1qzeQIUaM10HiZ7qMTKUszuaGtPEqLixboNNPGTTk+EE
PdJ0mlf4fzlaWL7Hoyrx8eESvcfPKkUkQ3TibgQJSs3iQT24eVX3xRd5LrFTi52c
5urvkjJYAVZwK54siKK2UiUm5w==
—–END PRIVATE KEY—–
—–BEGIN CERTIFICATE—–
MIIGXzCCBUegAwIBAgITbAAAAA2h0EEH1sCQ3AAAAAAADTANBgkqhkiG9w0BAQUF
ADBLMRUwEwYKCZImiZPyLGQBGRYFbG9jYWwxGjAYBgoJkiaJk/IsZAEZFgpmcmFu
<snip>
0pIVjEX/lcVYXr9M5yRAx6GRnoey3Hcpsl/bXU3nXNwU4rDv4LikOprn7Ekdsutj
pB+a
—–END CERTIFICATE—–
—–BEGIN CERTIFICATE—–
MIIDcTCCAlmgAwIBAgIQEIssKWSPtKpA5a1u5my3MzANBgkqhkiG9w0BAQUFADBL
MRUwEwYKCZImiZPyLGQBGRYFbG9jYWwxGjAYBgoJkiaJk/IsZAEZFgpmcmFua3lz
<snip>
EuIYUsfGlCd5OoakwC52bYXvekaXeCJNN1fSxUSmGIWyezdy80m09J8OBAxkPexy
lhcd/r70BKBzs5ohipZ2AM98U68V
—–END CERTIFICATE—–

Jetzt kann die Konfigurationsdatei ebenfalls im Verzeichnis “/etc/haproxy” erzeugt werden:

joe haproxy.cfg

Meine “haproxy.cfg” hat folgenden Inhalt, die blau markierten Stellen muss der entsprechenden Umgebung angepasst werden:

global
daemon
stats socket /var/run/haproxy.stat mode 600 level admin
pidfile /var/run/haproxy.pid
maxconn 40000
ulimit-n 81000
defaults
mode http
balance roundrobin
timeout connect 4000
timeout client 86400000
timeout server 86400000

frontend Exchange_Server
mode http
bind :443 ssl crt /etc/haproxy/proxy.pem
default_backend Exchange-WebServices-Server

backend Exchange-WebServices-Server
mode http
stick-table type ip size 10240k expire 60m
stick on src
option redispatch
option abortonclose
balance leastconn
server EX1 192.168.29.129:443 weight 1 check ssl inter 2000 rise 2 fall 3 on-marked-down shutdown-sessions
server EX2 192.168.29.127:443 weight 1 check ssl inter 2000 rise 2 fall 3 on-marked-down shutdown-sessions
listen stats :8081
stats enable
stats uri /
option httpclose
stats admin if TRUE
stats auth admin:password

Die Einträge hinter “Server” stellen die Exchange Server dar, EX1 und EX2 sind dabei nur “Anzeige Namen”, die Server werden über die IP angesprochen.

Hinter “listen stats” wird ein Port für ein simples Status und Wartungsinterface benötigt. Ich habe das grafische Interface auf Port 8081 gelegt, der Port ist frei wählbar, solange es nicht 443 ist Smiley

“Stats auth” erwartet Benutzername und Passwort für den Benutzer der grafischen Oberfläche.

8

Jetzt ist die Konfiguration fertig. Der Dienst kann mit folgendem Befehl gestartet werden:

service haproxy start

Hier mal ein Screenshot der grafischen Oberfläche:
9

und OWA funktioniert auch:

haproxy

Die Basis läuft also, ich spiele jetzt ein bisschen rum und pflege meine Tabelle, ich denke die Lösung hat Potenzial. Mal sehen was sich damit alles anstellen lässt…

6 Gedanken zu „Die Suche nach einem Forefront TMG Ersatz (Teil 5: Debian 7 + HAProxy)“

  1. HAProxy lässt sich unter Debian Jessie sehr viel einfacher per „apt-get install haproxy“ über das Repository installieren und muss nicht extra kompiliert werden. Ein Initskript ist auch dabei, sodass nur noch das Zertifikat eingerichtet und die Konfiguration angepasst werden muss.

    Antworten
  2. Hi Frank, ich bin scheinbar zu blöd und bekomme es nicht hin.

    Entweder werden alle Anfragen nach dem / an den Exchange weitergegeben (also auch die IIS Startseite) oder ich bekomme Fehlermeldungen zur Konfig.

    Mein Ansatz war je ein Frondend pro URL anzulegen und darin die entsprechende ACL zu definieren. Also so:

    # Weiterleitung für OWA URL
    frontend Exchange_Server_OWA
    mode http
    bind :443 ssl crt /etc/haproxy/Exchange_Zertifikat_haproxy.pem

    default_backend Exchange-Nirvana
    acl is_owa path_beg /owa
    use_backend Exchange_OWA if is_owa

    # Weiterleitung für Autodiscover URL
    frontend Exchange_Server_Autodiscover
    mode http
    bind :443 ssl crt /etc/haproxy/Exchange_Zertifikat_haproxy.pem

    default_backend Exchange-Nirvana
    acl is_autodiscover path_beg /autodiscover
    use_backend Exchange_Autodiscover if is_autodiscover

    # Backends

    backend Exchange_Autodiscover
    mode http
    stick-table type ip size 10240k expire 60m
    stick on src
    option redispatch
    option abortonclose
    balance leastconn
    server ex2010.testdom.local 192.18.0.210:443 weight 1 check ssl inter 2000 rise 2 fall 3 on-marked-down shutdown-sessions

    backend Exchange_OWA
    mode http
    stick-table type ip size 10240k expire 60m
    stick on src
    option redispatch
    option abortonclose
    balance leastconn
    server ex2010.testdom.local 192.18.0.210:443 weight 1 check ssl inter 2000 rise 2 fall 3 on-marked-down shutdown-sessions

    # Anfragen auf allen anderen URLs ins Nirvana leiten
    backend Exchange-Nirvana
    mode http
    stick-table type ip size 10240k expire 60m
    stick on src
    option redispatch
    option abortonclose
    balance leastconn
    server Nirvana 172.17.0.1:443 weight 1 check ssl inter 2000 rise 2 fall 3 on-marked-down shutdown-sessions

    Der HAProxy kann so aber offenbar kein BIND bei den anderen Backends machen, da die auf die gleiche IP verweisen.

    Es wäre echt gut, dass hinzubekommen, da gerade für kleinere Umgebung ein Balancer wie KEMP ( der sehr gut funktioniert) etwas Overkill ist.

    Antworten
  3. Hallo Frank,
    danke für die schnelle AW. Leider ist das mein Problem. Ich habe keine Ahnung, wie ich das in die Konfig. bekommen. Hatte mich schon mit der Verwendung von „acl“ versucht, jedoch ohne Erfolg.
    Ich bin also für jeden Hinweis offen.
    Danke, Sven

    Antworten
  4. Hallo Sven,

    ja, das lässt sich machen, du müsstest dann mehrere Front End und Backend Server anlegen und die jeweils auf eine URI laufen lassen. Ich meine im Netz gibt es genug Anleitungen dazu, im Prinzip ist das alles gleich :-)

    Gruß, Frank

    Antworten
  5. Hallo Frank,

    super Anleitung bzw. Serie. Eine Frage hätte ich noch.

    Kann man den Zugriff auf die Website snoch weiter einschränken in der HAProxy Konfig?

    Mit dieser Konfig sidn ja alle Websites des Exchange inkl. der IIS Startseite erreichbar. Das muss ich vermeiden bzw. möchte ich nur Website sfür OWA und EAS veröffentlichen.

    Danke und VG

    Sven

    Antworten

Schreibe einen Kommentar