<-
Apache > Serveur HTTP > Documentation > Version 2.5 > Modules

Module Apache mod_firehose

Langues Disponibles:  en  |  fr 

Description:Multiplexage des entrées/sorties vers un fichier ou un pipe.
Statut:Extension
Identificateur de Module:firehose_module
Fichier Source:mod_firehose.c

Sommaire

mod_firehose 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".

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.

L'utilitaire firehose permet en retour de démultiplexer le flux enregistré dans des fichiers individuels pour analyse ou rejeu via des outils tels que netcat.

AVERTISSEMENT

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.

Sujets

Directives

Traitement des bugs

Voir aussi

top

Activation de la "Lance à incendie" (Firehose)

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.

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.

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.

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.

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.

top

Format du flux

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.

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 firehose pour démultiplexer le firehose en requêtes ou connexions individuelles.

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.

La BNF du format du fragment est la suivante :

 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>

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.

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.

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.

top

Directive FirehoseConnectionInput

Description:Capture le trafic entrant dans le serveur à chaque connexion.
Syntaxe:FirehoseConnectionInput [ block | nonblock ] filename
Défaut:none
Contexte:configuration globale
Statut:Extension
Module:mod_firehose
Compatibilité:Disponible à partir de la version 2.5.0 du serveur HTTP Apache.

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.

Exemple

FirehoseConnectionInput connection-input.firehose
top

Directive FirehoseConnectionOutput

Description:Capture le trafic sortant du serveur à chaque connexion
Syntaxe:FirehoseConnectionOutput [ block | nonblock ] filename
Défaut:none
Contexte:configuration globale
Statut:Extension
Module:mod_firehose
Compatibilité:Disponible à partir de la version 2.5.0 du serveur HTTP Apache.

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.

Exemple

FirehoseConnectionOutput connection-output.firehose
top

Directive FirehoseProxyConnectionInput

Description:Capture le trafic entrant dans mod_proxy
Syntaxe:FirehoseProxyConnectionInput [ block | nonblock ] filename
Défaut:none
Contexte:configuration globale
Statut:Extension
Module:mod_firehose
Compatibilité:

Capture le trafic reçu par mod_proxy.

Exemple

FirehoseProxyConnectionInput proxy-input.firehose
top

Directive FirehoseProxyConnectionOutput

Description:Capture le trafic envoyé par mod_proxy
Syntaxe:FirehoseProxyConnectionOutput [ block | nonblock ] filename
Défaut:none
Contexte:configuration globale
Statut:Extension
Module:mod_firehose
Compatibilité:Disponible à partir de la version 2.5.0 du serveur HTTP Apache.

Capture le trafic envoyé par mod_proxy.

Exemple

FirehoseProxyConnectionOutput proxy-output.firehose
top

Directive FirehoseRequestInput

Description:Capture le trafic entrant dans le serveur à chaque requête
Syntaxe:FirehoseRequestInput [ block | nonblock ] filename
Défaut:none
Contexte:configuration globale
Statut:Extension
Module:mod_firehose
Compatibilité:Disponible à partir de la version 2.5.0 du serveur HTTP Apache.

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.

Exemple

FirehoseRequestInput request-input.firehose
top

Directive FirehoseRequestOutput

Description:Capture le trafic sortant du serveur à chaque requête
Syntaxe:FirehoseRequestOutput [ block | nonblock ] filename
Défaut:none
Contexte:configuration globale
Statut:Extension
Module:mod_firehose
Compatibilité:Disponible à partir de la version 2.5.0 du serveur HTTP Apache.

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.

Exemple

FirehoseRequestOutput request-output.firehose

Langues Disponibles:  en  |  fr 

top

Commentaires

Notice:
This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our mailing lists.