Aller au contenu

Fonctions de securite par domaine

Chaque fonction est un interrupteur, par domaine, dans la console Overwatch. Le catalogue vit dans overwatch/src/features.rs : une seule source pour les cases cochees, les valeurs par defaut et la configuration rendue.

La console parle anglais : les groupes s'y lisent Signature filtering, Reputation and behavior, Legitimate traffic to keep clear, Protocol et Cache. Les identifiants (waf_signatures, block_tor...) ne changent pas : ce sont eux que l'API, les tests et les manifestes manipulent, et les traduire aurait casse des references pour un gain nul.

block_cve_attackers porte applied: false : aucun flux n'alimente encore la liste, donc la fonction est enregistree et non appliquee. La console l'affiche grisee, avec la raison, plutot que de la laisser passer pour active.

Filtrage par signatures

Fonction Ce qu'elle fait au bord
waf_signatures Moteur de regles OWASP CRS sur la passerelle, mode blocage, paranoia 1
sensitive_files Refus des fichiers de fuite courants, avant le WAF : autorisation Istio pour HTTPS, politique Cilium pour HTTP en clair
path_traversal Refus des chemins qui remontent hors racine, encodes ou non
sqli_xss Signatures d'injection SQL et de script embarque
wordpress_scan Refus des sondes wp-login, xmlrpc et wp-admin

Reputation et comportement

Fonction Ce qu'elle fait au bord
challenge_pow Preuve de travail pour un client sans laissez-passer
block_cve_attackers Adresses deja vues dans des campagnes d'exploitation
block_tor Noeuds de sortie Tor, desactives par defaut
block_proxies Proxies et VPN publics, faux positifs a mesurer
rate_limit Compteur par adresse, difficulté de la preuve augmentee au-dela du seuil

Trafic legitime a ne pas entraver

Les listes sont dans policy/lists/allow/, relevees depuis les sources publiees par leurs editeurs, jamais recopiees a la main dans le code.

Fonction Liste Source
allow_payment_providers payment-providers.txt Stripe, PayPal, Adyen
allow_crawlers crawlers-search.txt Googlebot, Bingbot
allow_scm_webhooks scm-webhooks.txt api.github.com/meta

Regenerer une liste signifie rejouer le meme releve, pas editer le fichier.

Deux points a ne pas oublier

Les plages de robots ne prouvent rien. Google et Microsoft publient leurs plages, mais une plage d'hebergement se loue : un client qui se declare Googlebot depuis une adresse Amazon n'est pas Googlebot. La resolution inverse du nom d'hote reste la verification de reference [unverified].

Un CNI ne voit pas dans TLS. La politique Cilium filtre sur le chemin demande, donc uniquement sur du HTTP en clair : sur le port 443, le flux est chiffre jusqu'au pod. L'application des motifs passe donc par l'autorisation Istio, evaluee apres la terminaison TLS. La politique Cilium couvre le port 80 et le trafic interne.

Ce que le cache ne fait pas

Le cache HTTP est désormais une fonction pilotée, mais il ne filtre rien : il ne bloque pas, il ne note pas, il ne défie personne. Il est posé derrière le WAF et derrière le décideur, jamais devant, sinon il servirait une réponse que le bord venait de refuser.

Sa politique (durée de vie par préfixe, purge, mémoire) vit dans la ressource VarnishCache, pas dans la console : voir Cache. Le site, lui, décide seulement s'il passe par le cache.

Signature de la reponse

Par defaut, Istio laisse server: istio-envoy sur chaque reponse. C'est une information gratuite pour un attaquant, qui sait quelle pile chercher, et un aveu de bricolage pour un client. La reponse annonce desormais server: exoledge engine.

Deux endroits produisent cet en-tete, et il faut traiter les deux :

  • Le proxy, qui signe ses propres reponses : erreurs, 404, 503, rejets sur delai. Un EnvoyFilter remplace le server_name du gestionnaire de connexions HTTP (tofu/edge/server-name.tf, et ServerNameFilter cote operateur).
  • L'origine, qui peut poser le sien (nginx, Apache, un cadre applicatif). Un ResponseHeaderModifier sur chaque route du site ecrase la valeur (ServerHeaderFilter), sinon le nom du serveur amont reapparait.

Le filtre de route ne suffit pas pour les reponses du proxy : elles ne traversent aucune route. Le filtre du proxy ne suffit pas pour l'origine : elle ecrit apres. Les deux ensemble, oui.

Il reste x-envoy-upstream-service-time, qui trahit encore la pile. Le retirer demande un reglage supplementaire du gestionnaire de connexions ; c'est assume pour l'instant, la valeur servant au diagnostic.