1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
|
<?xml version="1.0"?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
<!-- English Revision : 1673947 -->
<!-- French translation : Lucien GENTIS -->
<!-- $LastChangedRevision: 2015042601 $ -->
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<modulesynopsis metafile="mod_firehose.xml.meta">
<name>mod_firehose</name>
<description>Multiplexage des entrées/sorties vers un fichier ou un pipe.</description>
<status>Extension</status>
<sourcefile>mod_firehose.c</sourcefile>
<identifier>firehose_module</identifier>
<summary>
<p><code>mod_firehose</code> fournit un mécanisme permettant
d'enregistrer les données transmises entre le serveur httpd et le
client au niveau élémentaire de la connexion dans un fichier ou un
pipe, de façon à ce que les données puissent être analysées ou
rejouées ultérieurement par le serveur. Il s'apparente à un "tcpdump
pour httpd".</p>
<p>Les connexions sont enregistrées après décodage de la couche SSL,
et peuvent ainsi être utilisées dans le cadre d'une réquisition
légale.</p>
<p>L'utilitaire <program>firehose</program> permet en retour de
démultiplexer le flux enregistré dans des fichiers individuels pour
analyse ou rejeu via des outils tels que <code>netcat</code>.</p>
<note><title>AVERTISSEMENT</title>Ce module ignore tout mécanisme
invoqué au niveau de la requête pour rendre les données privées. Il
est donc de la responsabilité de l'administrateur de s'assurer que
les données privées ne seront pas compromises par son utilisation.
</note>
</summary>
<seealso><program>firehose</program></seealso>
<section id="enable">
<title>Activation de la "Lance à incendie" (Firehose)</title>
<p>Pour activer ce module, il doit être compilé et chargé via la
configuration de votre instance httpd courante, et les directives
ci-dessous permettent de sélectionner les données que vous souhaitez
enregistrer.</p>
<p>Il est possible d'enregistrer les données entrantes et sortantes
dans le même fichier, car la direction du flux est indiquée dans
chaque fragment.</p>
<p>Il est possible d'écrire vers des fichiers normaux ou des listes
fifos (pipes). Dans le cas des listes fifos, mod_firehose fait en
sorte que la taille des paquets ne dépasse pas la valeur de PIPE_BUF
afin de s'assurer que l'écriture de ces derniers s'effectue en une
seule fois.</p>
<p>Si une liste fifo sous forme de pipe doit être utilisée, pour que
cette dernière soit ouverte en écriture, certaines données doivent
en être extraites avant le démarrage de httpd. Si l'ouverture du
pipe échoue, mod_firehose ne sera pas activé, et le serveur sera
lancé normalement.</p>
<p>Par défaut, toute tentative d'écriture bloque le serveur. Si le
serveur a été compilé avec APR version 2.0 ou supérieure, et si le
paramètre "nonblock" a été spécifié, les écritures dans les fichiers
seront non blocantes, et tout dépassement de tampon entraînera la
perte des données de débogage. Dans ce cas, il est possible donner
la priorité à l'exécution du serveur sur l'enregistrement des
données firehose.</p>
</section>
<section id="format">
<title>Format du flux</title>
<p>En général, le serveur gère plusieurs connexions simultanément,
et de ce fait, les requêtes et les réponses doivent être
multiplexées avant d'être écrites dans le firehose.</p>
<p>Chaque fragment se présente sous la forme d'un texte en clair
de façon à ce qu'un firehose puisse être ouvert et inspecté par un
éditeur de texte standard. Il est aussi possible d'utiliser
l'utilitaire <program>firehose</program> pour démultiplexer le
firehose en requêtes ou connexions individuelles.</p>
<p>La taille maximale des fragments multiplexés est définie par la
variable PIPE_BUF. Elle correspond à la taille maximale d'un
élément que le système peut écrire. Si la taille des fragments
multiplexés reste en dessous de PIPE_BUF, le module garantit que les
contenus des différents fragments ne se recouperont pas. La valeur
de PIPE_BUF varie en fonction du système d'exploitation.</p>
<p>La BNF du format du fragment est la suivante :</p>
<pre>
stream = 0*(fragment)
fragment = header CRLF body CRLF
header = length SPC timestamp SPC ( request | response ) SPC uuid SPC count
length = <longueur de fragment sur 16 octets hexadécimaux>
timestamp = <temps depuis 1970 en microsecondes sur 16 octets hexadécimaux>
request = "<"
response = ">"
uuid = <uuid formaté de la connexion>
count = <numéro hexadécimal du fragment dans la connexion>
body = <contenu binaire du fragment>
SPC = <un espace>
CRLF = <un retour chariot suivi d'une nouvelle ligne>
</pre>
<p>Tous les fragments d'une connexion ou d'une requête partagent le
même UUID, selon que les connexions ou les requêtes sont
enregistrées ou non. Si les connexions sont enregistrées, plusieurs
requêtes peuvent apparaître dans la même connexion. Un fragment de
longueur nulle indique la fin de la connexion.</p>
<p>Certains fragments peuvent manquer ou être supprimés si le
processus qui les lit est trop lent. Si cela se produit, il y aura
des trous dans le comptage des connections. Un avertissement
indiquant l'UUID et le numéro du fragment supprimé sera enregistré
dans le journal des erreurs.</p>
<p>En cas de crash ou d'arrêt forcé du processus httpd, il est
possible que le fragment vide de terminaison n'apparaisse pas. Cela
peut aussi se produire si le processus qui lit les fragments n'est
pas assez rapide.</p>
</section>
<directivesynopsis>
<name>FirehoseConnectionInput</name>
<description>Capture le trafic entrant dans le serveur à chaque
connexion.</description>
<syntax>FirehoseConnectionInput <var>[ block | nonblock ]</var> <var>filename</var></syntax>
<default>none</default>
<contextlist><context>server config</context></contextlist>
<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
Apache.</compatibility>
<usage>
<p>Capture le trafic entrant dans le serveur à chaque connexion.
Plusieurs requêtes seront capturées pour la même connexion si les
connexions persistantes sont activées.</p>
<example><title>Exemple</title>
<highlight language="config">
FirehoseConnectionInput connection-input.firehose
</highlight>
</example>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>FirehoseConnectionOutput</name>
<description>Capture le trafic sortant du serveur à chaque connexion</description>
<syntax>FirehoseConnectionOutput <var>[ block | nonblock ]</var> <var>filename</var></syntax>
<default>none</default>
<contextlist><context>server config</context></contextlist>
<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
Apache.</compatibility>
<usage>
<p>Capture le trafic sortant du serveur à chaque connexion.
Plusieurs requêtes seront capturées pour la même connexion si les
connexions persistantes sont activées.
</p>
<example><title>Exemple</title>
<highlight language="config">
FirehoseConnectionOutput connection-output.firehose
</highlight>
</example>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>FirehoseRequestInput</name>
<description>Capture le trafic entrant dans le serveur à chaque requête</description>
<syntax>FirehoseRequestInput <var>[ block | nonblock ]</var> <var>filename</var></syntax>
<default>none</default>
<contextlist><context>server config</context></contextlist>
<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
Apache.</compatibility>
<usage>
<p>Capture le trafic entrant dans le serveur à chaque requête. Les
requêtes sont capturées séparément, que les connexions persistantes
soient activées ou non.</p>
<example><title>Exemple</title>
<highlight language="config">
FirehoseRequestInput request-input.firehose
</highlight>
</example>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>FirehoseRequestOutput</name>
<description>Capture le trafic sortant du serveur à chaque requête</description>
<syntax>FirehoseRequestOutput <var>[ block | nonblock ]</var> <var>filename</var></syntax>
<default>none</default>
<contextlist><context>server config</context></contextlist>
<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
Apache.</compatibility>
<usage>
<p>Capture le trafic sortant du serveur à chaque requête. Les
requêtes sont capturées séparément, que les connexions persistantes
soient activées ou non.</p>
<example><title>Exemple</title>
<highlight language="config">
FirehoseRequestOutput request-output.firehose
</highlight>
</example>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>FirehoseProxyConnectionInput</name>
<description>Capture le trafic entrant dans mod_proxy</description>
<syntax>FirehoseProxyConnectionInput <var>[ block | nonblock ]</var> <var>filename</var></syntax>
<default>none</default>
<contextlist><context>server config</context></contextlist>
<compatibility></compatibility>
<usage>
<p>Capture le trafic reçu par mod_proxy.</p>
<example><title>Exemple</title>
<highlight language="config">
FirehoseProxyConnectionInput proxy-input.firehose
</highlight>
</example>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>FirehoseProxyConnectionOutput</name>
<description>Capture le trafic envoyé par mod_proxy</description>
<syntax>FirehoseProxyConnectionOutput <var>[ block | nonblock ]</var> <var>filename</var></syntax>
<default>none</default>
<contextlist><context>server config</context></contextlist>
<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
Apache.</compatibility>
<usage>
<p>Capture le trafic envoyé par mod_proxy.</p>
<example><title>Exemple</title>
<highlight language="config">
FirehoseProxyConnectionOutput proxy-output.firehose
</highlight>
</example>
</usage>
</directivesynopsis>
</modulesynopsis>
|