Hallo zusammen, Ich habe mir in den Kopf gesetzt, dass ich gerne eine Website auf einem raspberrypi bei mir Zuhause selbst hosten möchte.

Sie sollte aus dem Internet (auch von anderen Personen) erreichbar sein, und sowohl einige Daten des raspberrypi anzeigen, als es auch erlauben, bestimmte Aktionen (also shell Skripts) auszuführen (natürlich hinter einem login). Mir ist bewusst, dass ich eine Domain bei einem DNS Provider Mieten muss.

Sicherheitstechnisch klingt die Idee aber durchaus bedenklich. Lade ich auf kurz oder lang Angreifer ein, die sich darüber Zugang verschaffen wollen. Auch diverser Web Crawler und ähnlich bots, die vielleicht etwas aufdringlich sind und mein Heimnetz mit Anfragen überhäufen würde mir als Problem einfallen.

Wie problematisch könnte das ganze also werden, hat vielleicht jemand schon Erfahrungen, oder kann Empfehlungen geben, oder sollte ich das als Laie lieber komplett lassen bleiben?

Ich freue mich über Anregungen aller Art :)

  • HaraldvonBlauzahn@feddit.org
    link
    fedilink
    arrow-up
    1
    ·
    edit-2
    4 hours ago

    Ich habe einen Alternativvorschlag. Nämlich, die Sache zu vereinfachen, indem man statt einem HTTP Server das viel einfachere (und sicherere) Gemini-Protokoll benutzt. Was das ist erkläre ich gleich.

    Warum? Einen Webserver wie Apache oder Nginx aufzusetzen und zu pflegen ist relativ komplex. Das macht Arbeit, und da man den laufend updaten muss, ist das auch immer wieder Arbeit. (Es gibt auch einfachere Server wie diesen aber einfach ist da echt relativ…)

    Dazu muss man die Webseiten, wenn man einfache statische Webseiten verwendet, als HTML generieren. Dazu gibt es Blog-Generatoren, so etwas wird viel benutzt und ist sicher möglich. Aber es ist halt komplex.

    Ausserdem kosten extern gehostete Server Geld, und wenn man sie zu Hause hostet, kosten sie zumindest Strom. Für ein Gerät, das dauernd läuft, kommen da schon ein paar Euro zusammen.

    Eine erheblich einfachere Alternative ist wie folgt:

    • Statt HTTP benutzt man das Gemini-Protokoll, wie hier beschrieben. Hier ist die Homepage im Gemini-Netz. Wie man sieht, kann man Gemini-Seiten ganz einfach über einen HTTP-Gateway wie oben aufrufen. Oder eben mit einem extra Client wie z.B. deedum (Android) oder Amfora (Linux). Wenn man mal probieren will, wie sich das liest - die Gemini-Homepage der taz Berlin ist gemini://taz.de . Es ist im Vergleich zum modernen Web frugal, aber sehr lesefreundlich!

    Festhalten muss man, dass dieses Gemini nichts mit anderen Dingen der Internetkonzerne zu tun hat, die auch Gemini heißen, also weder mit Googles “KI” noch mit einem Chatbot. Es ist benannt nach dem Vorläufer des Apollo-Programms der NASA, und technisch gesehen ein Nachfolger von Gopher und eine Vereinfachung des auf HTML basierenden originalen World Wide Web.

    Konkret geht das wie folgt:

    • Man richtet einen Raspberry Pi mit Debian ein
    • Den hängt man z.B. an die Fritzbox. Die Stromversorgung geht dann über den USB Anschluss der FritzBox, das kostet nur so 1 Watt.
    • Damit der Server-Port von außen erreichbar ist, muss man beim ISP typischweise ine feste IPv4 IP schalten (kostet 5 Euro im Monat).
    • auf der Fritzbox / dem eigenen Interenetrouter richtet man eine Portweiterleitung ein.

    Soweit ist das jetzt nicht unterschiedlich von einem kleinem HTTP Server. Der entscheidende Punkt ist nun:

    • Statt einem HTTP Server richtet man einen robusten Server für das Gemini-Protokoll ein. Das ist ein stark vereinfachtes Hypertext-Protokoll, das statt HTML eine sehr einfache Syntax hat und auf simple Webseiten mit Text, Bildern und Medien optimiert ist.

    Hier ist die Wiki-Seite zum Gemini-Protokoll.

    Ein einfacher Webserver, der in Rust geschrieben ist, ist Agate. Hier ist die Github-Seite, und hier ist die Gemini-Homepage davon.

    Den Server kann man aus Rust auf dem Raspberry compilieren, wenn man Rust mit rustup installiert. Er ist nicht so komplex, daher ist es nicht nötig, den auf einem anderen Computer zu bauen.

    Da das Gemini-Protokoll nahezu keine bewegliche Teile hat und nur statische Seiten ausliefert, wird man da, wenn der Server auch noch in Rust geschrieben ist, nur selten Patches brauchen. Das wiederum spart einen Haufen Zeit. Zu konfigurieren gibt es auch nicht viel. Die gesparte Zeit kann man nutzen, um seine Seite zu schreiben. Gemini ist für alles Mögliche geeignet, als eine Art persönliches Wiki, als Microblog, als Blog mit Bildern und Medien, für vernetzten Hypertext oder Dokumentationen oder was auch immer. Dabei ist es sehr text-zentriert - es ist also ein Medium für Leute, die schreiben und lesen.

    Dann muss man noch seine eigenen Seiten statt mit HTML im Gemini-Format erstellen. Das ist super easy! Man benutzt ein Markup-Format ähnlich wie das Wikipedia-Markup oder Markdown (das was hier bei lemmy genutzt wird). Hier ist eine ebenso vollständige wie kurze Beschreibung des Formats.

    Erstellen und bearbeiten kann man die Webseiten mit einem Texteditor, wie z.B. Emacs oder vim. Die kann man dann per scp, Krusader oder WinSCP auf den Server kopieren oder mit einem Editor wie Emacs auch direkt auf dem Server bearbeiten.

      • HaraldvonBlauzahn@feddit.org
        link
        fedilink
        arrow-up
        1
        ·
        4 hours ago

        Und ach ja, wenn du eine öffentlich erreichbare IP (auch ungenau statische IP genannt) von deinen Internetprovider bekommst, musst du nur einen Namen für den Server bei einem DynDNS Provider registrieren und die aktuelle IP dort mit einem script / Systemdienst updaten. Die Fritzbox muss dann den Gemini-Port - und nur den - auf den Raspberry Pi forwarden.

        Für einen optionalen Login von aussen per SSH brauchst du sehr starke Passwörter, sonst würde dein Server schnell gehackt.

  • WhereAngelsFearToFly@feddit.org
    link
    fedilink
    Deutsch
    arrow-up
    11
    ·
    edit-2
    16 days ago

    Wenn du dir nicht 100%ig sicher bist, wie man einen Linux-Server und das Netzwerk absichert, würde ich dir davon abraten.

    Ich würde dann die Website extern hosten und mit dem RasPi die Daten regelmäßig hochladen lassen, und die Website kann sie dann verteilen. Kommt natürlich darauf an, was du genau vorhast. Die Sache mit den Shell-Skripts würde ich (vielleicht) ähnlich lösen. Der RasPi kann sich ja die Anweisungen von externen Website holen und dann ausführen. Vielleicht verbunden mit einer Art Queue-System. Aber auch hier würde ich keine freien Shell-Anweisungen erlauben, sondern nur das Triggern von vordefinierten Skripten, die auf dem RasPi liegen.

    Aber die ganze Welt zu dir ins Heimnetz zu lassen ist kein zu unterschätzender Task in puncto Sicherheit und Administrationsaufwand.

    • Petenkoffer@feddit.orgOP
      link
      fedilink
      arrow-up
      3
      ·
      16 days ago

      Danke dir (und natürlich allen anderen denen ich nicht einzeln antworte). Ich werde mich dann wohl an den Rat und mein Gefühl halten, dass das ganze doch etwas über meiner Gehaltsklasse gewesen wäre. Interessant ist, dass es aktuell mehr oder weniger bereits so aufgebaut ist (als discord bot, von dem ich mich trennen möchte), auf die Idee, das Prinzip beizubehalten bin ich aber nicht selbst gekommen.

  • kossa@feddit.org
    link
    fedilink
    Deutsch
    arrow-up
    10
    ·
    edit-2
    16 days ago

    Geil. Mach einfach. Probier rum! Lass dir nicht sagen, du musst 100% wissen, was du tust, das musst du nicht!

    Wo sollen denn sonst die Menschen herkommen, die an einem wieder dezentraleren Internet arbeiten, die sich auskennen? Irgendwelche Firmen hängen ihre Datenbanken frei ins Internet, das ist das Werk von “Profis”. Da ist es auch nicht schlimm, wenn von einem Haushalt das Heimnetzwerk übernommen wird, wenn dadurch jemand etwas lernt.

    Was dir bewusst sein muss, sind die Risiken: im Zweifel übernimmt jemand dein ganzes Netzwerk. Wenn du alleine bist: okay, dann musste halt alle Geräte plattmachen (alles ist potentiell kompromittiert). Ist Arbeit, danach bist du schlauer und kannst weiter rumprobieren. Wenn andere Menschen in deinem Haushalt an dem Netzwerk hängen: sag ihnen mindestens vorher, dass das bevorstehen könnte. Haben diese Menschen oder Du sensible Daten auf ihren Geräten? Backups! Offline! Und dann ran an den Speck, als ich das erste Mal eine Website von nem Computer zuhause aufrufen konnte, war ich mächtig stolz, geiles Gefühl. Seitdem habe ich over 9000 mal alles neu aufgesetzt, aber jetzt betreibe ich ein Homelab mit richtig vielen Diensten und alle Menschen, die es nutzen sind glücklich und zufrieden, ich habe richtig viel über Netzwerksicherheit etc. gelernt, alles supi.

    Edit: davon abgesehen: ein random Raspi, auf dem ein Webserver läuft…der hat jetzt auch echt nicht so viel Angriffsoberfläche. Für den Anfang stelle v.a. sicher, dass nur Ports 80 und 443 am Raspi erreichbar sind und dann ist das jetzt auch nicht crazy unsicher oder so ¯\_(ツ)_/¯

  • macniel@feddit.org
    link
    fedilink
    arrow-up
    6
    ·
    edit-2
    16 days ago

    Mhm eigentlich bräuchtest du keine Domain bei einem Registrar registrieren wenn dir eine IP reiche.

    Wenn du aber eine Internetadresse haben willst, brauchst ist ein dyndns service der auf einem router läuft der dann, sobald dein Netzwerk mit dem Internet verbunden ist, die IP in dem DNS Eintrag anpassen kann und dein Netzwerk hinter einer statischen Domäne erreichbar ist. (fritz!os unterstützt das von zu hause aus)

    Du müsstest dann dein Netzwerk absichern, sodass nur deine Beere erreichbar ist, das machste via Portforwarding. Also das ist erst mal rudimentär, mehr kenn ich mich da nicht aus.


    ich selbst habe auf meiner Firtz!Box ein Wireguard eingerichtet, sodass ich via VPN Tunnel von überall auf mein Heimnetzwerk, und damit auf mein Jellyfin Streaming Server, zugreifen kann :)

    • aaaaaaaaargh@feddit.org
      link
      fedilink
      arrow-up
      3
      ·
      16 days ago

      Kleine Ergänzung: mit IPV6 braucht es kein dynamisches DNS mehr, da die Adressen statisch sind. Allerdings ist der Dienst dann eben auch nur über V6 erreichbar.

  • Smash@lemmy.self-hosted.site
    link
    fedilink
    arrow-up
    3
    ·
    16 days ago

    Pack den RPI am besten in ein eigenes Netzwerk (DMZ). Die Sicherheit hängt dann maßgeblich von deinem Webfrontend ab, du solltest eine sichere Authentisierung nutzen (etwa mit MFA oder Zertifikat). Ansonsten noch das übliche, immer sofort die neusten updates installieren und hardening wie strike firewall Regeln, geo restriction und fail2ban nutzen.

  • AverageAlman@feddit.org
    link
    fedilink
    arrow-up
    2
    ·
    15 days ago

    Muss der denn bei dir Zuhause stehen? Du kannst dir bei diversen Anbietern einen Server für 5€ mieten.

    Klar bist du dann nicht so autark unterwegs, kannst dich aber schonmal mit allem vertraut machen ohne gleich ein Risiko für dein Netzwerk einzugehen. Und wenn du dann irgendwann doch keine Lust mehr auf die Cloud hast, kannst du deine Konfigurationen ja immer noch auf einen pi kopieren.

  • luzl@feddit.org
    link
    fedilink
    arrow-up
    2
    ·
    edit-2
    14 days ago

    Hey, wie andere schon geschrieben haben ist ein Raspi jetzt nichr allzu kritisch in Sachen Angriffsfläche. Würde mich auch dafür aussprechen das einfach auszuprobieren. Was ich aus eigener Erfahrung noch sagen will: viele Internetanschlüsse haben keine eigene ipv4 Adresse (bzw. Nur mit anderen Leuten geteilt). Also stell dich darauf ein, dass es vermutlich nur via ipv6 erreichbar ist. Nicht aus jedem Netz kann man v6 Adressen bereits erreichen, vorallem vieöe VPN Anbieter sind noch v4 only - solche User konmen also eventuell nicht auf deinen Raspi.

  • dwt@feddit.org
    link
    fedilink
    Deutsch
    arrow-up
    2
    ·
    16 days ago

    Du sagst, du möchtest mit Shell Scripten in deiner Webseite arbeiten. Das mag ein Sprachfehler sein, wäre so aber wirklich eine schlechte Idee und deutet noch mehr darauf hin das du dich nicht genug auskennst um abzuschätzen wann etwas unsicher ist.

    Grundsätzlich geht so etwas natürlich, DynDNS, LetsEncrypt und BasicAuth kann gut genug sein. Muss man aber auch erst mal einrichten.

    • Petenkoffer@feddit.orgOP
      link
      fedilink
      arrow-up
      2
      ·
      15 days ago

      Gemeint habe ich .sh Datein, mit der Terminologie kenne ich mich tatsächlich nicht aus. Selbstverständlich soll es nicht möglich sein eigene Befehle auszuführen, sondern lediglich vorgefertigte Skript zu aktivieren, die dann beispielsweise ein Programm auf dem raspberrypi starten.

      • dwt@feddit.org
        link
        fedilink
        Deutsch
        arrow-up
        1
        ·
        15 days ago

        Ich würde dir von Shell Skripten abraten. Der Mechanismus basiert auf datenübergabe durch umgebungsvariablen und ist einer der am schwersten sicher zu kriegenden.

        Lern lieber etwas Python und mach es mit flask, da findest du viel mehr gute Beispiele.

        • dwt@feddit.org
          link
          fedilink
          Deutsch
          arrow-up
          1
          ·
          15 days ago

          Insbesondere für solche ersten Experimente sollte der Server dann aber nichts sonst tun und vom Rest des Netzes isoliert sein, damit du dir nicht so die Finger verbrennst, wenn es mit Sicherheit schief geht.

          Alternativ: eine virtuelle Maschine bei hetzen kostet 1-2 € pro Monat ind da klemmt hetzner dir im Zweifel die Maschine ab wenn jemand anfängt da massiv Spam drüber zu versenden.

  • aaaaaaaaargh@feddit.org
    link
    fedilink
    arrow-up
    1
    ·
    16 days ago

    Ich würde das so machen, dass meine Seite irgendwo im Netz steht und der Raspi von dieser bei Bedarf Anfragen verarbeitet und Daten zurückgibt. So hast du zwei Fliegen mit einer Klappe geschlagen. Zum einen hast du Anwendungs- und Datenschicht schön voneinander getrennt, zum anderen schaffst du dir dadurch die Möglichkeit, Anfragen bei zu hohem oder schadhaftem Aufkommen zu filtern.

  • juergen@feddit.org
    link
    fedilink
    Deutsch
    arrow-up
    1
    ·
    14 days ago

    Ich würde sagen, es ist schon bisschen gefährlich:

    • gerade shell scripte sind nicht so easy wirklich sicher zu bauen, besonders für menschen die sich nicht sehr sehr gut damit auskennen. eine andere sprache wäre da sicherer.
    • wenn das nicht absolut trivial ist (gerade wenn es iwelceh input daten gibt), dann seh ich da schon angriffspotential.
    • ich vermute aber eher, dass es unwahrscheinlich ist dass ein hacker sich exakt deine maschine spezifisch anguckt, aber du wirst sehr wohl mit automatisierten angriffen zu tun haben.
    • ein prinzip der IT sicherheit ist defense in depth, d.h. quasi verschiedene schichten die trotzdem noch schützen wenn eine andere schicht kaputt ist. z.B. wenn du in deiner firewall irgendwo etwas falsch gemacht hast und alles von deinem gerät offen ist, dann kann eine ungepatchte sicherheitslücke da für ärger sorgen.
    • und wenn ein hacker sich da einmal eingenistet hat, dann könnte das teil von einem botnet werden und das ist auch nicht so gut. Oder deinen router angreifen, weil z.B. der “nach innen” zumindest das webinterface offen hat und insofern bisschen mehr angreifbar ist als von außen.
    • tendenziell würd ich aber sagen dass ein raspberry pi weniger kritisch ist als ein cloud server, der falsch eingerichtet ist. also weil wenn der gehackt werden würde, dann würden da leute vermutlich mit einem email server spam mails versenden, schätze ich. -> bekommst du ärger.

    würde mich ansonsten @kossa@feddit.org anschließen: wenn du sehr sehr gute backup-gewohnheiten hast (z.B. auf einer externen festplatte, die immer durchwechselt, wo du trotzdem noch eine kopie hast selbst wenn dein netzwerk mit cryptotrojanern voll ist) und generell bereit bist dich tiefer mit ordentlicher IT sicherheit zu beschäftigen, dann find ich das okay.

    Persönliches beispiel: ich hab mal vor langer zeit einen server bei openbsd.amsterdam gehabt. Ich war sehr kritisch und es lief nur SSH + eine webseite, login nur per ssh key, per firewall alles andere abgeschaltet. Den openbsd menschen vertrau ich in der hinsicht mehr als z.B. debian, dass die standard installation fürs internet geeignet ist und ich beim einrichten nichts übersehe. Ich hab mich aber auch viel mit deren sicherheitsprinzipien (pledge, unveil, und bspw privilege separation https://sha256.net/privsep.html beschäftigt. vieles davon macht debian nicht so gut.)

    Gruselig finde ich die vorstellung, wenn dein netz gehackt ist und du das nicht merkst und dann dein lokales DNS subtil umgestellt ist und der angreifer auch iwie z.B. zugang zu deinem email bekommt. Sich gegen gute Angreifer zu verteidigen ist schwer, deswegen ist es immer schlau die angriffsfläche zu reduzieren.