Cuando Anti-DDoS Proxy reenvía tráfico a su servidor de origen, la IP original del cliente se oculta. Para recuperarla, analice sintácticamente el encabezado X-Forwarded-For o instale un módulo TOA.
Para servicios que no son sitios web (capa 4)
Instale el módulo TOA en su servidor de origen para obtener la dirección IP de origen. Obtain the originating IP address of a request by installing the TOA module. Si no puede instalar el módulo TOA, póngase en contacto con el soporte técnico.
Instancia IPv4 de Anti-DDoS Proxy
La IP de origen del cliente se transmite mediante el campo TCP Option. En un servicio que no es sitio web (capa 4), después del saludo de tres vías entre Anti-DDoS Proxy y el servidor de origen, el proxy modifica el último paquete ACK e inserta una TCP Option de 8 bytes (tipo 254) que contiene el puerto de origen y la IP de origen del cliente. La siguiente captura de Wireshark muestra un ejemplo. La sección TCP Option – Experimental contiene la información del número de puerto y la IP de origen:
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 de puerto: El campo
Magic Numbercontiene el número de puerto en formato hexadecimal. Por ejemplo, c4 06 se convierte al decimal 50182.IP de origen: Los cuatro bytes que siguen al número de puerto representan la IP de origen en formato hexadecimal. En este ejemplo,
65 ** ** 85corresponde a la IP de origen101.*.*.133.
Instancia IPv6 de Anti-DDoS Proxy
Modo v6tov4
En el modo v6tov4, donde un cliente IPv6 se conecta a un servidor de origen IPv4, el último paquete ACK contiene una TCP Option de 40 bytes (tipo 249). Esta opción incluye el puerto de origen, la IP de origen y la dirección IP de Anti-DDoS Proxy. A continuación se muestra un ejemplo:
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 de puerto: Los primeros dos bytes del
Payloadcontienen el número de puerto en formato hexadecimal. Por ejemplo,9d7dse convierte al decimal 40317.-
Dirección IP de origen: Los 16 bytes posteriores al número de puerto contienen la dirección IPv6 de origen en formato hexadecimal. Por ejemplo,
2401*****0f87corresponde a2401:b180:100*:*:*:f87:5d96:f87.NotaLos 20 bytes restantes en el
Payloadcontienen la información de IP de Anti-DDoS.
Modo v6tov6
En un escenario v6tov6, donde tanto el cliente como el servidor de origen usan IPv6, el último paquete ACK contiene una TCP Option de 20 bytes (tipo 253). Esta opción incluye el puerto de origen y la IP de origen. A continuación se muestra un ejemplo:
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 de puerto: El campo
Experiment Identifiercontiene el número de puerto en formato hexadecimal. Por ejemplo, eb98 se convierte al decimal 60312.Dirección IP de origen: El campo
Datacontiene la dirección IPv6 de origen en formato hexadecimal. Por ejemplo, 24010f87 corresponde a 2401:b180:100:::f87:5d96:f87.
Agregue los bloques CIDR de retorno al origen de Anti-DDoS Proxy a la lista de permitidos de su servidor de origen para evitar que se bloquee el tráfico reenviado. Allow back-to-origin CIDR blocks to access the origin server.
Anti-DDoS Proxy -> ECS: Agregue los bloques CIDR de retorno al origen al security group de ECS. Add a security group rule.
Anti-DDoS Proxy -> SLB -> ECS: Agregue los bloques CIDR de retorno al origen a la lista de permitidos de control de acceso de SLB. Enable access control.
Para servicios de sitios web (capa 7)
Método 1: Uso del encabezado X-Forwarded-For
Funcionamiento
Cuando un proxy de capa 7, como Anti-DDoS Proxy, reenvía una solicitud, el servidor de origen ve la IP del proxy como origen. El encabezado
X-Forwarded-Forregistra la IP real del cliente. Formato:X-Forwarded-For: <originating_IP_address>.Si una solicitud pasa por varios proxies (como WAF o CDN), el encabezado
X-Forwarded-Forregistra la IP real del cliente seguida de la IP de cada proxy. Formato:X-Forwarded-For: real-client-IP, proxy-server-1-IP, proxy-server-2-IP, proxy-server-3-IP, .... Cada proxy agrega la dirección del nodo anterior aX-Forwarded-For, pero no agrega la suya propia.
Métodos de recuperación
Recupere el valor del encabezado X-Forwarded-For en el código de su aplicación:
La primera dirección IP en el valor
X-Forwarded-Forseparado por comas es la IP de origen del cliente.También puede configurar su servidor web (Nginx, IIS 6, IIS 7, Apache o Tomcat) para analizar sintácticamente el encabezado
X-Forwarded-For. Retrieve the originating IP addresses of clients.
-
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: Uso de un encabezado HTTP personalizado
Descripción general
En arquitecturas complejas, el encabezado estándar X-Forwarded-For (XFF) es vulnerable a falsificaciones y confusión de IP debido a múltiples capas de proxy. Un encabezado HTTP personalizado proporciona una transmisión más confiable de la IP del cliente.
Procedimiento
Configure Anti-DDoS Proxy para escribir la IP del cliente en un encabezado HTTP personalizado. Configure back-to-origin settings.
Inicie sesión en la página Website Config en la consola de Anti-DDoS Proxy.
En la página Website Config, haga clic en Add Website.
En la página Website Config, en la sección Forwarding Settings, establezca Traffic Marking en Custom Header (por ejemplo,
Custom-True-IP).En el código de su aplicación, recupere el valor del encabezado personalizado; por ejemplo:
request.getHeader("Custom-True-IP").