Cet engagement a corrigé une erreur de configuration sur laquelle vous vous appuyiez, mais qui aurait également pu permettre à tout utilisateur final de falsifier son adresse IP en définissant cet en-tête.
Il existe en réalité une méthode plus simple qui ne nécessite pas l’utilisation d’un socket : je viens de rédiger un guide expliquant comment procéder.
Pour votre configuration @CLOUD_PHT, vous devez ajouter ceci à la définition de votre conteneur (si une section run existe déjà, ajoutez ces directives à celle-ci, sinon ajoutez la section run) :
run:
- file:
path: /etc/nginx/conf.d/outlets/server/real-ip-header.conf
chmod: 644
contents: |
real_ip_header x-forwarded-for;
- file:
path: /etc/nginx/conf.d/outlets/server/set-real-ip-from-host.conf
chmod: 644
contents: |
set_real_ip_from 172.17.0.1;
Vous pourriez également avoir besoin de ce qui suit :
- file:
# we need to turn on recursive since we'll have at least two entries; one from the host, one from CloudFlare
path: /etc/nginx/conf.d/outlets/server/real-ip-recursive.conf
chmod: 644
contents: |
real_ip_recursive on;
cela dépend de savoir si l’instance nginx exécutée sur votre serveur traite elle-même l’en-tête Cloudflare pour déterminer l’adresse IP réelle de l’utilisateur final (ce qui est recommandé) ou se contente d’ajouter le sien par-dessus. Consultez https://meta.discourse.org/t/handling-the-chain-of-trust-of-the-end-users-real-ip/406372#p-2001772-more-than-one-proxy-7 pour plus de détails.
Autres lecteurs : sachez que cette directive
run:
- file:
path: /etc/nginx/conf.d/outlets/server/set-real-ip-from-host.conf
chmod: 644
contents: |
set_real_ip_from 172.17.0.1;
n’est pas adaptée à toutes les configurations. Ne le faites que si toutes les connexions vers le conteneur Discourse provenant de cette adresse IP sont de confiance.
Plus précisément, un problème connu avec les configurations IPv6 est que les connexions IPv6 vers le serveur sont redirigées par Docker via IPv4 : la manière dont cela est implémenté fait apparaître toutes les connexions comme provenant de l’adresse IP docker0 de l’hôte. Si vous appliquez la directive ci-dessus à votre configuration, cela permettra à tous les utilisateurs se connectant via IPv6 de falsifier leur adresse IP à leur guise.