Webserver richtig (und sicher) aufsetzen

  • Ich habe Apache noch nicht installiert, aber ich denke mal, dass er mir die aktuellste Version installieren wird.


    Kannst Du mir bitte zeigen, wie es mit aktueller Syntax aussehen müsste?

  • Warum beginnst du nicht einfach mal damit die Doku zu lesen? Wenn dir das Thema "richtig und sicher" wichtig ist, kommst du ohnehin nicht drum herum.

    Irgendwelchen Code aus dem Internet oder fertige sniplets hier aus dem Forum bringen dich nicht weiter, wenn du nicht verstehst was die machen.


    Zu deinem Imagemagick-Problem: warum suchst du dir nicht einfach einen Webhoster, der ein passendes Paket anbietet? Das ist nun wirklich nicht exotisch und (imho) deutlich sinnvoller als dies Gefrickel mit einem ausgelagerten RPi.


    Aus dem alll-inkl.com Glossar

    Quote

    ImageMagick

    ImageMagick ist ein Softwarepaket zur Bildbearbeitung und kann bei ALL-INKL.COM unter PHP als CGI/FPM verwendet werden.

    Menschen die keine Ironie verstehen finde ich super!

    Edited 2 times, last by llutz ().

  • Da kann ich nicht zustimmen. Man kann auch in der Praxis etwas sehen und sich dann in dessen Theorie einarbeiten. Ich verstehe viel besser, wenn ich etwas sehe (wie es richtig gemacht wird) und es dann selber Stück für Stück analysiere. Mit einem Link zu einer Dokumentation kann ich nichts anfangen, wenn mir die komplette Basis fehlt. Das ist von dir sicherlich nur gut gemeint, hilft mir aber nicht weiter. Ich finde diese Vorgehensweise allgemein in sämtlichen Foren wo es um Programmierung usw. geht falsch, denn es gibt verschiedene Lerntypen.


    EDIT: Ich habe mir sämtliche Alternativen angeschaut, aber die Scheiden leider alle aus. Webhoster mit Inkscape habe ich keinen gefunden. ImageMagick beherrscht einiges was ich brauche nicht und auch die Qualität lässt zu wünschen übrig. Auch wichtig zu erwähnen wäre, dass ich mich bestens mit Inkscape auskenne. Ich wollte auch die Gelgenheit nutzen und etwas "Linux und Webserver" für zukünftige Projekte lernen. Man muss ja mit etwas anfangen, wenn man Lust auf so etwas hat.

    Edited once, last by Alice85 ().

  • Ich verstehe viel besser, wenn ich etwas sehe (wie es richtig gemacht wird) und es dann selber Stück für Stück analysiere.

    Und das "wie es richtig gemacht wird" bewertest du wie genau, wenn dir die notwendige Kenntnis fehlt?


    Und auch wenn du es nicht magst, die Anwort zu deiner Frage aus #21 steht unter https://httpd.apache.org/docs/2.4/howto/access.html

    Menschen die keine Ironie verstehen finde ich super!

    Edited 2 times, last by llutz ().

  • Inwiefern soll mir die Startseite der verlinkten Dokumentation im Zusammenhang mit deiner Frage behilflich sein?


    Wenn ich mich weiter mit dem Thema beschäftige, wird die Dokumentation sicherlich noch sehr wichtig für mich werden, aber nicht um in das Thema einzusteigen. Das war schon mit PHP ein Fehler. Letztendlich habe einfach mit einem fertigen PHP-Skript angefangen, die Begriffe gegoogelt ("was bedeutet $var?") und so Stück für Stück gelernt. Heute komme ich mit der PHP-Dokumentation bestens zurecht.


    Quote

    Und auch wenn du es nicht magst

    Das hat nichts mit mögen zu tun, aber lassen wir das.

    Edited once, last by Alice85 ().

  • Wo ist jetzt das Problem?

    Du hast die Doku und dort Stichworte, die du zum tieferen Verständnis googlen kannst.

    Menschen die keine Ironie verstehen finde ich super!

  • Kein Problem, aber ich kann auf solche Verweise verzichten, da für mich nicht Zielführend. Das ich durchaus selber in der Lage bin, mir selbst zu helfen, sollte aus einigen meiner Beiträgen ersichtlich sein.

  • Kann ich Apache2 nicht so einrichten, dass er nur mit dem Webhoster-Server kommunizieren darf?

    Du könntest mit iptables (oder gleichwertig) den Zugang zum lauschenden Port des apache2 so gestalten, dass _nur der_ Webhoster-Server z. B. eine NEW-Verbindung (mit dem syn-Flag) herstellen kann.

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

    Edited once, last by rpi444 ().

  • Das mit den iptables sieht vielversprechend aus!


    Wäre das so richtig?


    Code
    ----------------------------------------------------------------------------------
    iptables -A INPUT -i eth1 -p tcp --dport 22 -j ACCEPT           # Inbound SSH
    iptables -A INPUT -p tcp -s 172.217.16.195 --dport 80 -j ACCEPT # Inbound HTTP
    ----------------------------------------------------------------------------------
    iptables -A OUTPUT -o eth1 -j ACCEPT                            # Outbound via LAN
    ----------------------------------------------------------------------------------
    iptables -A FORWARD -p tcp --dport 22 -j ACCEPT                 # SSH Port
    iptables -A FORWARD -p tcp --dport 80 -j ACCEPT                 # HTTP Port
    ----------------------------------------------------------------------------------
  • Ich nehme mal an, dass 172.217.16.195 die IP deines Webhosters ist...
    Das wird manchmal gehen. Spätestens, wenn sich die IP ändert, wird das nicht mehr funktionieren.

    Hier solltest du mit dem FQDN arbeiten....


    Grüsse

    Peter

  • Wäre das so richtig?

    Hmm, ich denke nicht, dass das richtig ist. Wenn die default policy dieser chains ACCEPT ist, dann brauchst Du diese iptables-Regeln mit dem target ACCEPT, so nicht.


    Ich habe das bei mir so gelöst:

    Z. B. ein lauschender (destination-)Port auf meinem PI, der nur mit einem bestimmten source-Port aus dem Internet erreicht werden kann/soll:

    Code
    sudo iptables -t raw -I PREROUTING 1 -i <input-Interface> -p tcp ! --sport <source-Port> --dport <dest.-Port> -m conntrack --ctstate INVALID,NEW -j DROP

    auf dem Gerät im Internet, das auf den Port <dest.-Port> des PI zugreift, die iptables-Regel:

    Code
    sudo iptables -t nat -I POSTROUTING 1 -o <output-Interface> -p tcp --dport <dest.-Port> -m conntrack --ctstate NEW -j SNAT --to-source <interne-IP-Adresse>:<source-Port>

    Vorsicht, dass Du dich mit iptables nicht aussperrst.

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

  • Ich wollte eigentlich alle Regeln löschen und dann nur das erlauben, was ich wirklich brauche. ALso nach dem "Whitslist Prinzip" vorgehen.


    1.) Port 22 SSH über LAN erlauben

    2.) Port 80 HTTP für die Kommunikation zwischen Server und der FQDN vom externen Server erlauben


  • Ich wollte eigentlich alle Regeln löschen und dann nur das erlauben, was ich wirklich brauche. ALso nach dem "Whitslist Prinzip" vorgehen.


    1.) Port 22 SSH über LAN erlauben

    2.) Port 80 HTTP für die Kommunikation zwischen Server und der FQDN vom externen Server erlauben

    Nein, das ist nicht gut, denn Du brauchst ja z. B. auch DNS (UDP +TCP) oder Zugang zu Zeitserver, etc., usw.

    Die default Policy der OUTPUT chain sollte m. E. immer auf ACCEPT bleiben.

    Wenn Du sicher bist, dass Du ssh (hier Port 22) nur im LAN brauchst, dann könntest den sshd auch so konfigurieren, dass dieser nur auf einer internen IP-Adresse lauscht bzw. keine Portweiterleitung im Router konfiguriert wird.

    Wie willst Du FQDN mit iptables konfigurieren? So etwas kann ich nicht empfehlen.


    EDIT:


    Für sshd hast Du noch weitere Möglichkeiten, wie z. B.:

    Code
    from="pattern-list"

    in der ".ssh/authorized_keys"-Datei oder weil gegen die libwrap gelinkt, mit z. B. der hosts.allow-Datei.

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

    Edited once, last by rpi444 ().

  • Wirklich?


    Ich würde gerne Apache2, PHP und MySQL installieren und wirklich nur den Webhoster als "Kommunikationspartner" zulassen, die dann via PHP kommunizieren. Was braucht es dafür genau? Alles andere möchte ich verbieten.


    Für Updates (Raspbian und Programme) lasse ich mir noch etwas einfallen wie z.B. das kurzzeitige deaktivieren der Blockade.


    Das mit dem SSH ist auch so konfiguiert. Ich habe den Port (22) nicht im Router freigegeben.


    Code
    SSH@root: nano /etc/ssh/sshd_config
    
    # Custom-SSH-Settings
    Port 22
    AllowUsers alice
    Protocol 2
    PermitEmptyPasswords no
    PasswordAuthentication no
    PermitRootLogin no
    MaxStartups 3:30:10
    • Official Post

    die dann via PHP kommunizieren

    Nur mal laut gedacht und ob es umsetzbar ist weiß ich auch nicht.


    Lokales RPi PHP-Skript = LS

    Webserver PHP-Skript = WS


    - LS fragt jede Minute (z.B. per Cronjob) bei WS an, ob es was zu tun gibt.

    - Falls nicht, antwortet WS mit "Nö".

    - Falls doch sagt WS zu LS "Lade Dir Datei xyz herunter, bearbeite das Zeusch und POSTe mir das Ergebnis wieder, gerne mit Prüfsumme!".

    - Gesagt, getan. LS läd herunter, bearbeitet und liefert an WS (oder ein zweite Skript WS2)

    - WS(2) nimmt das Päckchen und checkt die Prüfsumme und das Übliche...ob Code enthalten usw..


    Damit müsste WS die IP oder den Host von LS nicht kennen oder wo ist mein Denkfehler? :conf:


    //Nachtrag: Einen Webserver auf dem RPi brauchts damit imho auch nicht.

  • hyle


    Ich habe so etwas ähnliches bereits umgesetzt, aber es hat mir nicht gefallen.


    Ich habe für ein bestimmtes Verzeichnis (Webhosting-Server) ein Netzlaufwerk erstellt mit 2 weiteren Unterverzeichnissen, der dann auf meinem Computer wie ein Laufwerk aussahen. Dann habe ich mit einem Programm (war das WinSCP?) jede Sekunde prüfen lassen, ob neue Dateien im 1. Verzeichnis vorhanden sind. Wenn ja, wurden diese Datei/en vom SVG-Format ins PNG-Format konvertiert und ins 2. Verzeichnis verschoben. Nebenbei liefen nur 2 oder 3 Batch-Dateien die alte Dateien gelöscht haben usw. Das hat tatsächlich auch funktioniert aber....... Ich brauche die fertige Datei auf meinem Webhosting-Server, bevor das Skript zu ende gelaufen ist und da ist so nicht gut machbar. Als provisorische Lösung habe ich das Skript abfragen lassen, ob die PNG-Datei "da" ist und wenn nicht ein Delay-Loop hinzugefügt und das hat teilweise (für heutige Zeiten) zu lange gedauert.


    Danach habe ich es so gemacht wie ich es jetzt auch vorhabe (nur ohne Sicherheit) und da hat man nicht einmal im Ansatz etwas vom kleinen "Raspberry" in meinem Büro mitbekommen. Im Gegensatz zu jetzt, lief 99% des Sourcecodes sogar auf dem Raspberry. Auf dem Webhosting-Server war eigentlich nur der "HTML/CSS Anteil". Das Skript selbst war auf dem Raspberry. Das lief wunderbar.


    Es spricht doch nichts gegen einen Webserver der nur mit der einen IP kommunizieren kann? SSH ist so oder so nur Lokal (abgesichert) möglich. Mir gefällt da so (wenn ich das hinbekomme).

  • Es spricht doch nichts gegen einen Webserver der nur mit der einen IP kommunizieren kann? SSH ist so oder so nur Lokal (abgesichert) möglich.

    Zu 1, ich glaube nicht, dass das möglich ist. Zu 2, solange man seine CA vor Fremdzugriff sichern kann, ist SSH durchaus gut abgesichert. Sobald Du allerdings einen Standardport bedienst, und für Webserver ist das ja nun mal 80 und 443, geht die Post ab. Ich habe keinen Webserver im Einsatz, aber für einen anderen Zweck Port 443 zum WWW geöffnet und auf einen Server weitergeleitet.... und so (siehe spoiler) sieht es mit täglichen Besuchern auf diesem Port aus... manche nur mal kurz, irrläufer, andere durchaus sehr hartnäckig mit dem Begehr des Einslasses. Der erste Teil ist persistent geblacklistet, der zweite Teil dynamisch als unerwünschter Besucher enttarnt und temporär gesperrt. Und das ist jetzt hier der Auszug eines wirklich entspannten Tages, eines völlig unwichtigen privaten und unbekannten Systems.


    Sobald Du einen Standard-Port öffnest und einen Dienst installiert, der auf diesem Port mit einem Standard-Protokoll lauscht, wirst Du auch solche Besucher haben. Die Beschränkung nur auf Deinen Webserver irgendwo im Web halte ich für ein aussichtsloses Unterfangen.


  • Ich habe mittlerweile folgendes getan (zum testen).


    PHP (Webhosting-Server)


    Port 22 ist im Router für den Raspberry freigeschaltet.


    Code
    iptables -A INPUT -p tcp -s XXX.XXX.XXX.XXX --dport 22 -j ACCEPT # Meine lokale Netzwerk-IP
    iptables -A INPUT -p tcp --dport 22 -j DROP
    iptables -A FORWARD -p tcp --dport 22 -j ACCEPT

    Das Skript meldet "Ping 0".


    Code
    iptables -A INPUT -p tcp -s XXX.XXX.XXX.XXX --dport 22 -j ACCEPT # Meine lokale Netzwerk-IP
    iptables -A INPUT -p tcp -s XXX.XXX.XXX.XXX --dport 22 -j ACCEPT # Webhosting-Server IP
    iptables -A INPUT -p tcp --dport 22 -j DROP
    iptables -A FORWARD -p tcp --dport 22 -j ACCEPT

    Das Skript medet "Ping 1".


    Zusätzlich zu der Firewall könnte man doch Apache2 noch zusätzlich schützen (IP + Name + Passwort) oder?

  • Code
    iptables -A INPUT -p tcp -s XXX.XXX.XXX.XXX --dport 22 -j ACCEPT # Meine lokale Netzwerk-IP
    iptables -A INPUT -p tcp -s XXX.XXX.XXX.XXX --dport 22 -j ACCEPT # Webhosting-Server IP
    iptables -A INPUT -p tcp --dport 22 -j DROP
    iptables -A FORWARD -p tcp --dport 22 -j ACCEPT

    Das Skript medet "Ping 1".


    Zusätzlich zu der Firewall könnte man doch Apache2 noch zusätzlich schützen (IP + Name + Passwort) oder?

    Wenn sich die source-IP-Adresse mit der Du auf den apache2 zugreifst nicht ändert, dann kannst Du das machen.

    BTW: Warum brauchst Du diese iptables-Regel in der FORWARD chain? Es wird doch kein Traffic über deinen PI weitergeleitet, oder?


    EDIT:


    Wie ist die default policy der INPUT bzw. der FORWARD chain?

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

  • rpi444


    Wie "sicher" wäre das denn? Wenn ich "Thomas" richtig verstehe überhaupt nicht!? =O


    Ob die IP-Adresse sich ändert, werde ich gleich erfahren. Ich habe den Support angeschrieben und gefragt. Aber selbst wenn es so wäre, könnte ich es "lösen". Ich könnte mir täglich (CronJob) die IP-Adresse zuschicken lassen und wenn sich etwas ändert einfach manuell bearbeiten. Vielleicht sogar automatisiert.