Raspberry Pi und SSL

MitchMi

Lieutenant
Registriert
Juni 2020
Beiträge
581
Mahlzeit in die Runde :)

Direkt vorab: Ich bin noch relativ neu in der Raspi/ Linux/ Ubuntu Szene und versuche mich, dort etwas einzulesen bzw. hab auch schon das ein oder andere hinbekommen :P

Kurz zur Eigentlichen Anforderung:
Ich möchte gerne mehrere Websites (Klein und ohne viel Traffic) via Wordpress auf meinem Raspberry 4 hosten.
Aufgrund gewisser Problematiken mit "Multisites" habe ich mich dazu entschieden, für jede Site eine neue Installation vorzunehmen.
Das ganze realisiere ich via Docker. Ich sage mal vorab: Keine Ahnung ob das so der richtige/ beste Weg ist, aber es funktioniert^^

Beispiel:

Raspi (benannt in Docker) hat die IP: xxx.xxx.xxx.xxx (Statisch).
Die Website hat dann (xxx.xxx.xxx.xxx:8080 (So in der Konfiguration der Site angegeben. Dementsprechend den Port im Router geöffnet.) Sagen wir, ich erstelle eine zweite Seite, bekommt diese Port 8081 zugewiesen und immer so weiter.
Klappt soweit auch alles. (Wie gesagt, sicherlich nicht die eleganteste Lösung, aber erfüllt erstmal seinen Zweck).

Eine Hauptdomain mit SSL-Zertifikat habe ich. Darin enthalten auch.. öhm.. 500? Subdomains. Für die Subdomains ist ebenfalls ein passendes Paket vorhanden, damit die Subdomains auch SSL Zertifiziert sind.

Habe dann auf der Seite des Domainhosters als Umleitung für die Subdomain die entsprechende IP eingetragen (xxx.xxx.xxx.8080).
Weiterleitung funktioniert, allerdings kommt: "Dies ist keine sichere Seite".

Ich vermute mal, ich muss dem PI auch ein Zertifikat zuweisen? Oder doch jeder Seite einzeln? Oder muss ich noch etwas ganz anderes machen?

Port 80 und 443 sind auf dem Router (Fritzbox) ebenfalls geöffnet.

Habe natürlich schonmal etwas gegooglet, aber so richtig auf die passende Lösung bin ich bisher nicht gestoßen. Es kann natürlich auch sein, dass die richtige Lösung dabei war, ich es aber einfach nicht verstanden habe. Wäre über jede Hilfe dankbar :)

Liebe Grüße
 
Die Weiterleitung leitet auf deinen PI weiter und der muss dann auch das Zertifikat präsentieren, da du ja mit dem Pi redest und eine TLS-Verbindung eine Ende-zu-Ende Verbindung darstellt.
Ergänzung ()

Allerdings musst du nicht damit anfangen, jede Seite hinter einem eigenen Port zu verstecken. Mit einem passend konfigurierten (revers)Proxy, kannst du anhand der (Sub-)Domain beim Verbindungsaufbau erkennen, mit welcher Site geredet werden soll und passend "routen" (schimpft sich SNI und ist ein Feature von TLS).
 
Zuletzt bearbeitet:
MitchMi schrieb:
Ich sage mal vorab: Keine Ahnung ob das so der richtige/ beste Weg ist, aber es funktioniert^^
MitchMi schrieb:
Port 80 und 443 sind auf dem Router (Fritzbox) ebenfalls geöffnet.
die beiden sachen passen absolut nicht zusammen. da kann echt ordentlich was schief gehen. mach die ports zu und mach es als übung für dich zuhause, nicht von extrern erreichbar. Du bist ein gefundenes Fressen für jeden 0815 hacker.

falls die von außerhalb erreichbar sein sollen nimm dir einen hoster deiner wahl für 1-2€ im monat und sei auf der sicheren seite. Einen Webserver/Dienst im Internet zu betreiben ist ein Vollzeitjob für Leute mit Ahnung!
 
  • Gefällt mir
