OBSD4* : wiki

Ou comment titrer :

HTTPd : Comment gérer les entêtes HTTP

HTTPd

Au menu des serveurs web, depuis la version 5.7, il existe un serveur web nativement intégré à OpenBSD, efficace, simple … voire trop simpliste … le bien-nommé 'httpd' … qui n'a rien à voir avec le démon d'Apache !

Le serveur web httpd est une partie du travail du développeur Reyk Floeker.

Le site web du projet : http://bsd.plumbing

Les manpages relatifs :


Limitations : Pour la faire courte, httpd n'est pas capable de vous proposer la gestion des entêtes http !

Mais alors comment faire ?

Relayd

Utiliser le moteur relayd comme proxy, qui lui en est capable … relayd est l'autre partie - partie initiale, voire principale - du travail de Reyk Floetter !

Comme le démontre l'auteur dans sa démonstration en Mars 2013, Relayd intercepte le flux TCP, sur les protocoles HTTP et HTTPS … il est capable de faire bien plus.

D'ailleurs l'auteur montre sur une des pages wiki du projet comment ajouter l'entête "Cache-Control"

Les manpages relatifs :

Gestion des entêtes

Il y a deux manières de les gérer, lors de la requête d'un client vers le serveur, ou lors de la réponse du serveur vers le client :

  • Lors de la requête : match request header append “X-Forwarded-For” value “$REMOTE_ADDR”
  • Lors de la réponse : match response header set “X-Xss-Protection” value “1; mode=block”

Exemples :

match response header set "Access-Control-Allow-Origin" value "domain.tld"
match response header set "Content-Security-Policy" value "default-src 'self' data: 'unsafe-inline'; base-uri *://domain.tld ; form-action 'self'; frame-ancestors 'none'; referrer no-referrer; reflected-xss block; sandbox allow-same-origin ; script-src 'self' cdnjs.cloudflare.com netdna.bootstrapcdn.com ;"
match response header set "Cache-Control" value "max-age=1814400"
match response header set "Server" value "OpenBSD HTTP"
match response header set "X-Content-Type-Options" value "nosniff"
match response header set "Frame-Options" value "SAMEORIGIN"
match response header set "X-Frame-Options" value "SAMEORIGIN"
match response header set "X-Powered-By" value "Vos propres minines, et une partie de votre cerveau électronique ..."
match response header set "X-Robots-Tag" value "index, nofollow"
match response header set "X-Xss-Protection" value "1; mode=block"
match response header set "x-ua-compatible" value "IE=edge,chrome=1"

Block Content-Type

On bloquera la réponse d'un contenu précis, tel que :

block response header "Content-Type" value {
  "application/x-msn-messenger"
  "application/x-icq"
  "AIM/HTTP"
}

Note : exemple tiré du pdf du développeur …

Block HTTPoxy

La faille HTTPoxy utilise l'entête HTTP non standardisée, non conforme, nommée PROXY. Pour en savoir plus sur cette faille : https://httpoxy.org

Pour la bloquer, il faut modifier votre filtre 'httpfilter', en ajoutant :

 match request header remove "Proxy"

Block User-Agent

On bloquera la requête : block request header “User-Agent” value “Mozilla*”

Note : exemple tiré du pdf du développeur. Je ne suis pas arrivé à la faire fonctionner … :(


Autres informations

Il semble pertinent de dire/d'écrire que le service relayd gère les entêtes http pour l'ensemble du flux qu'il traite et non pas par domaine - si vous avez besoin d'être restrictif à ce niveau, utilisez plutôt une solution telle qu'Apache, voire nginx …

De même, il semble que relayd ne soit pas capable d'exclure des méthodes de requêtes, ou autrement dit ne soit pas capable de dire explicitement qu'il n'accepte que les méthodes de requêtes de type GET, HEAD, pour l'exemple … Même topo que ci-dessus, utilisez une autre solution !

Ainsi les écritures, bien que reconnues comme valides, ne semblent pas fonctionner :

block request method POST
match request method HEAD

ATTENTION : la documentation du site calomel.org, à-propos de relayd, n'est plus à jour … elle utilise l'ancienne syntaxe ; pour s'en persuader lire le pdf de démonstration de relayd de mars 2013, proposé ci-dessus.