Cette config est un gros hack pas propre du tout et pas confirme au
standard HTTP. C'est bien dommage que ce ne soit pas bien documenté dans le
serveur de tuiles mais de toute façon la façon dont c'est fait est bogué et
cette option devrait être supprimée. C'est la mauvaise façon de faire un
"throttling" que de casser la compatibilité HTTP (surtout ici en s'appuyant
sur un entête purement informatif et en concluant qu'on peut modifier
unilatéralement le routage en ignorant le cycle de vie d'une session et en
supposant qu'il n'y a pas d'autres proxies dans la chaîne de transmission
et le séquencement des autres sessions en parallèle, y compris celles du
même client).

En tout cas si vous supprimez cette option foiruese cela rédoudra aussi des
cas fréquents qu'on constate même depuis un client avec un accès direct à
Internet qui n'un coup de reçoit plus rien du tout pendant plusoeurs
minutes pour les tuiles qu'il demande, comme si le serveur était surchargé.

Cette option est beaucoup trop agressive (à la limite elle peut servir
uniquement sur un LAN dont on connait la topologie, mais pas du tout sur
des connexions issues d'adresses IP sur Internet dont on ne sait
pratiquement rien des méthodes d'accès.

En effet les proxies peuvent même être imposés par l'opérateur internet du
client, par exemple pour les utilisateurs de réseaux mobiles qui ne
fournissent pas d'adresse IP publique à leurs clients utilisateurs de
smartphones sur leurs réseau d'accès; et qui limitent aussi les protocoles
utilisables et limitent fortement aussi les durées de session sans "trafic
visible" [les sessions ne tiennent souvent seulement pas plus de 10 à 15
secondes maxi sur les réseaux mobiles 3G — comme SFR qui est en France le
plus agressif — sur un tel accès, les sessions HTTP longues
DOIVENT utiliser les statuts HTTP 1xx de continuation pour les requêtes
longues sinon elles échouent en cours de traitement par le serveur
consulté, si le serveur ne peut pas répondre immédiatement dans les 5
secondes, et le serveur doit lui-même émettre ces statuts dans un délai
raisonnable, faute de quoi il perdra son client ; SFR, quand il interrompt
une session sur ses proxy d'accès mobile, ne renvoie lui-même aucun statut
HTTP non plus à son client, alors même qu'il lui impose une connexion en
HTTP et le tunnelage HTTP des autres protocoles qu'il veut bien
transporter, et que très peu d'autres protocoles sont supportés ! Un tunnel
VPN sécurisé et crypté sera interrompu si dans le tunnel de transport il
n'y a pas émission régulière, hors-bande, de statuts de continuation
confirmant qu'il y a encore une activité attendue et que les requêtes
suivent leur cours normal même si elles sont plus lentes à répondre qu'une
page web statique, qui demande peu ou pas de calcul lourd sur un serveur].

Autre suggestion: si un serveur de tuiles ne peut retourner une tuile
complète car la file d'attente de rendu est pleine, il devrait retourner
rapidement une ancienne version précalculée de la tuiles depuis son cache
local, même s'il a enregistré la tuile comme devant être mise à jour par la
demande détectée. Je crois avoir lu que c'est fait sur certains serveurs
(pas tous). Cela a l'avantage de permettre de ne pas garder des sessions
trop nombreuses ouvertes (et d'éviter la saturation des ports TCP
disponibles et donc se prémunir aussi contre des attaques DoS faciles).

Si on veut limiter le traffic mod_tile ne peut rien utiliser d'autre que
l'adresse IP la plus directe et ne doit rien supposer de la topologie des
clients distants qui se connectent par cette adresse IP. Tout ce qu'on peut
faire c'est limiter le nombre de sessions parallèles et imposer une file
d'attente en ajoutant des délais de réponse: Si la lmite est dépassée, il
ne faut pas interrompre brutalement sans rien dire, il faut retourner un
statut 4xx permettant au client (ou proxy client) d'être informé et ensuite
pouvoir gérer ses sessions et leur cache des réponses obtenues, ainsi que
les délais avant de pouvoir retenter la requête (mais vu les délais donnés
dans les traces plus haut, 3 jours!!!, c'est difficilement gérable, le
client ou proxy client ne dispose d'aucun moyen de réguler son trafic avec
la "solution" actuelle).

