Serveur Apache HTTP Version 2.4

Apache > Serveur HTTP > Documentation > Version 2.4 > Modules

# Module Apache mod_remoteip

Description: | Remplace l'adresse IP du client pour la requête par l'adresse IP présentée par un mandataire ou un répartiteur de charge via les en-têtes de la requête.
Statut: | Base
Identificateur de Module: | remoteip_module
Fichier Source: | mod_remoteip.c

### Sommaire

Ce module permet de traiter le client qui a initié la requête en tant que client original du point de vue de httpd à des fins d'autorisation et de connexion, même si ce client se trouve derrière un répartiteur de charge, un serveur frontal, ou un serveur mandataire.

Le module remplace l'adresse IP du client pour la connexion par l'adresse IP indiquée dans l'en-tête de requête configuré via la directive `RemoteIPHeader`.

Une fois sa valeur modifiée comme indiqué, cette adresse IP client est utilisée pour la fonctionnalité `Require ip` de `mod_authz_host` ; elle est aussi affichée par `mod_status`, et enregistrée via les chaînes de formatage `%a` des modules `mod_log_config` et `core`. L'adresse IP client sous-jacente de la connexion est enregistrée via la chaîne de formatage `%{c}a`.

Il est essentiel de n'activer cette fonctionnalité que pour les requêtes en provenance des serveurs intermédiaires (mandataires, etc...) auxquels le serveur peut faire confiance, car il est trivial pour le client distant d'usurper l'identité d'un autre client.

### Sujets

- Traitement des adresses distantes

### Directives

### Traitement des bugs

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

### Voir aussi

- `mod_authz_host`
- `mod_status`
- `mod_log_config`

## Traitement des adresses distantes

Par défaut, Apache identifie le client via la valeur client_ip de la connexion, et de cette valeur découlent les valeurs remote_host et remote_logname de la connexion. Ces champs jouent un rôle dans l'authentification, l'autorisation et la journalisation, ainsi que dans d'autres traitements effectués par d'autres modules chargeables.

mod_remoteip remplace l'adresse IP client de la connexion par l'adresse IP client indiquée par exemple par un mandataire ou un répartiteur de charge pour toute la durée de la requête. Un répartiteur de charge pourra ainsi établir une connexion keepalive de longue durée avec le serveur, chaque requête conservant alors l'adresse IP client correcte bien que l'adresse IP client sous-jacente du répartiteur de charge reste inchangée.

Lorsque la valeur de l'en-tête comporte plusieurs adresses IP client séparées par des virgules, celles-ci sont traitées de la droite vers la gauche. Le traitement s'arrête lorsque l'adresse IP client courante n'est pas digne de confiance pour présenter l'adresse IP précédente. Le champ d'en-tête est alors mis à jour de façon à ne contenir que cette liste d'adresses non confirmées, ou bien, si toutes les adresses IP sont dignes de confiance, cet en-tête est tout bonnement supprimé de la requête.

Lors du remplacement de l'adresse IP client, le module stocke la liste des hôtes intermédiaires dans un mémo remoteip-proxy-ip-list, que l'on peut faire enregistrer par `mod_log_config` en utilisant le symbole de format `%{remoteip-proxy-ip-list}n`. Si l'administrateur doit stocker ceci dans un en-tête additionnel, la même valeur peut aussi être enregistrée sous la forme d'un en-tête en utilisant la directive `RemoteIPProxiesHeader`.

### Adresses IPv4 converties au format IPv6

Avec httpd, d'une manière générale, toute adresse IPv4 convertie au format IPv6 est enregistrée sous sa forme IPv4.

### Adresses internes (privées)

Tous les blocs d'adresses internes 10/8, 172.16/12, 192.168/16, 169.254/16 and 127/8 (ainsi que les adresses IPv6 en dehors du bloc public 2000::/3 block) ne sont évaluées par mod_remoteip que lorsque des mandataires internes (intranet) `RemoteIPInternalProxy` sont enregistrés.

## Directive RemoteIPHeader

Description: | Définit le champ d'en-tête qui contiendra les adresses IP du client
Syntaxe: | `RemoteIPHeader en-tête`
Contexte: | configuration du serveur, serveur virtuel
Statut: | Base
Module: | mod_remoteip

La directive `RemoteIPHeader` indique à `mod_remoteip` de traiter la valeur de l'en-tête spécifié comme l'adresse IP du client, ou comme une liste d'adresses IP clients intermédiaires, en fonction de la configuration des directives `RemoteIPInternalProxy` et `RemoteIPTrustedProxy`. Si ces deux dernières directives ne sont pas utilisées, `mod_remoteip` traitera tout hôte présentant une adresse non interne dans l'en-tête `RemoteIPHeader` comme hôte de confiance.

Si ces deux dernières directives ne sont pas utilisées, `mod_remoteip` traitera tout hôte présentant une adresse non interne dans l'en-tête `RemoteIPHeader` comme hôte de confiance.

### Exemple à usage interne (répartiteur de charge)

    RemoteIPHeader X-Client-IP

### Exemple dans le cas d'un mandataire

    RemoteIPHeader X-Forwarded-For

## Directive RemoteIPInternalProxy

Description: | Déclare les adresses IP intranet clients comme dignes de confiance pour présenter la valeur RemoteIPHeader
Syntaxe: | `RemoteIPInternalProxy ip-mandataire|ip-mandataire/sous-réseau|nom-hôte ...`
Contexte: | configuration du serveur, serveur virtuel
Statut: | Base
Module: | mod_remoteip

