Skip to content
mobius1qwe edited this page Nov 2, 2026 · 1 revision

Home > Colocar no ar > Atrás de um proxy 🚧

Atrás de um proxy: o IP real do cliente

Important

Em desenvolvimento (2.0). Ainda não está numa versão lançada e pode mudar.

Vale para a 2.0 · Delphi XE em diante e Lazarus/FPC 3.2 em diante · Nível: intermediário

Em uma frase: atrás de um NGINX, de um balanceador de nuvem ou do proxy do próprio RAL, todo pedido parece vir do proxy; o TRALForwardedPlugin põe no pedido o endereço, o esquema e o host do cliente que o proxy informa, e só quando o pedido vem de um proxy em que você confia.

Você vai precisar: o pacote RALPluginForwardedPackage e saber ligar um plugin.

Por que importa

Sem ele, ARequest.ClientInfo.IP é o IP do proxy. A lista negra, a força bruta, a inundação e o limite de pedidos julgam o proxy: um cliente abusivo bloqueia todos, ou ninguém é bloqueado. O log de acesso também mostra o proxy.

Como ligar

Forwarded := TRALForwardedPlugin.Create(Self);
Forwarded.TrustedProxies.Text := '10.0.0.0/8'#13#10'loopback';
Forwarded.Server := Servidor;

TrustedProxies aceita, uma por linha:

linha quer dizer
10.0.0.5 um endereço
10.0.0.0/8, 2001:db8::/32 uma rede (IPv4 ou IPv6)
loopback 127.0.0.0/8 e ::1 (um proxy na mesma máquina)
private loopback e as redes privadas (10/8, 172.16/12, 192.168/16, 169.254/16, fc00::/7, fe80::/10)

Uma linha que não é nada disso levanta um erro ao ser atribuída.

O que ele faz

  • Pedido de um proxy confiável: lê Forwarded (RFC 7239) ou, se não houver, X-Forwarded-For, -Proto e -Host (Headers escolhe). A cadeia é lida da direita: passa por cada proxy confiável e o primeiro endereço que não é um deles é o cliente. Assim um cliente que manda X-Forwarded-For: 1.2.3.4 forjado não engana: a parte que o seu proxy escreveu vem depois.
  • Põe o cliente em ClientInfo.IP, o esquema em HttpVersion (HTTPS quando o proxy diz https) e o host em Host.
  • Pedido de quem não é proxy confiável: os cabeçalhos são ignorados e, com StripUntrusted (padrão), tirados do pedido, para nenhum código adiante acreditar neles.
  • ClientIPHeader (por exemplo X-Real-IP ou CF-Connecting-IP) lê só o endereço que o proxy põe nesse cabeçalho.

Ele roda antes de todos os plugins (prioridade 1000): a lista negra, a força bruta e o log já veem o cliente real.

Erros comuns

Sintoma Causa Solução
o IP continua o do proxy o proxy não está em TrustedProxies ponha o endereço ou a rede dele
o IP é o de um proxy intermediário a cadeia tem um proxy que não está na lista ponha todos os proxies da sua frente
ClientInfo.IP aceita qualquer X-Forwarded-For TrustedProxies com 0.0.0.0/0 ou a rede inteira dos clientes confie só nos seus proxies
o redirecionamento para HTTPS entra em laço o proxy faz o HTTPS e o RAL vê HTTP com o plugin, o esquema vem do proxy; ou TrustForwardedProto do TRALHttpsRedirectPlugin (Operação)

Veja também

Clone this wiki locally