Quando o Anti-DDoS Proxy encaminha tráfego para o servidor de origem, o IP original do cliente fica oculto. Para recuperá-lo, analise o cabeçalho X-Forwarded-For ou instale um módulo TOA.
Para serviços sem site (Camada 4)
Instale o módulo TOA no servidor de origem para obter o endereço IP de origem. Obter o endereço IP de origem de uma solicitação instalando o módulo TOA. Caso não seja possível instalar o módulo TOA, entre em contato com o suporte técnico.
Instância IPv4 do Anti-DDoS Proxy
O IP de origem do cliente é transmitido pelo campo TCP Option. Em serviços sem site (Camada 4), após o handshake de três vias entre o Anti-DDoS Proxy e o servidor de origem, o proxy modifica o pacote ACK final ao inserir uma TCP Option de 8 bytes (tipo 254). Essa opção contém a porta de origem e o IP de origem do cliente. A captura do Wireshark a seguir mostra um exemplo. A seção TCP Option – Experimental contém as informações de número da porta e IP de origem:
Destination Port: 443
[Stream index: 0]
[TCP Segment Len: 0]
Sequence number: 1 (relative sequence number)
Acknowledgment number: 1 (relative ack number)
1001 .... = Header Length: 36 bytes (9)
▶ Flags: 0x010 (ACK)
Window size value: 65535
[Calculated window size: 65535]
[Window size scaling factor: -2 (no window scaling used)]
Checksum: 0x90fb [unverified]
[Checksum Status: Unverified]
Urgent pointer: 0
▼ Options: (16 bytes), Experimental
▼ TCP Option – Experimental
Kind: RFC3692-style Experiment 2 (254)
Length: 8
Magic Number: 0xc406
Unknown (0xfa) (8 bytes)
0000 b4 0c 25 e2 80 46 4c e1 75 f7 e5 c1 08 00 45 00 ..%..FL. u.....E.
0010 00 38 00 00 40 00 26 06 cf e9 2f 70 49 ce 67 96 .8..@.&. ../pI.g.
0020 a4 02 1b 2e 01 bb c8 c1 cf 98 ab 2f 54 e1 90 10 ........ .../T...
0030 ff ff 90 fb 00 00 fe 08 c4 06 65 xx xx 85 fa 08 ........ ..exx...
0040 01 bb cb 6b 34 80 ...k4.
Número da porta: O campo
Magic Numbercontém o número da porta em hexadecimal. Por exemplo, c4 06 convertido para decimal resulta em 50182.IP de origem: Os quatro bytes subsequentes ao número da porta representam o IP de origem em hexadecimal. Neste exemplo,
65 ** ** 85corresponde ao IP de origem 101...133.
Instância IPv6 do Anti-DDoS Proxy
Modo v6tov4
No modo v6tov4, em que um cliente IPv6 se conecta a um servidor de origem IPv4, o pacote ACK final contém uma TCP Option de 40 bytes (tipo 249). Essa opção inclui a porta de origem, o IP de origem e o endereço IP do Anti-DDoS Proxy. O exemplo a seguir ilustra esse cenário:
Destination Port: 8080
[Stream index: 1]
[Stream Packet Number: 3]
[Conversation completeness: Incomplete, ESTABLISHED (7)]
[TCP Segment Len: 0]
Sequence Number: 1 (relative sequence number)
Sequence Number (raw): 2505761997
[Next Sequence Number: 1 (relative sequence number)]
Acknowledgment Number: 1 (relative ack number)
Acknowledgment number (raw): 483970095
1111 .... = Header Length: 60 bytes (15)
Flags: 0x010 (ACK)
Window: 4096
[Calculated window size: 262144]
[Window size scaling factor: 64]
Checksum: 0xbc88 [unverified]
[Checksum Status: Unverified]
Urgent Pointer: 0
Options: (40 bytes), Unknown (0xf9)
TCP Option – Unknown
Kind: Unknown (249)
Length: 40
Payload: 9d7d2401b180xxxd960f875d960f87000000012405e000100300000000000a7304b55
[Timestamps]
Número da porta: Os dois primeiros bytes do
Payloadcontêm o número da porta em hexadecimal. Por exemplo,9d7dconvertido para decimal resulta em 40317.-
Endereço IP de origem: Os 16 bytes após o número da porta contêm o endereço IPv6 de origem em hexadecimal. Por exemplo,
2401*****0f87corresponde a2401:b180:100*:*:*:f87:5d96:f87.NotaOs 20 bytes restantes no
Payloadcontêm as informações de IP do Anti-DDoS.
Modo v6tov6
Em um cenário v6tov6, onde tanto o cliente quanto o servidor de origem utilizam IPv6, o pacote ACK final contém uma TCP Option de 20 bytes (tipo 253). Essa opção inclui a porta de origem e o IP de origem. Veja um exemplo abaixo:
Destination Port: 8080
[Stream index: 0]
[Stream Packet Number: 1]
[Conversation completeness: Incomplete (12)]
[TCP Segment Len: 0]
Sequence Number: 1 (relative sequence number)
Sequence Number (raw): 721958393
[Next Sequence Number: 1 (relative sequence number)]
Acknowledgment Number: 1 (relative ack number)
Acknowledgment number (raw): 2789445640
1010 .... = Header Length: 40 bytes (10)
Flags: 0x010 (ACK)
Window: 65535
[Calculated window size: 65535]
[Window size scaling factor: -1 (unknown)]
Checksum: 0x90cc [unverified]
[Checksum Status: Unverified]
Urgent Pointer: 0
Options: (20 bytes), Experimental
TCP Option - Experimental: Unknown
Kind: RFC3692-style Experiment 1 (253)
Length: 20
Experiment Identifier: Unknown (0xeb98)
Data: 2401b180100xxx0f875d960f87
Número da porta: O campo
Experiment Identifiercontém o número da porta em hexadecimal. Por exemplo, eb98 convertido para decimal resulta em 60312.Endereço IP de origem: O campo
Datacontém o endereço IPv6 de origem em hexadecimal. Por exemplo, 24010f87 corresponde a 2401:b180:100:::f87:5d96:f87.
Adicione os blocos CIDR de back-to-origin do Anti-DDoS Proxy à lista de permissões do servidor de origem para evitar o bloqueio do tráfego encaminhado. Permitir que blocos CIDR de back-to-origin acessem o servidor de origem.
Anti-DDoS Proxy -> ECS: Adicione os blocos CIDR de back-to-origin ao grupo de segurança do ECS. Adicionar uma regra de grupo de segurança.
Anti-DDoS Proxy -> SLB -> ECS: Adicione os blocos CIDR de back-to-origin à lista de permissões de controle de acesso do SLB. Ativar controle de acesso.
Para serviços de site (Camada 7)
Método 1: Usar o cabeçalho X-Forwarded-For
Como funciona
Quando um proxy de Camada 7, como o Anti-DDoS Proxy, encaminha uma solicitação, o servidor de origem identifica o IP do proxy como a origem. O cabeçalho
X-Forwarded-Forregistra o IP real do cliente. Formato:X-Forwarded-For: <endereço_IP_de_origem>.Se uma solicitação passar por vários proxies (como WAF ou CDN), o cabeçalho
X-Forwarded-Forregistrará o IP real do cliente seguido pelo IP de cada proxy. Formato:X-Forwarded-For: IP-cliente-real, IP-servidor-proxy-1, IP-servidor-proxy-2, IP-servidor-proxy-3, .... Cada proxy anexa o endereço do nó anterior aoX-Forwarded-For, mas não anexa o seu próprio.
Métodos de recuperação
Recupere o valor do cabeçalho X-Forwarded-For no código da aplicação:
O primeiro endereço IP na lista separada por vírgulas do valor
X-Forwarded-Foré o IP de origem do cliente.Também é possível configurar o servidor web (Nginx, IIS 6, IIS 7, Apache ou Tomcat) para analisar o cabeçalho
X-Forwarded-For. Recuperar os endereços IP de origem dos clientes.
-
ASP
Request.ServerVariables("HTTP_X_FORWARDED_FOR") -
ASP.NET (C#)
Request.ServerVariables["HTTP_X_FORWARDED_FOR"] -
PHP
$_SERVER["HTTP_X_FORWARDED_FOR"] -
JSP
request.getHeader("HTTP_X_FORWARDED_FOR")
Método 2: Usar um cabeçalho HTTP personalizado
Visão geral
Em arquiteturas complexas, o cabeçalho padrão X-Forwarded-For (XFF) é vulnerável a falsificações e confusão de IP devido a múltiplas camadas de proxy. Um cabeçalho HTTP personalizado oferece uma transmissão mais confiável do IP do cliente.
Procedimento
Configure o Anti-DDoS Proxy para gravar o IP do cliente em um cabeçalho HTTP personalizado. Configurar definições de back-to-origin.
Faça login na página Website Config no console do Anti-DDoS Proxy.
Na página Website Config, clique em Add Website.
Na página Website Config, na seção Forwarding Settings, defina Traffic Marking como Custom Header (por exemplo,
Custom-True-IP).No código da aplicação, recupere o valor do cabeçalho personalizado. Exemplo:
request.getHeader("Custom-True-IP").