Comment obtenir l'adresse IP de l'utilisateur après la mise à jour du commit b4a3389

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.