Rate Limiting com Proxy Reverso

Tinha uma pergunta sobre qual cabeçalho está sendo usado para limitação de taxa. Para contexto, temos um nginx.conf com set_real_ip e estamos usando um provedor que nos envia tráfego com o IP real do cliente no cabeçalho Some-Client-IP.

  sendfile on;
set_real_ip_from ...;
set_real_ip_from ...;
set_real_ip_from ...;
set_real_ip_from ...;

real_ip_header Some-Client-IP;
real_ip_recursive on;

Some-Client-IP é o que obtemos do upstream com o IP real do usuário.

Na configuração atual do discourse.conf em conf.d para nginx, temos o padrão:

Para acho que todas as rotas em geral

    proxy_set_header Host $http_host;
    proxy_set_header X-Request-Start "t=${msec}";
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $thescheme;
    proxy_pass http://discourse;

O Discourse verifica X-Forwarded-For ou X-Real-IP para limitação de taxa? Acho que está olhando para X-Forwarded-For porque em production.log vejo o IP do meu proxy reverso. A solução correta é mudar X-Forwarded-For para olhar também para $remote_addr?

Desta thread, parece que alguém simplesmente excluiu essa linha Last IP shows Reverse Proxy IP address - #5 by schleifer

Obrigado

1 curtida

Você adicionou essa estrofe ao seu app.yml? Essas configurações precisam estar no NGINX que está dentro do contêiner. Veja também Set up Discourse on a server with existing Apache sites. Isso é para Apache, mas a parte que vai em app.yml é a mesma, independentemente do que esteja fazendo o proxy reverso.

Esses trechos estão no nginx.conf atual em vez de nosso contêiner em conf.d/discourse.conf.

Para a parte do app.yml, você quis dizer

run:
  - replace:
      filename: /etc/nginx/conf.d/discourse.conf
      from: "types {"
      to: |
        set_real_ip_from 172.17.0.0/24;
        real_ip_header X-Forwarded-For;
        real_ip_recursive on;
        types {

Não temos HAProxy fora dos contêineres, temos um provedor de DNS que faz algum pré-processamento para nós, então o real_ip_header está em outro valor de cabeçalho, e na verdade temos uma lista de endereços IP que precisam ser substituídos.

Na verdade, também vemos uma lista de X-Forwarded-For, estou me perguntando se essa é a causa para os IPs errados aparecerem.

Por exemplo, acho que vemos 111.11.11.111 nos logs de produção, mas não 55.555.55.55, que é o que queremos (pois está definido em x-real-ip)

HTTP_X_FORWARDED_FOR	111.11.11.111, 22.22.22.222, 333.33.33.333, 55.555.55.55
HTTP_X_REAL_IP	55.555.55.55

Então você precisará ajustar a configuração recomendada de acordo.

Ou, se você não se importa com endereços IP ou limitação de taxa, pode lembrar o modelo de limitação de taxa.

1 curtida