Andreas Korthaus: sichere Administration

Hallo!

Ich überlege gerade, wie ich eine Software von außen über eine Weboberfläche administrieren kann.

Mein Problem ist SSL, denn mit SSL kann man keine virutellen Hosts(Apache) mehr verwenden.

Also habe ich mir gedacht, ich stelle einen SSH-Tunnel zum Server her, über den ich dann per localhost auf die Seiten zugreifen kann.

Das heißt ich installiere lokal einen SSH-Client wie putty, erstelle einne Tunnel für Port 80 auf localhost auf Port 80 auf dem remote host. Das klappt soweit auch ohne Probleme, nur wie kann ich jetzt sicherstellen, dass auf einen bestimmten virtuellen Host wirklich nur jemand von localhost aus drauf zugreifen kann?

Ich habe folgende Konfiguration:

Ich habe einen Hostnamen example.com, wenn dieser über port 80 aufgerufen wird, dann folgt eine Weiterleitung auf den SSL-Port.

Wenn irgendein anderer Host aufgerufen wurde, erfolgt eine Weiterleitung an einen anderen Server.

NameVirtualHost *

<VirtualHost *:80>
  ServerName example.org
  RewriteRule    ^(.*)$  http://example.net$1  [R=301]
</VirtualHost>

<VirtualHost *:80>
  ServerName example.com
  RewriteEngine  on
  RewriteRule    ^(.*)$  https://example.com$1  [R=301]
</VirtualHost>

<VirtualHost _default_:443>
  ServerName example.com
</VirtualHost>

Wie kann ich da jetzt noch localhost einbinden, denn wenn ich das so mache wie hier, dann könnte man ja einfach den Hostnamen "Localhost" im header mitschicken, oder?

Sicher könnte ich auch SSL an Stelle von SSH verwenden, aber da habe ich das Problem dass ich dann ein Unterverteichnis meines SSL-Virtual hosts nehmen muss, und ich würde die Administration gerne von der eigentlichen Software sauber trennen, da ich hierfür auch Module lade die für den Virtuellen Host eigentlich nicht verfügbar sein sollten.

Jemand ne Idee?

