サービスを Anti-DDoS Proxy に追加すると、プロキシはすべてのトラフィックをオリジンサーバーに転送します。オリジンサーバーは、X-Forwarded-For ヘッダーを解析するか、TOA モジュールをインストールすることで、クライアントの送信元 IP アドレスを取得できます。
ウェブサイト以外のサービス (レイヤー 4)
一部のウェブサイト以外のサービスでは、オリジンサーバーに TOA モジュールをインストールして、送信元 IP アドレスを取得できます。手順については、「TOA モジュールをインストールしてリクエストの送信元 IP アドレスを取得する」をご参照ください。ご利用の環境に TOA モジュールをインストールできない場合は、テクニカルサポートまでご連絡ください。
Anti-DDoS Proxy IPv4 インスタンス
Anti-DDoS Proxy は TCP オプションフィールドを使用して送信元 IP アドレスを転送します。プロキシとオリジンサーバーが 3 ウェイハンドシェイクを完了すると、最後の ACK パケットにはタイプ 254 の 8 バイトの TCP オプションが含まれます。このオプションには、送信元ポート番号と送信元 IP アドレスが含まれています。次の図は、この情報の場所を示しています。
ポート番号:
Magic Numberフィールドはポート番号を表し、16 進数で表現されます。たとえば、値 c4 06 は 10 進数のポート番号 50182 に変換されます。送信元 IP アドレス: ポート番号の後の連続する 4 バイトには、送信元 IP アドレスが 16 進数で含まれています。たとえば、
65 ** ** 85は 10 進数の IP アドレス101.***.***.133に変換されます。
Anti-DDoS Proxy IPv6 インスタンス
v6tov4 モード
v6tov4 モードでは、プロキシは IPv6 アドレスを持ち、オリジンサーバーは IPv4 アドレスを持ちます。この場合、プロキシは TCP オプションフィールドを使用します。3 ウェイハンドシェイクの後、最後の ACK パケットにはタイプ 249 の 40 バイトの TCP オプションが含まれます。このオプションには、送信元ポート、送信元 IP、および Anti-DDoS Proxy の IP アドレスが含まれています。次の図は、この情報の場所を示しています。

ポート番号:
Payload内の最初の 2 バイトは、16 進数形式のポート番号を表します。たとえば、9d7dは 10 進数値の 40317 に変換されます。送信元 IP アドレス: ポート番号の後の連続する 16 バイトには、送信元 IPv6 アドレスが 16 進数で含まれています。たとえば、
2401*****0f87は IP アドレス2401:b180:100*:*:*:f87:5d96:f87に対応します。説明Payload内で、ポート番号と送信元 IP アドレスを除く残りの 20 バイトには、Anti-DDoS の IP 情報が含まれています。
v6tov6 モード
v6tov6 モードでは、プロキシとオリジンサーバーの両方が IPv6 アドレスを使用します。この場合、プロキシは TCP オプションフィールドを使用します。3 ウェイハンドシェイクの後、最後の ACK パケットには、送信元ポートと送信元 IP アドレスを含むタイプ 253 の 20 バイトの TCP オプションが含まれます。次の図は、この情報の場所を示しています。

ポート番号:
Experiment Identifierフィールドは、ポート番号を 16 進数で指定します。たとえば、16 進数値の eb98 は 10 進数のポート番号 60312 に対応します。送信元 IP アドレス:
Dataフィールドは、送信元 IP アドレスを 16 進数文字列として表し、これは IPv6 アドレスに直接対応します。たとえば、値 2401*****0f87 は、送信元 IP アドレスが 2401:b180:100*:*:*:f87:5d96:f87 であることを意味します。
Anti-DDoS Proxy からの back-to-origin トラフィックがブロックされるのを防ぐには、Anti-DDoS Proxy の back-to-origin CIDR ブロックをオリジンサーバーのホワイトリストに追加する必要があります。back-to-origin CIDR ブロックを確認するには、「オリジンサーバーへの back-to-origin CIDR ブロックのアクセスを許可する」をご参照ください。
ネットワークアーキテクチャが Anti-DDoS Proxy -> Elastic Compute Service (ECS) の場合、Anti-DDoS Proxy の back-to-origin CIDR ブロックを ECS インスタンスのセキュリティグループに追加します。詳細については、「セキュリティグループルールの追加」をご参照ください。
ネットワークアーキテクチャが Anti-DDoS Proxy -> Server Load Balancer (SLB) -> ECS の場合、Anti-DDoS Proxy の back-to-origin CIDR ブロックを SLB インスタンスのアクセス制御ホワイトリストに追加します。詳細については、「アクセス制御の有効化」をご参照ください。
ウェブサイトサービス (レイヤー 7)
方法 1:X-Forwarded-For ヘッダーの使用
仕組み
Anti-DDoS Proxy などのレイヤー 7 プロキシサーバーがリクエストをオリジンサーバーに転送すると、オリジンサーバーはそのリクエストがプロキシの IP アドレスから送信されたものとして認識します。
X-Forwarded-ForHTTP ヘッダーには、クライアントの実際の送信元 IP アドレスが記録されます。フォーマットはX-Forwarded-For: <originating_IP_address>です。リクエストがオリジンサーバーに到達する前に 1 つ以上のプロキシサーバー (Web Application Firewall (WAF) や Content Delivery Network (CDN) など) を通過する場合、
X-Forwarded-ForHTTP ヘッダーには、実際の送信元 IP とリクエストが通過したすべてのプロキシサーバーの IP が記録されます。フォーマットはX-Forwarded-For: real-client-IP, proxy-server-1-IP, proxy-server-2-IP, proxy-server-3-IP, ...です。プロキシノードがリクエストをオリジンサーバーに転送する際、前のノードのアドレスをX-Forwarded-Forヘッダーに追加しますが、自身の IP は追加しません。
取得方法
以下のコードスニペットは、さまざまなプログラミング言語で X-Forwarded-For ヘッダーの値を取得する方法を示しています。
X-Forwarded-Forヘッダーの値を取得した後、カンマ区切りのリストの最初の IP アドレスを取得します。この IP アドレスがクライアントの送信元 IP アドレスです。Web サーバー (Nginx、IIS 6、IIS 7、Apache、Tomcat など) を設定して
X-Forwarded-Forヘッダーを解析し、送信元 IP アドレスを取得することもできます。詳細については、「クライアントの送信元 IP アドレスの取得」をご参照ください。
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")
方法 2:カスタム HTTP ヘッダーの使用
概要
複雑なネットワークアーキテクチャでは、標準の X-Forwarded-For (XFF) ヘッダーに依存すると、ヘッダーの偽造、複数のプロキシレイヤーによる IP アドレスの混同、複雑な解析ロジックなどのリスクが生じる可能性があります。セキュリティと制御を強化するために、カスタム HTTP ヘッダーを使用してクライアントの送信元 IP アドレスを転送できます。
操作手順
Anti-DDoS Proxy を設定して、クライアント IP アドレスをカスタム HTTP ヘッダーに書き込むことができます。詳細については、「back-to-origin 設定の構成」をご参照ください。
Anti-DDoS Proxy コンソールの「Web サイト設定」ページにログインします。
ドメイン接続 ページで、ドメインの追加 をクリックします。
Web サイトへのアクセス ページの 転送の設定 セクションで、トラフィックマーキング を カスタムヘッダー (例:
Custom-True-IP) に設定します。アプリケーションコードで、カスタムヘッダーの値を取得します。例:
request.getHeader("Custom-True-IP")。