Reaktionen: KillerCow und Das MatZe
Erstmal danke für die Antworten :-)
honky-tonk schrieb:
falls die von außerhalb erreichbar sein sollen nimm dir einen hoster deiner wahl für 1-2€ im monat und sei auf der sicheren seite. Einen Webserver/Dienst im Internet zu betreiben ist ein Vollzeitjob für Leute mit Ahnung!
Ein Webhostingpaket habe ich auch (Strato). Da wird aber nur die Möglichkeit der Multisite angeboten und genau das möchte ich ja nicht.
 
Schau dir mal Caddy an: https://caddyserver.com/

Der bietet genau die angesprochene Reverse-Proxy Funktion und auch alles was du für TLS brauchst -> Caddy holt sich automatisch gültige Zertifikate.

Edit: Dennoch +1 für die restlichen Kommentare in Richtung Security. Das Internet ist wilder Westen und man sollte einigermaßen verstehen was man macht und wie man sich schützen kann.
 
  • Gefällt mir
Reaktionen: Das MatZe, MitchMi und JumpingCat
@marcel. Also verstehe ich das richtig das Caddy quasi eine eigene Serverumgebung ist? Ich versuche mir gerade einen Reim drauf zu bilden ^^ Sprich: Man installiert Caddy als Hauptumgebung, und darauf dann z.B. Docker (Für meinen Anwendungszweck) und Caddy vergibt dann quasi die Zertifikate?

Edit:// Ich hab mich jetzt mal etwas in diese Caddy-Geschichte eingelesen und auch, wie man dort Wordpress installiert. Ergibt soweit alles Sinn.
Was ich allerdings nicht so ganz raus bekomme: Wie installiere ich dort denn mehrere einzelne WP Instanzen? In meinem Kopf packe ich das einfach in einen anderen Ordner. Standard wäre ja zb www/html/ also erstelle ich im Endeffekt zb www/html2/.. Allerdings, soweit ich es gelesen habe, muss ja eine Caddy Datei so angepasst werden, dass für die WP Installation eine Domain hinterlegt wird.
Irgendwie will sich da keine Logik in meinem Kopf bilden ^^''
 
Zuletzt bearbeitet:
Caddy ist keine Serverumgebung, der Caddy-Server übernimmt nur die Aufgabe, den ankommenden Traffic auf deinem Raspi an die jeweiligen richtigen Empfänger weiterzureichen. Ob Wordpress intern Multi-Site supported weiß ich leider nicht, daher gehe ich in diesem Post erstmal davon aus, dass jede deiner Seiten einen eigenen Wordpress-Container hat. In deinem Fall reicht Caddy also die eingehenden Requests an die einzelnen Wordpress-Docker-Container weiter:

Code:
----> Caddy ----> wp-container1 (site1.de)
            |
            -----> wp-container2 (site2.de)

Caddy selbst kann ebenfalls über Docker hochgefahren werden und ist auch der einzige Container, der zwingend von außen erreichbar sein muss. Die Wordpress-Container können dann auch nur im internen Docker Netzwerk des Hosts erreichbar sein.

In der Praxis kann man das schön via Docker-Compose bauen. Das könnte dann in etwa so aussehen:

Code:
name: wordpress

services:
  # caddy
  caddy:
    image: caddy:2.8.4
    container_name: caddy
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - # [...]
    networks:
      - caddy

  # wordpress-site-1
  wp-site-1:
    image: # [...] Wordpress Image
    container_name: wp-site-1
    restart: unless-stopped
    environment:
      # [...]
    depends_on:
      wp-site-1-db:
        condition: service_healthy
    healthcheck:
      # [...]
    networks:
      - wp-site-1
      - caddy
  wp-site-1-db:
    image: # [...] Wordpress DB Image
    container_name: wp-site-1-db
    restart: unless-stopped
    environment:
      # [...]
    volumes:
      # [...]
    healthcheck:
      # [...]
    networks:
      - wp-site-1

  # wordpress-site-2
  wp-site-2:
    image: # [...] Wordpress Image
    container_name: wp-site-2
    restart: unless-stopped
    environment:
      # [...]
    depends_on:
      wp-site-2-db:
        condition: service_healthy
    healthcheck:
      # [...]
    networks:
      - wp-site-2
      - caddy
  wp-site-2-db:
    image: # [...] Wordpress DB Image
    container_name: wp-site-2-db
    restart: unless-stopped
    environment:
      # [...]
    volumes:
      # [...]
    healthcheck:
      # [...]
    networks:
      - wp-site-2

