Serveur HTTP Apache Version 2.4
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 |
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
.
Ce module implémente aussi la partie serveur du protocole PROXY
de HAProxy via la directive RemoteIPProxyProtocol
.
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
.
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
.
RemoteIPInternalProxy
sont enregistrés.Description: | Définit le champ d'en-tête qui contiendra les adresses IP du client |
---|---|
Syntaxe: | RemoteIPHeader en-tête |
Défaut: | none |
Contexte: | configuration globale, 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.
mod_remoteip
traitera tout hôte présentant une adresse non interne
dans l'en-tête RemoteIPHeader
comme hôte de
confiance.RemoteIPHeader X-Client-IP
RemoteIPHeader X-Forwarded-For
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 globale, 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.
RemoteIPHeader X-Client-IP RemoteIPInternalProxy 10.0.2.0/24 RemoteIPInternalProxy gateway.localdomain
Description: | Déclare les adresses IP intranet clients comme dignes de confiance pour présenter la valeur RemoteIPHeader |
---|---|
Syntaxe: | RemoteIPInternalProxyList nom-fichier |
Contexte: | configuration globale, 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
.
RemoteIPHeader X-Client-IP RemoteIPInternalProxyList conf/trusted-proxies.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
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 globale, 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.
RemoteIPHeader X-Forwarded-For RemoteIPProxiesHeader X-Forwarded-By
Description: | Active ou désactive la gestion du protocole PROXY |
---|---|
Syntaxe: | RemoteIPProxyProtocol On|Off |
Contexte: | configuration globale, serveur virtuel |
Statut: | Base |
Module: | mod_remoteip |
Compatibilité: | Disponible à partir de la version 2.4.31 du serveur HTTP Apache |
La directive RemoteIPProxyProtocol
permet
d'activer ou de désactiver la prise en compte et la gestion de l'en-tête de
connexion du protocole PROXY. Si elle est définie à On
, la
demande du client doit envoyer l'en-tête approprié pour chaque
nouvelle connexion, sinon cette dernière sera fermée à moins qu'il ne fasse
partie de la liste, définie via la directive RemoteIPProxyProtocolDisableHosts
, des
hôtes pour lesquels le protocole PROXY est désactivé.
Bien que cette directive peut être définie au niveau de n'importe quel serveur virtuel, il est important de garder à l'esprit que, étant donné que le protocole PROXY est basé sur la connexion et agnostique quant au protocle, son activation/désactivation est basée sur le couple adresse IP/port. Cela signifie que si plusieurs serveurs virtuels à base de nom sont configurés avec le même couple adresse IP/port, et si vous activez le protocole PROXY pour l'un d'entre eux, il le sera aussi pour tous les autres (avec le même couple adresse IP/port). Cela signifie aussi que si vous tentez d'activer le protocole PROXY pour un serveur virtuel et de le désactiver pour un autre, cela ne marchera pas ; dans ce dernier cas, la dernière directive l'emporte sur les autres et une notification sera enregistrée dans le journal pour indiquer les réglages qui ont été annulés.
Listen 80 <VirtualHost *:80> ServerName www.example.com RemoteIPProxyProtocol On #Les requêtes pour ce serveur virtuel doivent contenir un en-tête du #protocole PROXY. Si ce n'est pas le cas, la connexion sera fermée. </VirtualHost> Listen 8080 <VirtualHost *:8080> ServerName www.example.com RemoteIPProxyProtocol On RemoteIPProxyProtocolExceptions 127.0.0.1 10.0.0.0/8 #Les requêtes pour ce serveur virtuel doivent contenir un en-tête du #protocole PROXY. Si ce n'est pas le cas, la connexion sera fermée à moins que sa source ne soit localhost ou la gamme d'adresses RFC1918 10.x.x.x </VirtualHost>
Description: | Désactive la prise en compte de l'en-tête PROXY pour certains hôtes ou réseaux |
---|---|
Syntaxe: | RemoteIPProxyProtocolExceptions host|range [host|range] [host|range] |
Contexte: | configuration globale, serveur virtuel |
Statut: | Base |
Module: | mod_remoteip |
Compatibilité: | RemoteIPProxyProtocolExceptions est disponible à partir de la version 2.4.31 du serveur HTTP Apache |
La directive RemoteIPProxyProtocol
permet de
contrôler la prise en compte de l'en-tête de connexion du protocole PROXY.
Il est parfois souhaitable d'exiger pour certains clients la
présence de l'en-tête PROXY, mais aussi de permettre aux autres clients de
se connecter sans ce dernier. Cette directive permet à l'administrateur du
serveur d'autoriser cette possibilité à un hôte isolé ou à une gamme d'hôtes
au format CIDR.
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 globale, 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
.
RemoteIPHeader X-Forwarded-For RemoteIPTrustedProxy 10.0.2.16/28 RemoteIPTrustedProxy proxy.example.com
Description: | Déclare les adresses IP intranet clients comme dignes de confiance pour présenter la valeur RemoteIPHeader |
---|---|
Syntaxe: | RemoteIPTrustedProxyList nom-fichier |
Contexte: | configuration globale, 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
.
RemoteIPHeader X-Forwarded-For RemoteIPTrustedProxyList conf/trusted-proxies.lst
# Mandataires externes identifiés
192.0.2.16/28 #groupe wap phone de mandataires
proxy.isp.example.com #un FAI bien connu