ICAP

Le protocole ICAP permet de modifier les requêtes HTTP provenant d’un utilisateur, et/ou les réponses fournies par les serveurs distants. ICAP est utilisé dans Olfeo dans les cas suivants :

Lors des échanges ICAP, chaque requête HTTP est encapsulée dans une requête ICAP (voir exemple dans la section Preview). Pour comprendre le fonctionnement d'ICAP, il faut garder à l'esprit la distinction entre requêtes/réponses HTTP et requêtes/réponses ICAP (une requête ICAP pouvant par exemple contenir une réponse HTTP).

Avertissement : Les flux sont fournis en clair au service ICAP : dans les architectures où l'analyse de contenu/l'analyse antivirus ne sont pas faites par le même Olfeo que celui qui héberge le proxy, faites en sorte que ces flux soient cloisonnés/sécurisés.

Fonctionnement client-serveur et requête OPTIONS

ICAP fonctionne sur un mode client-serveur.
  • Le moteur de filtrage contient le ou les serveurs : chaque connecteur de couplage est une instance du serveur ICAP, qui peut être paramétrée individuellement.
  • L'équipement tiers ou le proxy HTTP inclus dans l'Olfeo (Squid) sont clients. Le client ICAP du proxy HTTP peut être configuré via la section Options du client ICAP de la page Proxy Cache QoS > HTTP > Configuration.