networks:
  caddy:
    driver: bridge
  wp-site-1:
    driver: bridge
  wp-site-2:
    driver: bridge

Die Caddyfile kann dann wie folgt aussehen:

Code:
{
    email [...] # Für Emails bzgl. Zertifikatsabläufe, Probleme, ...
}

site1.de {
    reverse_proxy wp-site-1:80
}

site2.de {
    reverse_proxy wp-site-2:80
}

Habe was relativ ähnliches am laufen, daher direkt mit Code Beispielen ;)

Hoffe das hilft!
 
  • Gefällt mir
Reaktionen: MitchMi
Eigentlich willst du VHosts auf Deinem Webserver. Dafür braucht man nur 1 Installation und schon gar kein Docker.
 
@Pummeluff Er hat aber keinen nativen Webserver und Docker bereits im Einsatz.

Ich persönlich packe sogar möglichst alles in Container, einfach weil der Betrieb dadurch viel einfacher wird. Verstehe deswegen nicht wieso man hierfür kein Docker verwenden sollte.
 
  • Gefällt mir
Reaktionen: JumpingCat
Ich verwende grundsätzlich keine Docker, einfach weil der Betrieb dadurch viel komplexer wird.
Verstehe deswegen nicht, wieso man hierfür Docker verwenden sollte.

marcel. schrieb:
Er hat aber keinen nativen Webserver
Code:
apt/yum/zypper/pacman install nginx
 
Pummeluff schrieb:
Ich verwende grundsätzlich keine Docker, einfach weil der Betrieb dadurch viel komplexer wird.
Wieso soll der Betrieb komplexer sein, wenn man Docker verwendet? Diese Erklärung würde ich gerne hören/lesen.
 
  • Gefällt mir
Reaktionen: JumpingCat
Pummeluff schrieb:
Ich verwende grundsätzlich keine Docker
Solltest du mal ausprobieren, die Welt dreht sich weiter ;) Nur weil man selbst keine Erfahrung mit etwas hat, ist es nicht direkt komplex.

Gerade hinsichtlich Disaster Recovery oder im privaten Bereich, wenn ein Raspi bzw dessen SD-Karte mal abraucht, ein großer Vorteil. Der TO hat hier auch bereits einige Punkte genannt, die für eine Lösung mit Containern spricht.

Der nackte nginx bringt den TO erstmal kein Stück weiter in seiner TLS Frage. Und mehrere WordPress Instanzen braucht er auch mit nginx wohl immer noch.
 
oicfar schrieb:
Wieso soll der Betrieb komplexer sein, wenn man Docker verwendet?
Siehe oben, die docker-compose-Konfiguration. Du musst bei Docker die Schnittstellen (Portmapping, Volumes, usw.) anpassen.

Die Vhost-Konfiguration ist bei den typischen Webservern (Apache, Nginx) auch nicht sonderlich komplex.

MitchMi schrieb:
Die Website hat dann (xxx.xxx.xxx.xxx:8080 (So in der Konfiguration der Site angegeben. Dementsprechend den Port im Router geöffnet.) Sagen wir, ich erstelle eine zweite Seite, bekommt diese Port 8081 zugewiesen und immer so weiter.
Bräuchte man bei der Lösung ohne Docker nicht. Da hört alles auf 80 und 443.

MitchMi schrieb:
Ich vermute mal, ich muss dem PI auch ein Zertifikat zuweisen? Oder doch jeder Seite einzeln? Oder muss ich noch etwas ganz anderes machen?
Bin noch nicht ganz im Klaren, an welcher Stelle es jetzt hakt. Hat man eine Hauptdomain, muss man die Zertifikate für die Subdomains unterschreiben. Ansonsten kann man für jeden Vhost problemlos eine eigene IP mit eigenem Zertifikat anlegen. Oder wenn man keine Unmenge an Seiten hat, erstellt man nur ein Zertifikat mit den entsprechenden SANs.

marcel. schrieb:
Solltest du mal ausprobieren, die Welt dreht sich weiter ;)
Hab damit schon vor einigen Jahren rumgespielt. Aber mir war's tatsächlich zu kompliziert. Ich konnte keinen Vorteil gegenüber der normalen Installation entdecken.

