Apache als Reverse Proxy für UCServer

Der Anlass für diesen Artikel ist die Veröffentlichung eines UCServer im Internet. Es handelt sich dabei um die Software ProCall Enterprise aus dem Hause ESTOS. Diese sind seit vielen Jahren im Bereich ‚Unified Communications & CTI‘ unterwegs.

Es gibt seitens des Herstellers natürlich ein Dokument ‚UCServer für ProCall Enterprise 6 – Mobile Apps einrichten‚. Darin wird u.a. empfohlen für die Veröffentlichung auf einen Reverse Proxy (RP) zurückzugreifen. Es sind dort detailiert beschrieben, wie die Funktionaltiät eines RP unter Windows Server mit Hilfe von IIS und unter Linux mit Nginx realisiert wird.

Leider war auf Grund des Erreichens des Ressourcen Limits nicht möglich eine dedizierte Maschine dafür aufzusetzen. Allerdings gibt es in der DMZ ein Maschine auf Basis von Debian und Apache2. Auf Nachfrage beim technischen Support bei Estos, gibt es leider keine offzielle Unterstützung für den Webserver.

Die nachstehende Konfiguration  ist nach Try & Error Prinzip entstanden. Die Benutzung und Einsatz geschiet auf eigene Gefahr!

Zuerst müssen folgende Module für den Webserver Apache aktiviert werden, falls noch nicht geschehen.

a2enmod proxy
a2enmod proxy_http
a2enmod proxy_wstunnel

service apache2 restart

Nun kann die eigentliche Konfiguration erfolgen.

#
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/\.well-known
RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteCond %{HTTP:Connection} upgrade [NC]
RewriteRule .* "wss://ucserver01.lab02.wydler.eu:7225%{REQUEST_URI}" [P]

# Tells apache not to forward traffic for the sub directory
ProxyPass /.well-known !

#
ProxyPass / https://ucserver01.lab02.wydler.eu:7225/
ProxyPassReverse / https://ucserver01.lab02.wydler.eu:7225/

# Die Direktive ProxyRequests mit dem Argument Off verhindert, dass der Apache HTTP Server als Forward-Proxy genutzt wird, um einem möglichen Missbrauch vorzubeugen. 
ProxyRequests off

#Der Parameter RemoteIPHeader sagt dem apache er soll im Header die IP-Adresse, welcher der reverse-proxy unter: X-Forwarded-For gesetzt hat als Client IP nehmen.
RemoteIPHeader X-Forwarded-For

#Es wird dem  Webserver gesagt, dass dieser nur dem "RemoteIPHeader" von der angegeben IP-Adresse vertraut. Diese muss also die IP Adresse des Reverse Proxies sein. Dies ist sehr wichtig, da sich die IP im Header ansonsten fälschen (spoofen) lässt.
RemoteIPInternalProxy 127.0.0.1

# This directive toggles the usage of the SSL/TLS Protocol Engine for proxy
SSLProxyEngine on
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off

Es handelt sich dabei um den wesentlichen Teil der Konfiguration. Die Zeile 3 und 9 kann auskommentiert/entfernt werden, falls SSL-Zertifikate nicht über Lets Encrypt abgerufen werden.

Für die Anpassung der SSL Protokolle und dazugehörigen Cipher Suites verweise ich auf den Beitrag Apache – Anpassung SSL Protokolle und Cipher Suites.