x

renderd gegen Vandalismus absichern


  1. renderd gegen Vandalismus absichern · derstefan (Gast) · 21.12.2014 00:22 · [flux]

    Renderd stellt über mod_tile eine Schnittstelle über http(s) zur Verfügung, die den Server lahmlegen kann. Denn mit dem Aufruf /dirty wird eine Kachel in die Renderliste aufgenommen. Besonders Metatiles bei kleinen Zoomlevels können durchaus mal den gesamten Arbeitsspeicher benötigen. Fordert ein Nutzer gleichzeitig mehrere Kacheln mit dirty an, kann damit auch der Swap überlaufen und renderd verabschiedet sich. Deshalb lässt man kleine Zoomlevel normalerweise nicht über die "tile expiry" ablaufen und damit neu rendern, sondern erledigt dies z.B. nur wöchentlich und zeitlich verteilt.
    Bei der Weiterentwicklung eines Kartenstils ist "dirty" durchaus hilfreich, wenn man die Änderungen komfortabel über seinen Browser neu rendern möchte.

    Kennt jemand das Problem und eine Lösung? Vermutlich muss man im Quellcode von mod_tile das "dirty" auf einen nur dem Serverbetreiber bekannten String ändern.

    Ein ähnliches Problem beobachte ich beim Neustarten von renderd, nachdem man Änderungen am Kartenstil getätigt hat (service renderd stop; service renderd start): Manchmal läuft direkt danach der Speicher sehr voll, als ob wieder kleine Zoomlevel gerendert werden, obwohl diese ja nie "expiren" sollten...


    • Re: renderd gegen Vandalismus absichern · gormo (Gast) · 22.12.2014 09:21 · [flux]

      Ich hab keine Erfahrung mit renderd/mod_tile, sondern nur mit Apache generell. Mein Tipp wäre mit einer htaccess-Direktive den Zugriff auf /dirty nur auf bestimmte IP-Adressen zu beschränken.

      edit: Mh, könnte eventuell nicht klappen, weil /dirty ja keine Datei ist. Müsste man ausprobieren.


    • Re: renderd gegen Vandalismus absichern · woodpeck (Gast) · 22.12.2014 10:48 · [flux]

      derstefan wrote:

      Renderd stellt über mod_tile eine Schnittstelle über http(s) zur Verfügung, die den Server lahmlegen kann. ...
      Bei der Weiterentwicklung eines Kartenstils ist "dirty" durchaus hilfreich, wenn man die Änderungen komfortabel über seinen Browser neu rendern möchte. ... Kennt jemand das Problem und eine Lösung? Vermutlich muss man im Quellcode von mod_tile das "dirty" auf einen nur dem Serverbetreiber bekannten String ändern. ... (service renderd stop; service renderd start): Manchmal läuft direkt danach der Speicher sehr voll, als ob wieder kleine Zoomlevel gerendert werden, obwohl diese ja nie "expiren" sollten...

      Was Du meinst, ist nicht "Vandalismus", sondern ein "Denial-of-Service-Angriff". Dazu braucht es meistens nicht mal /dirty, es reicht schon das Abrufen sehr vieler Tiles auf hohen Zoomstufen in nicht vorgerenderten Gegenden.

      Änderungen am Source sind nicht nötig, stattdessen kannst Du über die Apache-Config die Zugriffe ganz verbieten

      ␣␣␣RewriteEngine␣on
      RewriteRule␣^/.*/status$␣/␣[F]
      RewriteRule␣^/.*/dirty$␣/␣[F]
      

      oder ggf. auch mit geeigneten <Location>-Einstellungen den Zugriff nur für bestimmte IP-Nummern oder authentifizierte User zulassen.

      Für das Ausprobieren eines neuen Stils empfiehlt sich statt des Hantierens mit /dirty eher so etwas wie http://svn.openstreetmap.org/applicatio … livetiles/ - das arbeitet komplett ohne vorgerenderte Tiles, und wenn Du willst, kannst Du das in einen passwortgeschützten Bereich Deines Webservers legen.

      Unerwünschte Render-Requests können auch mit einem fehlenden planet-import-complete zu tun haben (ggf. mal im Apache-Errorlog nachschauen, dort loggt mod_tile, wenn es neue Requests macht).

      Bye
      Frederik


    • Re: renderd gegen Vandalismus absichern · Netzwolf (Gast) · 22.12.2014 11:39 · [flux]

      Moins,

      derstefan wrote:

      Kennt jemand das Problem und eine Lösung? Vermutlich muss man im Quellcode von mod_tile das "dirty" auf einen nur dem Serverbetreiber bekannten String ändern.

      Möglicherweise hilft (minimalinvasiv) ein Bandbreitenlimitierungs-Modul (mod_bw oder ähnlich), mit dem man die Zahl der Aufrufe mit /dirty je IP-Adresse und Zeiteinheit beschränkt?

      Gruß Wolf


    • Re: renderd gegen Vandalismus absichern · maxbe (Gast) · 22.12.2014 14:40 · [flux]

      Ich halte auch die Apache-Config für eine passendere Stelle, den Zugriff zu beschränken. Falls es aber mod_tile sein soll, dürfte die Zeile 1374 in mod_tile.c das richtige Stück sein, um statt /dirty den Geheimcode /kartoffelsalat zu verwenden:

      if␣(!strcmp(option,␣"status"))␣r->handler␣=␣"tile_status";
      else␣if␣(!strcmp(option,␣"dirty"))␣r->handler␣=␣"tile_dirty";
      else␣return␣DECLINED;
      

      ersetzen durch

      if␣(!strcmp(option,␣"status"))␣r->handler␣=␣"tile_status";
      else␣if␣(!strcmp(option,␣"kartoffelsalat"))␣r->handler␣=␣"tile_dirty";
      else␣return␣DECLINED;
      

      Grüße, Max (der das aber nicht ausprobiert hat)