Webserver richtig (und sicher) aufsetzen

    • Offizieller Beitrag

    Wie es funktionieren soll: Skript-A.php (Webhosting-Server ohne Root-Rechte) sendet eine Anweisung an Skript-B.php (Home-Webserver). Skript-B.php führt die Anweisung aus und konvertiert eine Datei in eine andere und sendet diese in ein bestimmtes Verzeichnis auf dem Webhosting-Server. Perfekt.

    Sorry, aber ich kapiers trotzdem nicht! :conf:

    Wo ist der Unterschied zu meinen Gedanken in #35, außer dass das Skript-A.php nicht sendet, sondern Skript-B.php anfragt und abholt? Der Home-Webserver wäre deshalb obsolet, weil Skript-B.php auch per CLI (php-cli) laufen könnte.

    Ich wills nur verstehen. :daumendreh2:

  • rpi444

    Wie "sicher" wäre das denn?

    Ziemlich sicher. Denn für einen möglichen Zugriff müsste man ja, die richtige source-IP-Adresse kennen bzw. erraten.

    Aber Du kannst diese iptables-Regel ja zusätzlich optimieren/verfeinern, mit z. B. auch noch einem festen source-Port, evtl. auch zusätzlich zum syn-Flag auch noch das ecn-bit (für die NEW-Verbindung) und wenn Du willst, dann auch noch die Anzahl der Zugriffe limitieren/begrenzen.

    Wenn Du willst, dann könntest das ja mal testen (ohne dass auf dem TCP-Port 443 gelauscht wird). Du musst nur im Router eine Portfreigabe für den TCP-Port 443 machen.

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p6 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

  • Sorry, aber ich kapiers trotzdem nicht! :conf:

    Die PNG-Datei muss da sein, wenn das PHP-Skript zu ende gelaufen ist.

    Wenn ich das so mache, wie Du dir das vorstellst, kann (und wird) es passieren, dass das Skript fertig ist und die SVG-Datei erstellt wurde, aber noch lange keine PNG-Datei da ist weil...

    - Der Home-Webserver noch nicht bescheid weiss

    - Der Download länger dauert

    - Das konvertieren länger dauert

    - Der Upload länger dauert

    - Der Home-Webserver etwas überlastet ist weil z.B. viele Dateien konvertiert werden müssen

    - Der Home-Webserver überhaupt nicht erreichbar ist

    Damit würde ich meinen kostenlosen Service zunichte machen. Stell dir einfach mal vor Du ladest ein Profilbild von dir hoch und es wird erst viel später angezeigt, obwohl der Upload fertig ist und die Seite keinerlei "Reaktion" mehr zeigt. Mein Skript endet mit der ausgabe der PNG-Datei und das funktioniert eben nur, wenn auch eine PNG-Datei vorhanden ist.

    Wie ich vorhin beschrieben habe, würde ich dafür nicht einmal einen "Raspberry" brauchen, weil ich das auch mit meinem PC (Windows) kann und sogar fertig programmiert irgendwo rumfliegen habe. Aber es hat mir nicht gefallen, weil es eben nicht 100% zuverlässig ist.

    Ziemlich sicher. Denn für einen möglichen Zugriff müsste man ja, die richtige source-IP-Adresse kennen bzw. erraten.

    Aber Du kannst diese iptables-Regel ja zusätzlich optimieren/verfeinern, mit z. B. auch noch einem festen source-Port, evtl. auch zusätzlich zum syn-Flag auch noch das ecn-bit (für die NEW-Verbindung) und wenn Du willst, dann auch noch die Anzahl der Zugriffe limitieren/begrenzen.

    Wenn Du willst, dann könntest das ja mal testen (ohne dass auf dem TCP-Port 443 gelauscht wird). Du musst nur im Router eine Portfreigabe für den TCP-Port 443 machen.

    Wie kann ich testen, ob ich Port 443 überhaupt brauche?

    Meine Liste schaut aktuell folgendermaßen aus:

    Code
    iptables -A INPUT -p tcp -s XXX.XXX.XXX.XXX --dport 80  -j ACCEPT    # Meine lokale IP
    iptables -A INPUT -p tcp -s XXX.XXX.XXX.XXX --dport 80  -j ACCEPT    # IP des Webhosting Servers
    iptables -A INPUT -p tcp                    --dport 80  -j DROP
    iptables -A INPUT -p tcp -s XXX.XXX.XXX.XXX --dport 443 -j ACCEPT    # Meine lokale IP
    iptables -A INPUT -p tcp -s XXX.XXX.XXX.XXX --dport 443 -j ACCEPT    # IP des Webhosting Servers
    iptables -A INPUT -p tcp                    --dport 443 -j DROP

    Mein Webhosting-Anbieter hat mir eben mitgeteilt, dass sich die IP-Adresse nicht ändert. Das würde nur passieren, wenn ich auf einen anderen Server umziehen möchte (z.B. wegen einer anderen PHP-Version) oder wenn ich - warum auch immer - auf einen anderen Server muss. Das würde man mir aber wohl rechtzeitig mitteilen.

    Was hälst Du denn eigentlich von der Idee von hyle? Ich habe eben mein Workaround von damals gefunden (WinSCP + Bachtdateien + VBScriptdateien).

    Hier ein auschnitt aus einer Batchdatei:

    BTW: Mir ist eben wieder eingefallen, warum ich das PHP-Skript selbst damals direkt auf dem Home-Webserver gelassen habe. Statt die SVG-Datei zum Home-Webserver zu senden, zu konvertieren und wieder zurückzusenden, kann ich die SVG-Datei auch direkt auf dem Home-Webserver laufen lassen und nur 1x Datei senden.

    z. B. auch noch einem festen source-Port

    Wäre das in meinem Fall nicht Port 80 (vom Webhosting-Server zum Home-Webserver)?

    evtl. auch zusätzlich zum syn-Flag auch noch das ecn-bit (für die NEW-Verbindung) und wenn Du willst, dann auch noch die Anzahl der Zugriffe limitieren/begrenzen.

    Kannst Du mir das bitte zeigen?

    Anzahl der Zugriffe würde ich erst einmal ungerne limitieren. Wenn dann nur, wenn der Raspberry die Anfragen nicht stämmen kann.

  • Mein Webhosting-Anbieter hat mir eben mitgeteilt, dass sich die IP-Adresse nicht ändert

    Ist das eine exklusive und einmalige IP-Adresse, nur für Deinen Webserver?

  • @ThomasL

    Ich habe dort das große Paket mit maximal 30 Kunden pro Server. Es müsste ein dedizierter Server (nicht Cloud oder so) sein, wo halt Platz für bis zu 30 Kunden ist.

    In "meiner Theorie" (Gedankenspiel) könnten also mindestens 29 Personen einen Angriff vom Webhosting-Server (!) auf meinen Raspberry-PI starten. Die Anzahl würde sich erhöhen, wenn der Angreifer ein Mitarbeiter vom Support wäre.

    Gedankenspiel: Ich bin Anfänger, aber ist Apache2 nicht der "Träger" von PHP und MqSQL? Wenn ja, könnte ich doch Apache2 zusätzlich "härten", indem ich zusätzlich nach einem Login + Password frage, um überhaupt auf "Apache2-Ebene" zu kommen oder bin ich komplett auf dem Holzweg?

  • Dr Frankenstein

    Ich kenne alle Lösungen zum konvertieren.

    Das Problem ist:

    - Manche Lösungen laufen auf meinem Webhosting-Server nicht.

    - Manche Lösungen offenbaren den Sourcecode der SVG, was ich niemals zulassen würde (Tausende Stunden Arbeit)

    - Manche Lösungen sind Browser abhängig.

    - Die Funktionsfähigen Lösungen beherrschen nicht alle Funktionen und haben eine miese Qualität.

    Inkscape ist hier tatsächlich die Nummer 1. Es ist das schnellste (ich hab es gemessen) mit der besten Bildqualität und beherrscht alle Funktionen die ich brauche.

    Ob der Aufwand gerechtfertigt ist, kannst Du nicht beurteilen. ;)

  • Wenn ja, könnte ich doch Apache2 zusätzlich "härten",

    Das Problem ist meines Erachtens nicht nur die Art der Verbindung, also egal ob HTTP oder SSH, sondern mehr die Frage, welche Möglichkeiten bei auf maschineller Autorisierung basierenden Verbindungen bestehen, die lauschenden Services für Dinge ausserhalb der beabsichtigten Aufgabe zu missbrauchen.... und wie man das verhindern kann..... vor dem Hintergrund, dass die Autorisierung auf einem System vorgehalten wird, über das man keine physische Kontrolle hat. Und bezüglich der Maßnahmen zur Verhinderung fallen mir immer mehr Möglichkeiten ein, diese zu umgehen, als echt wirksame Maßnahmen vorzusehen.

    Was ich mir noch als "sicher" vorstellen könnte, wäre eine FTP-Verbindung zum Raspi. Das ist zwar nicht sicherer, als HTTP oder SSH, nur gibts halt da nix zu machen, weil der FTP-Server sowieso leer ist... und immer nur kurzzeitig die Kovertierungsfiles enthält. Das heisst, wenn hierbei die Autorisierung für den Zugang missbraucht wird, ist der Schaden gering, weil da eh nix zu holen ist. Aber ob das eine brauchbare Lösung ist... keine Ahnung....

  • Wie ich verstanden habe, ist Port 80 für HTTP vorgesehen und Port 443 für HTTPS richtig? Also kann ich mich ja auf Port 80 konzentrieren und alles andere blockieren. Dann würde ich ja noch zusätzlich nur eine IP-Adresse (des Webhosting-Servers) zulassen. Einen privilegierten User gibt es auf meinem Raspberry nicht mehr (außer root). SSH ist nur Lokal möglich und mit einem 4096-Bit-Key gesichert.

    Wie könnte da jemand einbrechen? Ich würde mir das gerne mal vorstellen.

    EDIT: Könnte ich den HTTP-Port auf meinem Home-Server ändern? Wenn ja: Könnte ich dann trotzdem mit meinem Webhosting-Server kommunizieren?

    Einmal editiert, zuletzt von Alice85 (14. Februar 2020 um 21:27)

  • Wie könnte da jemand einbrechen?

    Wenn es Dir gelingt, den Webserver zu härten, wird das schon sicher sein. Du wärest ja nicht der einzige, der einen sicheren Webserver betreibt.

    Da kann ich nicht zustimmen. Man kann auch in der Praxis etwas sehen und sich dann in dessen Theorie einarbeiten.

    Nur glaube ich halt nicht, dass man sich Sicherheit codeschnippselweise aus dem Web zusammenkopieren kann oder Sicherheit durch Try&Error herstellen kann. Das Problem liegt meiner Meinung nach nicht an den den Services gegebenen Möglichkeiten, die man 'beherrschen' muss, sondern ein System zu finden, was trotz Customizing-Mängel sicher ist... das ist das wirklich komplizierte.

  • Kann mir jemand verraten, wie ich die iptables speichern kann? Alle im Internet genannten "Speicherorte" existieren bei mir nicht einmal.

    BTW: Ich habe mich umentschieden. Ich werde das Skript komplett auf dem Home-Webserver laufen lassen. Der Webhosting-Server wird dann quasi nur "die Hülle" sein (Domain, HTML, CSS und Formular für die Eingabe der Daten).

  • iptables -A INPUT -p tcp -s XXX.XXX.XXX.XXX --dport 80 -j ACCEPT

    Das ist ein Terminalbefehl! 'iptables' ist nur das Frontend im Userspace, welches die Kerneltabellen füllt.

    iptables -L -nv listet vorhandene Regeln.

  • Kann mir jemand verraten, wie ich die iptables speichern kann?

    Das macht man mit netfilter-persistent und iptables-persistent.

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p6 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

  • Nur mal so als Hinweis.... iptables sind eigentlich obsolet.... die funktionieren zwar noch, aber die Kerneltabellen tanzen eigentlich schon auf ner anderen Fete. Wenn Du etwas über den Paketfilter lernen möchtest, kannst Du das hier nachlesen. Auch wie man das speichert, wenn man nicht iptables-save and restore verwenden will.

  • Nach gefühlt 1000 Jahren habe ich es hinbekommen.

    Für die Nachwelt (IPv4)

    Man kann (und sollte) die Regeln auch zum testen eingeben, ohne diese zu speichern. Macht man einen Fehler (z.B. sich selbst aussperren), muss man den Raspberry einfach nur neu zu starten (Console oder Stromstecker^^) und die Regeln sind weg.

    3 Mal editiert, zuletzt von Alice85 (15. Februar 2020 um 10:48) aus folgendem Grund: Kleiner Fehler

  • Für die Nachwelt (IPv4)

    Code
    SSH@root: install iptables-persistent             # 2x Nein auswählen

    Frage am Rande: Warum hast Du hier "install" benutzt und was bewirkt hier, das "2x Nein auswählen"?

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p6 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

  • Bei meinem Raspbian Buster Lite (aktuellste Version) war iptables-persistent nicht installiert. Erst mit der Installation funktionierte auch das speichern.

    Bei der Installation kommt ein blaues Fenster, wo man die iptables direkt speichern kann. Das Fenster wird einmal für IPv4 und einmal für IPv6 angezeigt.

    Edit:

    Code
    apt-get install iptables-persistent

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!