Como obter o IP do usuário após a atualização do commit b4a3389

Esse commit corrigiu um erro de configuração no qual você estava dependendo, mas que também poderia permitir que qualquer usuário final falsificasse seu endereço IP definindo esse cabeçalho.

Na verdade, existe uma maneira mais fácil que não exige o uso de um soquete — acabei de escrever um guia sobre como fazer isso.

Para sua configuração @CLOUD_PHT, você deve adicionar isso à definição do seu container (se já existir uma seção run, adicione essas diretivas a ela; caso contrário, adicione a seção 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;

Você talvez também precise do seguinte:

  - file:
      # precisamos ativar a recursividade, pois teremos pelo menos duas entradas: uma do host e outra do CloudFlare
      path: /etc/nginx/conf.d/outlets/server/real-ip-recursive.conf
      chmod: 644
      contents: |
        real_ip_recursive on;

dependendo se o nginx executado no seu servidor está processando o cabeçalho do Cloudflare para determinar o IP real do usuário final (o que é recomendado) ou apenas adicionando o seu próprio por cima. Consulte https://meta.discourse.org/t/handling-the-chain-of-trust-of-the-end-users-real-ip/406372#p-2001772-more-than-one-proxy-7 para mais detalhes.


Outros leitores: estejam cientes de que essa diretiva

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ão é apropriada para todas as configurações. Faça isso apenas se todas as conexões com o container Discourse a partir desse IP forem confiáveis.

Especificamente, um problema conhecido em configurações IPv6 é que as conexões IPv6 com o servidor são encaminhadas pelo Docker via IPv4 — a maneira como isso é feito faz com que todas as conexões pareçam vir do endereço IP docker0 do host. Se você aplicar a diretiva acima à sua configuração, permitirá que todos os usuários conectados via IPv6 falsifiquem seu endereço IP à vontade.