Hansesystems Fortech GmbH & Co. KG Logo

UniFi Nginx Beitragsbild

UniFi Cloud Controller hinter Nginx Reverse Proxy betreiben

Die UniFi Cloud Controller Software von Ubiquiti ist vielen von euch sicherlich ein Begriff und in Benutzung. Die UniFi Serie bietet für das Monitoring und Konfiguration verschiedene Möglichkeiten. On-Prem kann mit den UniFi Cloud Key gearbeitet werden. Eine Andere Möglichkeit ist die Nutzung des Cloudcontrollers On-Prem oder z.B. in der Cloud. Erfahrt in diesem Artikel auf was ihr beim hosten achten solltet um nicht nur die Flexibilität zu nutzen, sondern auch die Sicherheit zu erhöhen.

 

Warum UniFi Cloud Controller hinter einem Reverse Proxy betreiben?

Auf diese Frage gibt es sicherlich eine Menge an Gründen auf die wir nicht alle eingehen werden. Wir möchten euch viel mehr sensibilisieren und aufzeigen warum die Nutzung hinter einem Reverse Proxy sicherer sein kann.

Damit eure aktiven UniFi Geräte wie Switche, Access Points oder das USG ihre verschlüsselten Daten an den Controller senden können, ist es notwendig diesen via Portfreigabe dem Internet zugänglich zu machen. Portfreigaben/Portweiterleitungen sind eine gängige Methode dies zu ermöglichen. Was ist also der Nachteil dieser Methode werdet ihr euch sicherlich jetzt fragen. Eine Portweiterleitung stellt quasi den direkten Weg vom Internet zu eurer freigegebenen Ressource dar. Als wäre das Netzwerkkabel direkt am Internet angeschlossen. Der daraus resultierende Nachteil kann sein, dass ihr einige oder viele Ports freigeben müsst. Als Beispiel nenne ich - STUN, HTTPS, HTTP oder vielleicht sogar Ports des UDP Protokoll. Nicht nur der Aufwand diese Ports zu monitoren kann Hindernisse hervorrufen, ihr habt auch noch eine ganz essentielle Einschränkung. Wie ihr sicherlich wisst, kann ein freigegebener Accessport nur einmalig vergeben werden. Das bedeutet, dass ihr als Beispiel eine Weboberfläche über HTTPS erreichbar gemacht habt - für einen bestimmten Service. Diesen Port habt ihr nun schon in Verwendung und könnt ihn nicht erneut nutzen. Nun könntet ihr natürlich sagen, dass dafür das Portremapping nutzt, also den einen Accessport umleitet an einen anderen. Das würde funktionieren, nur bedenkt bitte die Folgen dessen. Ihr öffnet einen weiteren Port um diesen an intern umzuleiten. Wie sieht es aber mit eurer TLS Verschlüsselung der Weboberfläche aus? Schafft ihr das noch?

Vorteil eines Reverse Proxy

Nehmen wir in diesem Abschnitt einige oben genannte Punkte auf und gehen etwas darauf ein. Die genaue Funktionsweise eines Reverse Proxy könnt ihr zu Hauf im Internet nachlesen.

  • SSL TLS Verschlüsselung für die angebundenen Service
  • HTTPS 2
  • Server sind abgeschottet
  • Zugriffsrichtlinien
  • Passwort Zugriffschutz
  • Load Balancing
  • uvm.

Ein großer Vorteil des Reverse Proxy ist die Tatsache, dass ihr ein weiteres Glied in euerer Sicherheitskette besitzt. Eure Server befinden sich hinter dem Reverse Proxy und die Kommunikation findet ausschließlich über ihn statt.

Reverse Proxy
Schematische Darstellung der Kommunikation mit einem Reverse Proxy

Ferner ist es euch durch den Einsatz möglich, für jeden Webservice ein SSL/TLS Zertifikat zu nutzen. Durch den Einsatz ist die Verbindung zu der entsprechenden Webconsole verschlüsselt. Die Nutzung von Let´s Encrypt Zertifikaten ist genauso möglich. Diese werden sogar automatisch verlängert. Bei Nginx lassen sich UDP Pakete weiterleiten (Stream), daher ist er der perfekte Part für unsere Konfiguration. An dieser Stelle sei noch kurz erwähnt, dass ihr natürlich auch ein Loadbalancing Szenario konfigurieren könnt.

 

Konfigurationsschritte

