Ziele

Der Betrieb eines Nextcloud Servers mit einem Let's Encrypt Zertifikat und HAProxy ist auf der OPNsense Firewall schön übersichtlich dargestellt und es sind nur folgende Schritte nötig, um das Ziel dieses 2. Teils zu erreichen:

Dennoch: Diese Ausbaustufe ist zwar nun für den öffentlichen Betrieb geeignet, muss aber regelmäßig nun aktualisiert und gepflegt werden. Nichts ist schlimmer als eine veraltete und damit angreifbare Installation.

Letzte Aktualisierung:

  • 17.01.2026: Nextcloud 32 und Kontrolle
  • 26.03.2023: Initiales Dokument

Vorbedingung für öffentlichen Betrieb

  • Nextcloud aus dem ersten Teil ist installiert und bereit
  • Eine eigene Subdomain mit fester IP oder DyDNS Adresse ist verfügbar (z.B. nextcloud.domain.de)
  • opnSense Firewall
    • Wichtig! Die Adminoberfläche wurde von Port 443 auf 4433 umgelegt
    • Mit den instalierten Plugins os-haproxy und os-acme-client
    • Der Zugriff auf TCP Port 443 ist an der WAN Schnittstelle erlaubt/freigegeben
    • Intern sollte der EXTERNERHOSTNAME auf die IP der OPNsense gesetzt werden (damit auch interne Aufrufe durch HAProxy geleitet werden)

Screenshot%202022-10-30%20124502

Begrifflichkeiten

  • EXTERNHOSTNAME = Der extern erreichbare Hostname für Nextcloud
  • ACCOUNTNAME = Name des Let's Encrypt Accounts
  • EMAILADRRESSE = Email Adresse des Let's Encrypt Accounts
  • NEXTCLOUDIP = IP Adresse des lokalen NEXTCLOUD Servers
  • NEXTCLOUDHOSTNAME = Hostname des lokalen NEXTCLOUD Servers

Diagramm

Damit sieht das Setup so aus:

                  ┌──────────────────────┐                      ┌─────────────────────────┐
                  │ OPNsense             │                      │ FreeBSD                 │
                  │                      │                      │ ┌─────────────────────┐ │
                  │                      │                      │ │ jails/nc            │ │
WAN: 0.0.0.0:443 ─┼─► HAProxy:443 ───────┼──► LAN: 0.0.0.0:443 ─┼─┼─► nginx/php         │ │
WAN: 0.0.0.0:80 ──┼─► acme.sh:80         │                      │ │   │                 │ │
                  └──────────────────────┘                      │ │   └─► jail/pgsql    │ │
                                                                │ │         postgresql  │ │
                                                                │ └─────────────────────┘ │
                                                                └─────────────────────────┘

Lets Encrypt Zertifikate

OPNsense ist mit dem ACME Client Plugin (os-acme-client) in der Lage Let's Encrypt Zertifikate zu erstellen und auch automatisch zu erneuern. Der riesen Vorteil ist, dass wir eine zentrale Zertifikatsverwaltung haben, nicht mühselig auf den internen Zielsystemen jeweils eine eigene Verwaltung der Zertifikate benötigen und keine NAT oder anderen Firewall Einstellungen vornehmen müssen.

Hier reichen die Grundeinstellungen wie hier beschrieben mit folgenden Definitionen:

  • EXTERNHOSTNAME = Der extern erreichbare Hostname (z.B. nextcloud.domain.de)
  • EMAIL = Email Adresse des Let's Encrypt Accounts (z.B. name@domain.de)

HAProxy

HAProxy nimmt von außen die Aufrufe für den Port 443 entgegen, verschlüsselt die Verbindung und leitet diese dann an den internen Nextcloud Server auf Port 443 weiter. Das schöne ist, das mehrere Dienste gleichzeitig auf Port 443 bereitgestellt werden können. Unterschieden wird über den aufgerufenen externen Hostnamen.
Damit ist es möglich das z.B https://nextcloud.domain.de an Nextcloud und https://domain.de zur eigentlichen Webseite geleitet wird, obwohl beide eigentlich Port 443 auf der gleiche externen IP Adresse benötigen.

Hier geht ihr auch durch diesen Artikel mit folgenden Definitionen durch:

  • EXTERNHOSTNAME = Der extern erreichbare Hostname (z.B. nextcloud.domain.de)
  • IP = IP Adresse des lokalen Nextcloud Servers (z.B. 192.168.1.102)
  • NEXTCLOUDHOSTNAME = Hostname des lokalen Nextcloud Servers (z.B. nextcloud.domain.de)
  • PORT = Port des lokalen Nextcloud Servers (443)

Voilá