In meiner Arbeitsstelle geht's auch mehr und mehr in Richtung Docker. Wir sehen das teilweise kritisch. Docker-Container sind die perfekte Möglichkeit für die Softwarelieferanten, auf Updates zu verzichten. Wenn man Pech hat, findet man im Docker-Container irgendwelche uralten Libs/Anwendungen, die offen wie Scheunentore sind. Für Softwarelieferanten sind Docker eine perfekte Möglichkeit, ihre Applikation mit weniger Tests irgendwie zum Laufen zu kriegen. Das kann ziemlich dreckig sein.

Vorteile seh ich bei Docker vor allem in der Parallelisierung, dass man weitere Container bei Bedarf einfach hochziehen kann. Genauso im Clusterbetrieb. Ein Docker-Container startet halt schneller als eine VM. Und vor allem bei Softwaretests könnten verschiedene Distris getestet werden, ohne eine vollständige VM vorhalten zu müssen.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Marco01_809
Pummeluff schrieb:
Siehe oben, die docker-compose-Konfiguration. Du musst bei Docker die Schnittstellen (Portmapping, Volumes, usw.) anpassen.
Es kann sein, dass bei der einen oder anderen Anwendung man ein wenig Arbeit in die Anpassung von docker-compose investieren muss.

Aber pauschal zu behaupten, dass der Betrieb dadurch viel komplexer, ist schlicht unwahr. Der größte Vorteil von Docker ist für mich, dass ich sehr schnell eine Anwendung ausprobieren kann, ohne dass ich im Anschluss Zeit (das kann schon vom Tool zu Tool variieren) reinstecken muss, wenn ich es wieder komplett deinstallieren will.

Ich nutze Docker. Aber nicht für alles. Und ohne, will ich auch nicht mehr.
 
oicfar schrieb:
Der größte Vorteil von Docker ist für mich, dass ich sehr schnell eine Anwendung ausprobieren kann, ohne dass ich im Anschluss Zeit (das kann schon vom Tool zu Tool variieren) reinstecken muss, wenn ich es wieder komplett deinstallieren will.
Das seh ich genauso. Hab ich oben auch so ähnlich geschrieben.

Docker zu nutzen, weil man einen Webserver nicht konfigurieren will oder kann, halte ich hingegen nicht für optimal.
 
  • Gefällt mir
Reaktionen: oicfar
Erstmal danke für die zahlreichen Antworten :)

Ich nutze Docker eigentlich nur, weil ich dachte, man könnte es quasi so machen:
Raspi mit RaspiOS ist der "Server". Darauf installiere ich Docker mit Portainer. Und da drin erstelle ich "einfach" mehrere Container mit jeweils einer WP Installation. Diese passe ich dann an, gebe jeder Installation einen Port und mache dann von den Sub-Domains aus eine Weiterleitung zu den jeweiligen Sites (Wie gesagt, ich weiß dass das nicht die schönste Lösung ist, hat für mich soweit aber erstmal geklappt ^^ ).

Ich war mir da jetzt nur nicht sicher wegen SSL Zertifikaten. Ob ich da auf jeden Container ein "Let´s Encrypt" Zertifikat einzeln installieren muss oder ob man das quasi einmal für den ganzen "Server" installieren kann.

Hierbei würde dann jetzt Caddy ins Spiel kommen ^^

Ich arbeite mich langsam in die Materie ein. Ist ja noch kein Meister vom Himmel gefallen :P
 
Zuletzt bearbeitet:
Zurück
Oben