mirror of
https://github.com/apache/httpd.git
synced 2025-08-10 02:56:11 +00:00

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1918506 13f79535-47bb-0310-9956-ffa450edef68
410 lines
18 KiB
Plaintext
410 lines
18 KiB
Plaintext
<?xml version="1.0" encoding="UTF-8" ?>
|
|
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
|
|
<?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
|
|
<!-- English Revision: 1918407 -->
|
|
<!-- French translation : Lucien GENTIS -->
|
|
<!-- Reviewed by : Vincent Deffontaines -->
|
|
|
|
<!--
|
|
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_remoteip.xml.meta">
|
|
|
|
<name>mod_remoteip</name>
|
|
<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.
|
|
</description>
|
|
|
|
<status>Base</status>
|
|
<sourcefile>mod_remoteip.c</sourcefile>
|
|
<identifier>remoteip_module</identifier>
|
|
|
|
<summary>
|
|
<p>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.</p>
|
|
|
|
<p>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
|
|
<directive module="mod_remoteip">RemoteIPHeader</directive>.</p>
|
|
|
|
<p>En outre, ce module implémente la partie serveur du <a
|
|
href="http://blog.haproxy.com/haproxy/proxy-protocol/">protocole PROXY</a>
|
|
de HAProxy lorsqu'on utilise la directive <directive
|
|
module="mod_remoteip">RemoteIPProxyProtocol</directive>.</p>
|
|
|
|
<p>Une fois sa valeur modifiée comme indiqué, cette adresse IP client est
|
|
utilisée pour la fonctionnalité <directive
|
|
module="mod_authz_host" name="Require">Require ip</directive> de
|
|
<module>mod_authz_host</module> ; elle est aussi affichée par
|
|
<module>mod_status</module>, et enregistrée via les chaînes de formatage
|
|
<code>%a</code> des modules <module>mod_log_config</module> et <module>core</module>.
|
|
L'adresse IP client sous-jacente de la connexion est enregistrée via la chaîne de
|
|
formatage <code>%{c}a</code>.
|
|
</p>
|
|
|
|
<note type="warning">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.</note>
|
|
</summary>
|
|
|
|
<seealso><module>mod_authz_host</module></seealso>
|
|
<seealso><module>mod_status</module></seealso>
|
|
<seealso><module>mod_log_config</module></seealso>
|
|
<seealso><a href="http://www.haproxy.org/download/1.8/doc/proxy-protocol.txt">Proxy Protocol Spec</a></seealso>
|
|
|
|
<section id="processing"><title>Traitement des adresses distantes</title>
|
|
|
|
<p>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.</p>
|
|
|
|
<p>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.</p>
|
|
|
|
<p>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.</p>
|
|
|
|
<p>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
|
|
<module>mod_log_config</module> en utilisant le symbole de format
|
|
<code>%{remoteip-proxy-ip-list}n</code>. 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 <directive module="mod_remoteip">RemoteIPProxiesHeader</directive>.</p>
|
|
|
|
<note><title>Adresses IPv4 converties au format IPv6</title>
|
|
Avec httpd, d'une manière générale, toute adresse IPv4 convertie au
|
|
format IPv6 est enregistrée sous sa forme IPv4.</note>
|
|
|
|
<note><title>Adresses internes (privées)</title>
|
|
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)
|
|
<directive module="mod_remoteip">RemoteIPInternalProxy</directive> sont enregistrés.</note>
|
|
|
|
</section>
|
|
|
|
<directivesynopsis>
|
|
<name>RemoteIPHeader</name>
|
|
<description>Définit le champ d'en-tête qui contiendra les adresses IP
|
|
du client</description>
|
|
<syntax>RemoteIPHeader <var>en-tête</var></syntax>
|
|
<default>none</default>
|
|
<contextlist><context>server config</context><context>virtual host</context></contextlist>
|
|
|
|
<usage>
|
|
<p>La directive <directive>RemoteIPHeader</directive> indique à
|
|
<module>mod_remoteip</module> de traiter la valeur de
|
|
l'<var>en-tête</var> 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
|
|
<directive module="mod_remoteip">RemoteIPInternalProxy</directive> et
|
|
<directive module="mod_remoteip">RemoteIPTrustedProxy</directive>.</p>
|
|
|
|
<note type="warning">Si ces deux dernières
|
|
directives ne sont pas utilisées, <module>mod_remoteip</module>
|
|
traitera tout hôte présentant une adresse non interne
|
|
dans l'en-tête <directive>RemoteIPHeader</directive> comme hôte de
|
|
confiance.</note>
|
|
|
|
<example><title>Exemple à usage interne (répartiteur de
|
|
charge)</title>
|
|
<highlight language="config">
|
|
RemoteIPHeader X-Client-IP
|
|
</highlight>
|
|
</example>
|
|
|
|
<example><title>Exemple dans le cas d'un mandataire</title>
|
|
<highlight language="config">
|
|
RemoteIPHeader X-Forwarded-For
|
|
</highlight>
|
|
</example>
|
|
</usage>
|
|
</directivesynopsis>
|
|
|
|
<directivesynopsis>
|
|
<name>RemoteIPInternalProxy</name>
|
|
<description>Déclare les adresses IP intranet clients comme dignes de
|
|
confiance pour présenter la valeur RemoteIPHeader</description>
|
|
<syntax>RemoteIPInternalProxy
|
|
<var>ip-mandataire</var>|<var>ip-mandataire/sous-réseau</var>|<var>nom-hôte</var> ...</syntax>
|
|
<contextlist><context>server config</context><context>virtual host</context></contextlist>
|
|
|
|
<usage>
|
|
<p>La directive <directive>RemoteIPInternalProxy</directive> 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
|
|
<directive module="mod_remoteip">RemoteIPTrustedProxy</directive>, 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.</p>
|
|
|
|
<example><title>Exemple à usage interne (répartiteur de
|
|
charge)</title>
|
|
<highlight language="config">
|
|
RemoteIPHeader X-Client-IP
|
|
RemoteIPInternalProxy 10.0.2.0/24
|
|
RemoteIPInternalProxy gateway.localdomain
|
|
</highlight>
|
|
</example>
|
|
</usage>
|
|
</directivesynopsis>
|
|
|
|
<directivesynopsis>
|
|
<name>RemoteIPInternalProxyList</name>
|
|
<description>Déclare les adresses IP intranet clients comme dignes de
|
|
confiance pour présenter la valeur RemoteIPHeader</description>
|
|
<syntax>RemoteIPInternalProxyList <var>nom-fichier</var></syntax>
|
|
<contextlist><context>server config</context><context>virtual host</context></contextlist>
|
|
|
|
<usage>
|
|
<p>La directive <directive>RemoteIPInternalProxyList</directive>
|
|
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.</p>
|
|
|
|
<p>Le caractère '<code>#</code>' indique une ligne de commentaires,
|
|
sinon, toutes les lignes séparées par un caractère <code>nouvelle
|
|
ligne</code> 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
|
|
<directive module="mod_remoteip">RemoteIPInternalProxy</directive>.</p>
|
|
|
|
<example><title>Exemple à usage interne (répartiteur de
|
|
charge)</title>
|
|
<highlight language="config">
|
|
RemoteIPHeader X-Client-IP
|
|
RemoteIPInternalProxyList conf/trusted-proxies.lst
|
|
</highlight>
|
|
</example>
|
|
|
|
<example><title>contenu de conf/mandataires-de-confiance.lst</title>
|
|
<pre>
|
|
# 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
|
|
</pre>
|
|
</example>
|
|
</usage>
|
|
</directivesynopsis>
|
|
|
|
<directivesynopsis>
|
|
<name>RemoteIPProxiesHeader</name>
|
|
<description>Déclare le champ d'en-tête qui contiendra toutes les
|
|
adresses IP intermédiaires</description>
|
|
<syntax>RemoteIPProxiesHeader <var>Nom_en-tête</var></syntax>
|
|
<contextlist><context>server config</context><context>virtual host</context></contextlist>
|
|
|
|
<usage>
|
|
<p>La directive <directive>RemoteIPProxiesHeader</directive> permet
|
|
de spécifier l'en-tête dans lequel <module>mod_remoteip</module> 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
|
|
<directive module="mod_remoteip">RemoteIPTrustedProxy</directive> sont enregistrées dans
|
|
cet en-tête, alors que toute adresse intermédiaire
|
|
<directive module="mod_remoteip">RemoteIPInternalProxy</directive> est omise.</p>
|
|
|
|
<example><title>Exemple</title>
|
|
<highlight language="config">
|
|
RemoteIPHeader X-Forwarded-For
|
|
RemoteIPProxiesHeader X-Forwarded-By
|
|
</highlight>
|
|
</example>
|
|
</usage>
|
|
</directivesynopsis>
|
|
|
|
<directivesynopsis>
|
|
<name>RemoteIPProxyProtocol</name>
|
|
<description>Active ou désactive la gestion du protocole PROXY</description>
|
|
<syntax>RemoteIPProxyProtocol On|Off</syntax>
|
|
<contextlist><context>server config</context><context>virtual host</context>
|
|
</contextlist>
|
|
<compatibility>Disponible à partir de la version 2.4.31 du serveur HTTP Apache</compatibility>
|
|
|
|
<usage>
|
|
<p>La directive <directive>RemoteIPProxyProtocol</directive> 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 à <code>On</code>, la
|
|
demande du client <em>doit</em> 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 <directive
|
|
module="mod_remoteip">RemoteIPProxyProtocolDisableHosts</directive>, des
|
|
hôtes pour lesquels le protocole PROXY est désactivé.</p>
|
|
|
|
<p>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.</p>
|
|
|
|
<highlight language="config">
|
|
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>
|
|
</highlight>
|
|
</usage>
|
|
</directivesynopsis>
|
|
|
|
<directivesynopsis>
|
|
<name>RemoteIPProxyProtocolExceptions</name>
|
|
<description>Désactive la prise en compte de l'en-tête PROXY pour certains hôtes
|
|
ou réseaux</description>
|
|
<syntax>RemoteIPProxyProtocolExceptions host|range [host|range] [host|range]</syntax>
|
|
<contextlist><context>server config</context><context>virtual host</context>
|
|
</contextlist>
|
|
<compatibility>RemoteIPProxyProtocolExceptions est disponible à partir de la
|
|
version 2.4.31 du serveur HTTP Apache</compatibility>
|
|
|
|
<usage>
|
|
<p>La directive <directive>RemoteIPProxyProtocolExceptions</directive>
|
|
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.</p>
|
|
</usage>
|
|
</directivesynopsis>
|
|
|
|
<directivesynopsis>
|
|
<name>RemoteIPTrustedProxy</name>
|
|
<description>Restreint les adresses IP clients dignes de
|
|
confiance pour présenter la valeur RemoteIPHeader</description>
|
|
<syntax>RemoteIPTrustedProxy
|
|
<var>ip-mandataire</var>|<var>ip-mandataire/sous-réseau</var>|<var>nom-hôte</var> ...</syntax>
|
|
<contextlist><context>server config</context><context>virtual host</context></contextlist>
|
|
|
|
<usage>
|
|
<p>La directive <directive>RemoteIPTrustedProxy</directive> permet
|
|
de définir quelles adresses IP (ou blocs d'adresses) seront
|
|
considérées comme de confiance pour présenter une valeur RemoteIPHeader
|
|
valide de l'adresse IP du client.</p>
|
|
|
|
<p>A la différence de la directive
|
|
<directive module="mod_remoteip">RemoteIPInternalProxy</directive>, 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 clientes, et se situent
|
|
à gauche dans le contenu de l'en-tête
|
|
<directive module="mod_remoteip">RemoteIPHeader</directive>.</p>
|
|
|
|
<note type="warning">Par défaut, <module>mod_remoteip</module>
|
|
considérera comme de confiance tout hôte présentant une adresse non
|
|
interne dans l'en-tête <directive
|
|
module="mod_remoteip">RemoteIPHeader</directive>.
|
|
</note>
|
|
|
|
<example><title>Exemple d'adresse de confiance (répartiteur de
|
|
charge</title>
|
|
<highlight language="config">
|
|
RemoteIPHeader X-Forwarded-For
|
|
RemoteIPTrustedProxy 10.0.2.16/28
|
|
RemoteIPTrustedProxy proxy.example.com
|
|
</highlight>
|
|
</example>
|
|
</usage>
|
|
</directivesynopsis>
|
|
|
|
<directivesynopsis>
|
|
<name>RemoteIPTrustedProxyList</name>
|
|
<description>Restreint les adresses IP clients dignes de
|
|
confiance pour présenter la valeur RemoteIPHeader</description>
|
|
<syntax>RemoteIPTrustedProxyList <var>nom-fichier</var></syntax>
|
|
<contextlist><context>server config</context><context>virtual host</context></contextlist>
|
|
|
|
<usage>
|
|
<p>La directive <directive>RemoteIPTrustedProxyList</directive>
|
|
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.</p>
|
|
|
|
<p>Le caractère '<code>#</code>' 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
|
|
<directive module="mod_remoteip">RemoteIPTrustedProxy</directive>.</p>
|
|
|
|
<example><title>Exemple d'adresse de confiance (répartiteur de
|
|
charge</title>
|
|
<highlight language="config">
|
|
RemoteIPHeader X-Forwarded-For
|
|
RemoteIPTrustedProxyList conf/trusted-proxies.lst
|
|
</highlight>
|
|
</example>
|
|
|
|
<example><title>conf/mandataires-de-confiance.lst contents</title>
|
|
# Mandataires externes identifiés<br/>
|
|
192.0.2.16/28 #groupe wap phone de mandataires<br/>
|
|
proxy.isp.example.com #un FAI bien connu
|
|
</example>
|
|
</usage>
|
|
</directivesynopsis>
|
|
|
|
|
|
</modulesynopsis>
|
|
|