Lorsqu'Anti-DDoS Proxy transfère le trafic vers votre serveur d'origine, il masque l'adresse IP du client. Récupérez cette adresse en analysant l'en-tête X-Forwarded-For ou en installant un module TOA.
Pour les services non web (couche 4)
Installez le module TOA sur votre serveur d'origine pour obtenir l'adresse IP d'origine. Obtenir l'adresse IP d'origine d'une requête en installant le module TOA. Si vous ne pouvez pas installer le module TOA, contactez le support technique.
Instance IPv4 d'Anti-DDoS Proxy
Le proxy transmet l'adresse IP source du client via le champ TCP Option. Pour un service non web (couche 4), après la négociation en trois temps entre Anti-DDoS Proxy et le serveur d'origine, le proxy modifie le dernier paquet ACK en y insérant une option TCP de 8 octets (type 254). Cette option contient le port source et l'adresse IP source du client. La capture Wireshark suivante illustre cet exemple. La section TCP Option – Experimental contient le numéro de port et les informations relatives à l'adresse IP source :
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.
Numéro de port : Le champ
Magic Numbercontient le numéro de port en hexadécimal. Par exemple,c4 06correspond à 50182 en décimal.Adresse IP source : Les quatre octets qui suivent le numéro de port représentent l'adresse IP source en hexadécimal. Dans cet exemple,
65 ** ** 85correspond à l'adresse IP source 101...133.
Instance IPv6 d'Anti-DDoS Proxy
Mode v6tov4
En mode v6tov4, lorsqu'un client IPv6 se connecte à un serveur d'origine IPv4, le dernier paquet ACK contient une option TCP de 40 octets (type 249). Cette option inclut le port source, l'adresse IP source et l'adresse IP d'Anti-DDoS Proxy. L'exemple suivant illustre ce cas :
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]
Numéro de port : Les deux premiers octets de la charge utile
Payloadcontiennent le numéro de port en hexadécimal. Par exemple,9d7dcorrespond à 40317 en décimal.-
Adresse IP source : Les 16 octets qui suivent le numéro de port contiennent l'adresse IPv6 source en hexadécimal. Par exemple,
2401*****0f87correspond à2401:b180:100*:*:*:f87:5d96:f87.RemarqueLes 20 octets restants dans la charge utile
Payloadcontiennent les informations relatives à l'adresse IP d'Anti-DDoS.
Mode v6tov6
Dans un scénario v6tov6, où le client et le serveur d'origine utilisent tous deux IPv6, le dernier paquet ACK contient une option TCP de 20 octets (type 253). Cette option inclut le port source et l'adresse IP source. L'exemple suivant illustre ce cas :
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
Numéro de port : Le champ
Experiment Identifiercontient le numéro de port en hexadécimal. Par exemple,eb98correspond à 60312 en décimal.Adresse IP source : Le champ
Datacontient l'adresse IPv6 source en hexadécimal. Par exemple,24010f87correspond à2401:b180:100:::f87:5d96:f87.
Ajoutez les blocs CIDR de retour vers l'origine d'Anti-DDoS Proxy à la liste d'autorisation de votre serveur d'origine afin d'éviter que le trafic transféré ne soit bloqué. Autoriser les blocs CIDR de retour vers l'origine à accéder au serveur d'origine.
Anti-DDoS Proxy -> ECS : Ajoutez les blocs CIDR de retour vers l'origine au groupe de sécurité ECS. Ajouter une règle de groupe de sécurité.
Anti-DDoS Proxy -> SLB -> ECS : Ajoutez les blocs CIDR de retour vers l'origine à la liste d'autorisation du contrôle d'accès SLB. Activer le contrôle d'accès.
Pour les services web (couche 7)
Méthode 1 : Utiliser l'en-tête X-Forwarded-For
Fonctionnement
Lorsqu'un proxy de couche 7 tel qu'Anti-DDoS Proxy transfère une requête, le serveur d'origine voit l'adresse IP du proxy comme source. L'en-tête
X-Forwarded-Forenregistre l'adresse IP réelle du client. Format :X-Forwarded-For: <adresse_IP_d'origine>.Si une requête traverse plusieurs proxys (tels que WAF ou CDN), l'en-tête
X-Forwarded-Forenregistre l'adresse IP réelle du client suivie de chaque adresse IP de proxy. Format :X-Forwarded-For: real-client-IP, proxy-server-1-IP, proxy-server-2-IP, proxy-server-3-IP, .... Chaque proxy ajoute l'adresse du nœud précédent à l'en-têteX-Forwarded-Forsans ajouter la sienne.
Méthodes de récupération
Récupérez la valeur de l'en-tête X-Forwarded-For dans le code de votre application :
La première adresse IP de la valeur
X-Forwarded-Forséparée par des virgules correspond à l'adresse IP d'origine du client.Vous pouvez également configurer votre serveur web (Nginx, IIS 6, IIS 7, Apache ou Tomcat) pour analyser l'en-tête
X-Forwarded-For. Récupérer les adresses IP d'origine des 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éthode 2 : Utiliser un en-tête HTTP personnalisé
Présentation
Dans des architectures complexes, l'en-tête standard X-Forwarded-For (XFF) est vulnérable à la falsification et à la confusion des adresses IP dues aux multiples couches de proxy. Un en-tête HTTP personnalisé offre une transmission plus fiable de l'adresse IP du client.
Procédure
Configurez Anti-DDoS Proxy pour écrire l'adresse IP du client dans un en-tête HTTP personnalisé. Configurer les paramètres de retour vers l'origine.
Connectez-vous à la page Website Config dans la console Anti-DDoS Proxy.
Sur la page Website Config, cliquez sur Add Website.
Sur la page Website Config, dans la section Forwarding Settings, définissez Traffic Marking sur Custom Header (par exemple,
Custom-True-IP).Dans le code de votre application, récupérez la valeur de l'en-tête personnalisé, par exemple :
request.getHeader("Custom-True-IP").