Repository navigation
atras de proxy
Home > Colocar no ar > Atrás de um proxy 🚧
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.
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.
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.
- Pedido de um proxy confiável: lê
Forwarded(RFC 7239) ou, se não houver,X-Forwarded-For,-Protoe-Host(Headersescolhe). 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 mandaX-Forwarded-For: 1.2.3.4forjado não engana: a parte que o seu proxy escreveu vem depois. - Põe o cliente em
ClientInfo.IP, o esquema emHttpVersion(HTTPSquando o proxy dizhttps) e o host emHost. - 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 exemploX-Real-IPouCF-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.
| 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) |
Começar
Servidor
- Rotas e parâmetros
- Rotas avançadas: tipos, grupos, versões 🚧
- Ler o pedido e responder
- Resposta em fluxo 🚧
- Plugins 🚧
- Autenticação
- Banco de dados (DBWare)
- Servir site e arquivos
- Swagger e Postman
- Servidor SOAP 🚧
- HTTPS
- Criptografia ponto a ponto
- Segurança para produção
- Colocar no ar
- Desempenho
MQTT 🚧
- O que é e quando usar 🚧
- Cliente MQTT 🚧
- Broker MQTT 🚧
- MQTT-SN 🚧
- Ponte REST 🚧
- Segurança 🚧
- Rede ruim 🚧
Cliente
Motores
Avançado
Ajuda
- Problemas comuns
- Atualizar o Indy
- Várias versões do Delphi
- Vídeos e guias
- Módulos de terceiros
- Licenças
- Contribuir
- Roadmap e changelog
🚧 = em desenvolvimento, pode mudar