An dieser Stelle möchten wir kurz darauf hinweisen, dass wir einen Auszug einer funktionierenden Konfiguration zeigen werden. Es lassen sich einige Sicherheitsfunktionen wie z.B. Passwortabfrage, GeoFilter usw. konfigurieren.

 

Nginx Konfiguration

In diesem HowTo steht die Konfiguration des Nginx im Vordergrund. Wir gehen davon aus, dass Ihr den UniFi Cloud Controller nicht in einem HA Szenario betreibt weshalb wir dies nicht mit einbeziehen werden. Auch gehen wir davon aus, dass ihr eine lauffähige Installation des Nginx mit Reverse Proxy Feature betreibt.

Die standard nginx.conf Datei lässt euch die Möglichkeit offen, unter z.B. /etc/nginx/conf.d/ einzelne Konfigurationsdateien für eure Service zu erstellen. Diese werden automatisch beim Starten des Nginx Service eingebunden und verarbeitet. Dadurch könnt ihr euch für die einzelnen Service eigene Konfigurationen erstellen und die Dateien benennen. Nehmen wir an, ihr habt unter dem Pfad eine unifi.conf erstellt. In diese Datei schreiben wir nun unsere Konfiguration nur für UniFi. Nginx lädt und verarbeitet diese bei jedem Start.

Wichtiger Hinweis:
Ihr müsst natürlich einen FQDN mit gesetztem A Record an eurer Domain eingerichtet haben. Solltet Ihr einen Service wie Cloudflare für DNS nutzen, so muss die Einstellung natürlich dort erfolgen. Wichtig ist auch, dass an eurer Firewall die entsprechenden Ports an den Reverse Proxy geleitet werden. Beispiele wären hier: HTTP, HTTPS (Let´s Encrypt), STUN. Gleichzeitig sollte über die Firewall geregelt werden, dass der Zugriff nicht am Reverse Proxy vorbei geschehen kann.

 

UniFi Cloud Controller

Dieser Teil der Konfiguration befindet sich in der oben genannten Konfigurationsdatei z.B. unifi.conf unter /etc/nginx/conf.d/. Die Konfiguration haben wir auf die entsprechenden Teile eingekürzt. Dadurch sind die Einträge von Certbot (Let´s Encrypt Zertifikate) nicht enthalten.

server {
server_name FQDN des A Record; #Beispiel: unifi-controller.domain.de

#Proxy Parameter für das UniFi Dashboard

location / {
proxy_pass https://interne IP des Server:8443;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_http_version 1.1;
proxy_set_header Connection "upgrade";
client_body_buffer_size 10M;
client_max_body_size 10M;
}

server {
if ($host = FQDN des A Record) {
return 301 https://$host$request_uri;
} # managed by Certbot

listen 80;
server_name FQDN des A Record;
return 404; # managed by Certbot
}

#Proxy Parameter für den Informationsaustausch und das Einbinden neuer Geräte

server {
listen 8080;
location /inform {
proxy_pass http://interne IP des Server:8080/inform;

}
}

 

Nginx Stream

In der nginx.conf Datei legen wir einen Stream an. Mit diesem ist Nginx in der Lage UDP Pakete weiterzuleiten.

stream {
upstream unifi_stun {
server interne IP des Server:3478;
}

server {
listen 3478 udp;
proxy_pass unifi_stun;
proxy_responses 1;
}

 

Schlusswort

Sofern ihr die einzelnen Schritte befolgt habt und auch die benötigten Server lauffähig und konfiguriert sind, sollte der Nutzung des UniFi Cloud Controller hinter einem Reverse Proxy nichts im Weg stehen. Beachtet bitte bei der Nutzung der UniFi APP, dass als Zugriffsport nun HTTPS (443) angegeben werden muss. Der Reverse Proxy nimmt nämlich die Verbindung an und kommuniziert mit dem Controller. Durch das setzen der inform Location ist es außerdem möglich, eine L3 Adoption durchzuführen. Das könnt ihr folgendermaßen durchführen:

  • Loggt euch via SSH direkt auf das entsprechende UniFi Gerät ein. Standard Logindaten sind ubnt, ubnt.
  • Gebt in der Konsole folgendes ein: set-inform http://FQDN des A Record:8080/inform (http://unifi-controller.example.com:8080/inform).
  • Setzt den Befehlt mit Enter ab und bindet das Gerät in die entsprechende Site am Controller ein.

Wir hoffen euch damit etwas geholfen und eure interne sowie externe Kommunikation sicherer gemacht zu haben.

power-switchmenuchevron-down