Ubiquiti Networks

Unifi Controller mit Apache Reverse Proxy

Es kann nicht immer Nginx sein um eine Reverse Proxy Verbindung, z.B. zu einem Unifi Controller aufzubauen. Manchmal ist eben ein Apache das Webserver-Zugpferd. Die Anforderung in diesem speziellen Beispiel ist als Absicherung für einen Unifi Controller gedacht, der seine GUI an Port 8443, mit einem selbst signierten SSL Zertifikat ausliefert. Damit ergeben sich die beiden Probleme: SSL und Reverse Proxy.

Certbot installieren

Die Lösung ist einfach, indem zunächst Certbot installiert wird um das Zertifikat für den Apachen zu holen. Beschrieben wurde dies bereits im letzten Tutorial (siehe Abschnitt Plugin: Apache2).

Unifi Controller „einbetten“

Die Installation des Controllers wird auf der Seite des Herstellers erläutert und ist damit kein Thema für diese Anleitung. Vielmehr Thema ist das Problem des selbst signierten Zertifikats das mitgeliefert wird. Um den Vorteil der automatisierten Zertifikate von Let’s Encrypt mitzunehmen, soll dieses auch gar nicht angefasst, sondern stattdessen in den Apachen integriert werden. Der Controller hört im Beispiel auf Port 8443 – selber Server. Damit wird der Reverse Proxy auf 127.0.0.1:8443 gebunden. Dies bringt aber noch keinen entscheidenden Vorteil in Punkto Sicherheit. Dazu wird der Passwortschutz gesetzt, mit Hilfe eines Location Containers.

Um ein 502 (Bad Gateway) zu verhindern gibt es eine Besonderheit die es zu beachten gilt und zwar, dass der Apache die Gültigkeit des Unifi Zertifikats nicht in Frages stellt. Das erreicht man mit einer Reihe von SSLProxyCheck-Direktiven:

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerName uc.meinedomain.tld
    ServerAdmin root@localhost
    DocumentRoot "/path/to/ucontroller/"
    <IfModule mod_headers.c>
        Header always add Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"
    </IfModule>

    <Location />
        AuthType Basic
        AuthName "Login"
        AuthUserFile /etc/apache2/.htpasswd
        Require valid-user
    </Location>

    Header set Host uc.meinedomain.tld
    RequestHeader set Host 127.0.0.1
    Header unset Referer
    RequestHeader unset Referer

    SSLEngine on

    <IfModule mod_proxy.c>
        SSLProxyEngine On
        SSLProxyVerify none
        SSLProxyCheckPeerCN off
        SSLProxyCheckPeerName off
        SSLProxyCheckPeerExpire off

        ProxyRequests off
        ProxyPass / https://127.0.0.1:8443/
        ProxyPassReverse / https://127.0.0.1:8443/
    </IfModule>

    ErrorLog ${APACHE_LOG_DIR}/uc_error.log
    Include /etc/letsencrypt/options-ssl-apache.conf

    SSLCertificateFile /etc/letsencrypt/live/uc.meinedomain.tld/cert.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/uc.meinedomain.tld/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/uc.meinedomain.tld/chain.pem
</VirtualHost>
</IfModule>

Fertig! Inklusive Passwortschutz

Kommentare

Schreibe einen Kommentar