Si le but c'est de se prémunir contre des attaques de type DDoS, ce n'est
pas sur modètile qu'il faut faire ça mais sur un parefeu frontal (qui peut
aussi utiliser d'autres systèmes pour inspecter les sessions, y compris
utilise ICMP ou d'autres inspections dans des couches basses d'IP ou
l'inspection des routes et des flags d'option d'IP, ou encore des
inspections de trafic via une analyse DNS., ou encore des options sur IPSEC
ou systèmes d'authentification sur un VPN si on l'utilise.

D'ailleurs les serveurs de tuiles ne devraient-ils pas être accessibles en
HTTPS (voire par un tunnel end-to-end)? Oui je sais, HTTPS a un coût en
performance car il va imposer un petit trafic initial supplémentaire (et un
ou deux roundtrips initiaux donc un délai ajouté d'environ 50 à 120ms,
selon qu'on reste en France ou qu'on change de pays ou traverse un océan,
avant de commencer à dialoguer) pour l'authentification mais je ne demande
pas non plus le cryptage, juste l'authentification des clients pour
identifier et séparer correctement les sessions.

Cela pourrait permettre à certains proxies identifiés de passer outre
certaines limites basiques d'utilisation (l'autorisation pouvant être
donnée si ces proxies utilisent des entêtes de traçage correct pour
permettre de tracer la topologie de leurs clients et gérer les différentes
sessions de leurs clients multiples dont ils assurent l'identification et
l'application d'une politique amont de limitation de trafic, de façon plus
détaillée que le trafic global sortant du proxy du réseau client).

Sur une session authentifiée, il est alors tout à fait possible d'utiliser
les infos X-Forwarded-For et Via transmises par un proxy bien identifié et
qui les utilise de faon cohérente et systématique.

Le 27 mai 2014 19:32, Jocelyn Jaubert <jocelyn.jaub...@gmail.com> a écrit :

> Le 27/05/2014 10:07, Landry MINOZA a écrit :
> > Je viens d’effectuer des tests supplémentaires avec curl, j’ai testé
> toutes les
> > entêtes passées par firefox et squid, toutes les combinaisons testés
> renvoient
> > bien la tuile demandée sauf lorsqu’il y a un entête "X-Forwarded-For".
> J’ai
> > essayé cet entête avec comme IP mon IP publique, 127.0.0.1 et l’IP
> publique du
> > serveur, la réponse est toujours vide.
> >
> > N’y aurait-il pas un reverse proxy apache et une vérification de
> provenance sur
> > l’application qui est derrière (auquel cas, apache devrait supprimer
> l’entête
> > X-Forw        arded-For avant d’ajouter la sienne).
>
> Merci pour le debug, ça a été bien utile. C'est normalement corrigé
> maintenant.
>
> La config du serveur de tuile (mod_tile) contenait cette config:
>
> ModTileEnableTileThrottlingXForward 1
>
> D'après ce que j'ai compris, ça sert à attribuer les tuiles à l'IP du
> X-Forwarded-for plutôt que l'IP du proxy, pour le méchanisme de limitation
> de tuiles par IP. J'ai modifié à 0, ce qui signifie que c'est l'IP du proxy
> qui est utilisé, ce qui me parait plus approprié.
>
>
> --
> Jocelyn
>
> _______________________________________________
> Talk-fr mailing list
> Talk-fr@openstreetmap.org
> https://lists.openstreetmap.org/listinfo/talk-fr
>
_______________________________________________
Talk-fr mailing list
Talk-fr@openstreetmap.org
https://lists.openstreetmap.org/listinfo/talk-fr

Répondre à