La directive `RemoteIPInternalProxy` permet d'ajouter une ou plusieurs adresses (ou blocs d'adresses) auxquelles on peut faire confiance pour présenter une valeur RemoteIPHeader valide de l'adresse IP du client. A la différence de la directive `RemoteIPTrustedProxy`, toute adresse IP présentée dans cet en-tête, y comprises les adresses intranet privées, sont considérées comme dignes de confiance lorsqu'elles sont indiquées par ces mandataires.

### Exemple à usage interne (répartiteur de charge)

    RemoteIPHeader X-Client-IP
    RemoteIPInternalProxy 10.0.2.0/24
    RemoteIPInternalProxy gateway.localdomain

## Directive RemoteIPInternalProxyList

Description: | Déclare les adresses IP intranet clients comme dignes de confiance pour présenter la valeur RemoteIPHeader
Syntaxe: | `RemoteIPInternalProxyList nom-fichier`
Contexte: | configuration du serveur, serveur virtuel
Statut: | Base
Module: | mod_remoteip

La directive `RemoteIPInternalProxyList` permet de spécifier un fichier parcouru au démarrage du serveur pour construire une liste d'adresses (ou blocs d'adresses), auxquelles on peut faire confiance pour présenter une valeur RemoteIPHeader valide de l'adresse IP du client.

Le caractère '`#`' indique une ligne de commentaires, sinon, toutes les lignes séparées par un caractère `nouvelle ligne` ou tous les éléments d'une ligne séparés par un espace sont traités de la même façon qu'avec la directive `RemoteIPInternalProxy`.

### Exemple à usage interne (répartiteur de charge)

    RemoteIPHeader X-Client-IP
    RemoteIPInternalProxyList conf/trusted-proxies.lst

### contenu de conf/mandataires-de-confiance.lst

             # Nos mandataires internes de confiance
             10.0.2.0/24         # Tout le monde dans le groupe de test
             passerelle.domaine-local # Le frontal répartiteur de charge

## Directive RemoteIPProxiesHeader

Description: | Déclare le champ d'en-tête qui contiendra toutes les adresses IP intermédiaires
Syntaxe: | `RemoteIPProxiesHeader Nom_en-tête`
Contexte: | configuration du serveur, serveur virtuel
Statut: | Base
Module: | mod_remoteip

La directive `RemoteIPProxiesHeader` permet de spécifier l'en-tête dans lequel `mod_remoteip` va collecter une liste de toutes les adresses IP clients intermédiaires auxquelles on pourra faire confiance pour résoudre l'adresse IP client de la requête. Notez que les adresses intermédiaires `RemoteIPTrustedProxy` sont enregistrées dans cet en-tête, alors que toute adresse intermédiaire `RemoteIPInternalProxy` est omise.

### Exemple

    RemoteIPHeader X-Forwarded-For
    RemoteIPProxiesHeader X-Forwarded-By

## Directive RemoteIPTrustedProxy

Description: | Déclare les adresses IP clientes de l'intranet dignes de confiance pour présenter la valeur RemoteIPHeader
Syntaxe: | `RemoteIPTrustedProxy ip-mandataire|ip-mandataire/sous-réseau|nom-hôte ...`
Contexte: | configuration du serveur, serveur virtuel
Statut: | Base
Module: | mod_remoteip

La directive `RemoteIPTrustedProxy` permet d'ajouter une ou plusieurs adresses, ou blocs d'adresses, auxquelles on peut faire confiance pour présenter une valeur RemoteIPHeader valide de l'adresse IP du client. A la différence de la directive `RemoteIPInternalProxy`, toutes les adresses IP intranet ou privées indiquées par de tels mandataires, y compris les blocs d'adresses 10/8, 172.16/12, 192.168/16, 169.254/16 et 127/8 (ou située en dehors du bloc IPv6 public 2000::/3), ne sont pas dignes de confiance en tant qu'adresses IP distantes, et se situent à gauche dans le contenu de l'en-tête `RemoteIPHeader`.

### Exemple d'adresse de confiance (répartiteur de charge

    RemoteIPHeader X-Forwarded-For
    RemoteIPTrustedProxy 10.0.2.16/28
    RemoteIPTrustedProxy proxy.example.com

## Directive RemoteIPTrustedProxyList

Description: | Déclare les adresses IP intranet clients comme dignes de confiance pour présenter la valeur RemoteIPHeader
Syntaxe: | `RemoteIPTrustedProxyList nom-fichier`
Contexte: | configuration du serveur, serveur virtuel
Statut: | Base
Module: | mod_remoteip

La directive `RemoteIPTrustedProxyList` permet de spécifier un fichier parcouru au démarrage du serveur pour construire une liste d'adresses (ou blocs d'adresses), auxquelles on peut faire confiance pour présenter une valeur RemoteIPHeader valide de l'adresse IP du client.

Le caractère '`#`' indique une ligne de commentaires, sinon, toutes les lignes séparées par un caractère nouvelle ligne ou tous les éléments d'une ligne séparés par un espace sont traités de la même façon qu'avec la directive `RemoteIPTrustedProxy`.

### Exemple d'adresse de confiance (répartiteur de charge

    RemoteIPHeader X-Forwarded-For
    RemoteIPTrustedProxyList conf/trusted-proxies.lst

### conf/mandataires-de-confiance.lst contents

`# Mandataires externes identifiés
192.0.2.16/28 #groupe wap phone de mandataires
proxy.isp.example.com #un FAI bien connu`