La première fois que le client ICAP se connecte au serveur ICAP (c'est-à-dire au connecteur vers lequel il doit envoyer les requêtes), il lui envoie d'abord une requête OPTIONS afin de connaître ses paramètres, en précisant REQMOD ou RESPMOD.

Exemple de requête OPTIONS envoyée par le client au serveur, pour le RESPMOD

  OPTIONS icap://127.0.0.1:1343/respmod ICAP/1.0
  Host: 127.0.0.1:1343

Réponse du serveur

  ICAP/1.0 200 OK
  Date: Wed, 20 Apr 2016 10:50:34 GMT
  ISTag: "6.0.0"
  Cache-Control: max-age=0
  Methods: RESPMOD
  Transfer-Preview: *
  Preview: 4096
  Service: proto_icap/1.0
  Service-ID: RESPMOD-service
  Encapsulated: null-body=0
  Options-TTL: 216000
  X-Include: X-Client-IP, X-Authenticated-User, X-Server-IP
  Max-connections: 100
  Allow: 204

REQMOD et RESPMOD

ICAP peut utiliser 2 méthodes :

Preview

En RESPMOD, le preview permet d'obtenir les informations nécessaires pour évaluer les règles de l'onglet Aperçu du moteur de règles.

La requête ICAP n'envoie que le début des données, et indique au serveur qu'il ne s'agit que du début des données grâce à l'en-tête Preview. Il indique la taille de la portion de données transmise.
  • Le début du fichier inclut la signature du fichier, qui permet au moteur de déterminer le type MIME du fichier.
  • La réponse HTTP encapsulée dans la requête ICAP peut contenir un en-tête Content-Length, qui indique la taille totale du fichier.

Ces informations peuvent permettre au moteur de filtrage de prendre une décision (bloquer ou autoriser), sans attendre d'avoir reçu l'intégralité des données, ce qui permet d'améliorer les performances.

Exemple de requête ICAP RESPMOD, avec en-tête Preview (étape 6 sur les schémas)

  RESPMOD icap://127.0.0.1:1343/respmod ICAP/1.0
  Host: 127.0.0.1:1343
  Date: Wed, 20 Apr 2016 10:50:34 GMT
  Encapsulated: req-hdr=0, res-hdr=165, res-body=487
  Preview: 4096
  X-Client-IP: 127.0.0.1
  
  GET http://support.olfeo.com/sites/olfeo/files/guide_utilisateur_olfeo_v596.pdf HTTP/1.1
  User-Agent: Wget/1.16 (linux-gnu)
  Accept: */*
  Host: support.olfeo.com
  
  HTTP/1.1 200 OK
  Date: Wed, 20 Apr 2016 10:51:25 GMT
  Server: Apache/2.2.16 (Debian)
  Last-Modified: Thu, 29 Jan 2015 17:21:24 GMT
  ETag: "33c07fe-37454f-50dcdb7a42d00"
  Accept-Ranges: bytes
  Content-Length: 3622223
  Cache-Control: max-age=1209600
  Expires: Wed, 04 May 2016 10:51:25 GMT
  Content-Type: application/pdf
  
  f59
  %PDF-1.4
  %....
  4 0 obj
  <<
  /Title (Solution Olfeo)
  /Author (Olfeo)
  /Creator (DITA Open Toolkit)
  /Producer (Apache FOP Version 1.1)
  /CreationDate (D:20130725094806+02'00')
  >>
  endobj
  5 0 obj
  <<
  /N 3
  /Length 11 0 R
  /Filter /FlateDecode
  >>
  stream
  x...wTS.....7.P.....khR.H 
  .H..*1..J..."6DTpDQ...2(...C.."...Q....D.qp...Id....y......~k....g.}.... 
  ....LX....X.......g`......l..p..B..F...|..l....... 
  ..*.?.......Y"1.P......\...8=W.%.O...4M.0J."Y.2V.s.,[|..e.9.2.<..s..e... 
  '..9....`......2.&c.tI.@.o...|N6.(....sSdl-c.(2.-.y..H._../X........Z..$ 
  ...&\S........M....0.7.#.1...Y..r.f..Y.ym..";.8980m-m.(..]....v.^....D.. 
  ..W~. 
  ...e....mi..]..P....`/....u.}q..|^R..,g+...\K..k)/......C_|.R....ax..8.t
  (contenu abrégé)
  
  • 1è partie : en-têtes de la requête ICAP
  • 2è partie : requête HTTP originale
  • 3è partie : en-têtes HTTP de la réponse du serveur distant
  • 4è partie : début du fichier (les 4096 octets annoncés)

La taille de l'aperçu attendu par le serveur est définie dans les options du connecteur ICAP (paramètre Taille limite de Preview).

Réponse 204

Dans certains cas, le serveur ne souhaite pas modifier la requête ou la réponse HTTP : par exemple, en REQMOD, parce que l'URL est autorisée, ou en RESPMOD, parce que le fichier n'est pas bloqué par une règle portant sur sa taille ou son type MIME, ou par l'antivirus. Le serveur peut alors renvoyer au client une réponse 204 No Modifications needed, qui ne contient aucune donnée. Le résultat est le même que s'il avait renvoyé au client la requête ou la réponse HTTP à l'identique :

La réponse 204 permet d'éviter de renvoyer les données et donc d'améliorer les performances.

Le client doit avoir déclaré accepter les réponses 204 en incluant un en-tête Allow: 204 dans sa requête.

Réponse ICAP RESPMOD avec 204 (étape 7 sur les schémas)

ICAP/1.0 204 No Modifications needed
Date: Wed, 01 Jun 2016 10:39:36 GMT
Server: proto_icap/1.0
ISTag: "6.0.0"
Cache-Control: max-age=0
Encapsulated: null-body=0

Réponse ICAP RESPMOD sans 204 (la réponse du serveur est renvoyée telle quelle)

ICAP/1.0 200 OK
Date: Wed, 01 Jun 2016 12:27:53 GMT
Server: proto_icap/1.0
ISTag: "6.0.0"
Cache-Control: max-age=0
Encapsulated: res-hdr=0, res-body=243

HTTP/1.1 200 OK
Date: Wed, 01 Jun 2016 12:27:53 GMT
Server: Apache/2.4.18 (Ubuntu)
Last-Modified: Mon, 21 Dec 2015 16:29:00 GMT
ETag: "f71110-5276afc8e70cd"
Accept-Ranges: bytes
Content-Length: 16191760
Content-Type: application/zip

36ed
PK..
......{.G................apacheds-2.0.0-M21/PK..
......{.G................apacheds-2.0.0-M21/bin/PK..
......{.G................apacheds-2.0.0-M21/instances/PK..
......{.G............%...apacheds-2.0.0-M21/instances/default/PK..
......{.G............+...apacheds-2.0.0-M21/instances/default/cache/PK..
......{.G............*...apacheds-2.0.0-M21/instances/default/conf/PK..
......{.G............)...apacheds-2.0.0-M21/instances/default/log/PK..
......{.G............0...apacheds-2.0.0-M21/instances/default/partitions/PK..
......{.G............)...apacheds-2.0.0-M21/instances/default/run/PK..
......{.G................apacheds-2.0.0-M21/lib/PK..
......{.G3t.C-....M......apacheds-2.0.0-M21/LICENSE.....M......-........ 
\ms.F..._1...H....{...U.-.6.2.%)+.T.v..I. 
....y...e..R..;..s.v-.....y...Q"..?..L6J\f.*..>..;U..,....X.$.FV{....g.. 
............e.e.>.y)}.......\.&Cq1.....t2...3q=..b6..M....qLO 
...l...?!.O.b.VY.....GF...QO...s.U..5..V.V.Y.")........V....*.&..c# 
.M3]W......".%U*.{1W..y....Yo...\...<W&.V.uW..:P,)w.*[ojQ.........{!.zSV 
...zF..7....,..$.X..!c.@........%..7H.+!..b..3..FL....3.yi0h].y,d...9).. 
n...H....n..H2.......^./^....k.]......n}.3Rz..-N.S~..SU....K.DV..cQ."..t 
|.H.......B..:...M.1...n.h..}ZW...2w.F.H9.@.r..d;...V`.....}......r%.. 
o.5......pS...."...#$...%=....}........z..../..6K..U.0>......4*.zo3.).). 
...[.Bm..%p..xm.....JU..N.....p.m.f.5I..:8+..!S.!.EY.<.f.:.Q.....K...... 
o...2b.....U.n*......>... ..U...?.w49..UUn..d#.......B.....}...WB 
6.....42:..c...@......".....6.......[..>.[.fR..].....p. 
w.!iL8....@V.m....3......Vf.\......#.b.&...t.`. ...;xcK....U.5.......8. 
..r....E.v.s~....v 
V...)/.N.....n...J.At.....q....Il...Rjt^AG1.50.!z..p)r....M.l.0.g....dV. 
6#Wb..i.9. ,\V.'.a...&#.....)d}...9. 
x-[g..r..C<.8.j..Xt.g...l|G.M...Vf.|...(R......T..sP| .-!Z0N 
.U.....Q...%.8.....J.uT..^.@(79....g...`=g@s.l.uz...O(.S.D...mCo...)....
(contenu abrégé)