Serveur HTTP Apache Version 2.5

Apache > Serveur HTTP > Documentation > Version 2.5 > Modules

# Module Apache mod_firehose

Cette traduction peut être périmée. Vérifiez la version anglaise pour les changements récents.

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

- Activation de la "Lance à incendie" (Firehose)
- Format du flux

### Directives

### Traitement des bugs

- Journal des modifications de httpd
- Problèmes connus
- Signaler un bug

### Voir aussi

- `firehose`

## 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.

## 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.

## 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

## 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

## 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

## 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

## 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

## 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