You are not logged in.

#1 2014-12-21 00:22:40

derstefan
Member
From: OpenTopoMap
Registered: 2010-03-28
Posts: 499
Website

renderd gegen Vandalismus absichern

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...

Offline

#2 2014-12-22 09:21:45

gormo
Member
Registered: 2013-08-01
Posts: 2,115
Website

Re: renderd gegen Vandalismus absichern

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.

Last edited by gormo (2014-12-22 09:22:38)


OSM hat nicht das Ziel bis Ende des Monats einen vollständigen Datensatz der Welt zu enthalten.
(nach S.W.) - Aber weil die Welt vielfältig ist, weil sie auch im Detail interessant ist, mag ich genaue Karten (nach C.)

Offline

#3 2014-12-22 10:48:52

woodpeck
Member
Registered: 2009-12-02
Posts: 1,042

Re: renderd gegen Vandalismus absichern

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

Offline

#4 2014-12-22 11:39:54

Netzwolf
Member
Registered: 2008-04-01
Posts: 1,665

Re: renderd gegen Vandalismus absichern

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

Offline

#5 2014-12-22 14:40:38

maxbe
Member
Registered: 2010-01-19
Posts: 3,203
Website

Re: renderd gegen Vandalismus absichern

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)

Last edited by maxbe (2014-12-22 14:42:13)

Offline

Board footer

Powered by FluxBB