Grüße
Andreas

  1. Moin!

    Das heißt ich installiere lokal einen SSH-Client wie putty, erstelle einne Tunnel für Port 80 auf localhost auf Port 80 auf dem remote host. Das klappt soweit auch ohne Probleme, nur wie kann ich jetzt sicherstellen, dass auf einen bestimmten virtuellen Host wirklich nur jemand von localhost aus drauf zugreifen kann?

    Order Allow, Deny
    Allow from 127.0.0.1

    Und fertig.

    Sicher könnte ich auch SSL an Stelle von SSH verwenden, aber da habe ich das Problem dass ich dann ein Unterverteichnis meines SSL-Virtual hosts nehmen muss, und ich würde die Administration gerne von der eigentlichen Software sauber trennen, da ich hierfür auch Module lade die für den Virtuellen Host eigentlich nicht verfügbar sein sollten.

    Ähm - wenn du mehrere VirtualHosts administrieren willst, und du nur einen einzigen SSL-Server hast, dann gehe ich davon aus, dass du die eigentlichen Seiten nicht per SSL auslieferst - ansonsten wäre es je Domain ja kein Problem, ein Admin-Interface einzubinden, was z.B. auf "/admin" existiert.

    Was hindert dich daran, einen zentralen SSL-Server einzurichten, welcher die virtuellen Hosts per Unterverzeichnis anspricht? Dann kannst du per https://www.example.com/virtalhost1/admin.php auf dein Interface zugreifen. Auf die SSL-Startseite kommt man dann logischerweise auch nur mit Passwort, und von dort per Link eben zu allen virtuellen Hosts, die es gibt bzw. die administrierbar sein sollen.

    Alternativ ist dein Admin-Interface einfach universell einsetzbar für alle Hosts gleichzeitig.

    Der Tunnel mit SSH ist zwar auch eine Methode, aber im Zweifel nicht wirklich überall verfügbar.

    - Sven Rautenberg

    --
    "Beim Stuff für's Web gibts kein Material, was sonst das Zeugs ist, aus dem die Sachen sind."
    (fastix®, 13. Oktober 2003, 02:26 Uhr -> </archiv/2003/10/60137/#m338340>)
    1. Hi Sven!

      Order Allow, Deny
      Allow from 127.0.0.1

      Und fertig.

      Ja, das ist mit später auch noch eingefallen ;-)

      Aber auch

      NameVirtualHost *

      <VirtualHost 127.0.0.1:80>
       ServerName localhost
       DocumentRoot "/home/www/htdocs"
          <Location /*>
              Order Deny,Allow
              Deny from all
              Allow from 127.0.0.1
              AllowOverride None
          </Location>
          <Location /apache/status>
              SetHandler server-status
          </Location>
          <Location /apache/info>
              SetHandler server-info
          </Location>
      </VirtualHost>

      Wobei ich nicht weiß ob <Location /*> so richtig ist, aber mit <Location /> würde ich glaube ich nur Requests an / beeinflussen, oder?

      Ähm - wenn du mehrere VirtualHosts administrieren willst, und du nur einen einzigen SSL-Server hast, dann gehe ich davon aus, dass du die eigentlichen Seiten nicht per SSL auslieferst

      Doch genau das ist das Problem, die Software läuft nur über SSL, Port 80 habe ich nur auf um "Irrläufer" auf den SSL-Port oder woanders hin zu leiten.

      • ansonsten wäre es je Domain ja kein Problem, ein Admin-Interface einzubinden, was z.B. auf "/admin" existiert.

      klar, aber mit geht es um Administration des Servers selbst, also so Dinge wie Server-Status, Status des PHP-Cache, Logs, DB-Admin...

      Und ich will es eigentlich vermeiden dieses Admin-Interface mit der Software zu verbinden, die im übrigen schin ein eigenes Admin-Interface hat, eben auf Applikations-Ebene.

      Grüße
      Andreas

      1. Moin!

        Ähm - wenn du mehrere VirtualHosts administrieren willst, und du nur einen einzigen SSL-Server hast, dann gehe ich davon aus, dass du die eigentlichen Seiten nicht per SSL auslieferst

        Doch genau das ist das Problem, die Software läuft nur über SSL, Port 80 habe ich nur auf um "Irrläufer" auf den SSL-Port oder woanders hin zu leiten.

        • ansonsten wäre es je Domain ja kein Problem, ein Admin-Interface einzubinden, was z.B. auf "/admin" existiert.

        klar, aber mit geht es um Administration des Servers selbst, also so Dinge wie Server-Status, Status des PHP-Cache, Logs, DB-Admin...

        Dann mach auf einem zweiten Port noch einen SSL-Server auf. SSL braucht je Domain eine eigene IP/Port-Kombination. Für Administration ist ein Abweichen vom Standard-Port nicht das schlechteste.

        - Sven Rautenberg

        --
        "Beim Stuff für's Web gibts kein Material, was sonst das Zeugs ist, aus dem die Sachen sind."
        (fastix®, 13. Oktober 2003, 02:26 Uhr -> </archiv/2003/10/60137/#m338340>)
        1. Hi!

          Dann mach auf einem zweiten Port noch einen SSL-Server auf.

          Das wäre eine Idee. Oder noch besser eien eigen IP, aber die habe ich nicht. Muss mal fragen ob ich noch eine bekomme.

          SSL braucht je Domain eine eigene IP/Port-Kombination.

          Das wußte ich nicht. Werde es mal ausprobieren, danke für den Tipp!

          Für Administration ist ein Abweichen vom Standard-Port nicht das schlechteste.

          Ja, wieso? Ich denke wenn jemand was Böses vor hat wird er als erstes auf offene Ports scannen, und dann ist es sowieso kein Schutz mehr - vielleicht sogar im Gegenteil sind unbekannte Ports evtl. besonders interessant, aber keine Ahnung.

          Das was mir an meiner Variante nicht gefällt, ist dass es durch einen dummen Zufalll passieren kann dass jemand einen System-Account bekommt, also aufs System kommt, und wie man an den Debian... Servern gesehen hat(und das sind ja nun wirklich Fachleute ;-)) ist es bei entsprechenden Kenntnissen und vorhandenen Lücken(die es immer geben wird) nur noch ein kleiner Schritt zu root. Wenn man aber nur per HTTP Zugriff hat, ist das erstmal noch ganz was anderes.

          Die Absicherung schätze ich bei beiden Varianten(SSH/SSL) ähnlich hoch ein, aber bei SSH das Risiko erheblich höher.

          Viele Grüße
          Andreas