DNS DDoS 攻撃の軽減

最終公開日 : Sep 25, 2026
DNS サーバーは、ネットワークの最も重要なコンポーネントの 1 つであり、攻撃から保護する必要があります。DNS 攻撃の最も基本的な種類の 1 つは、DDoS 攻撃です。このタイプの攻撃は増加しており、破壊的である可能性があります。DDoS攻撃を軽減するには、次の操作を実行できます。
  • ネガティブレコードをフラッシュします。
  • ネガティブレコードの存続時間(TTL)を制限します。
  • DNSキャッシュによって消費されるメモリを制限することにより、Citrix ADCメモリを保持します。
  • DNSレコードをキャッシュに保持します。
  • DNSキャッシュバイパスを有効にします。
Related information

ネガティブ・レコードのフラッシュ

DNS 攻撃は、キャッシュに負のレコード (NXDOMAIN および NODATA) を埋め尽くします。その結果、正当な要求に対する応答はキャッシュされないため、新しい要求は DNS 解決のためにバックエンドサーバーに送信されます。したがって、応答が遅れます。
Citrix ADCアプライアンスのDNSキャッシュからネガティブDNSレコードをフラッシュできるようになりました。

CLI を使用したネガティブ・キャッシュ・レコードのフラッシュ

コマンドプロンプトで入力します。
flush dns proxyrecords -type (dnsRecordType | negRecType) NXDOMAIN | NODATA
例:
flush dns proxyrecords –negRecType NODATA

GUI を使用したネガティブ・キャッシュ・レコードのフラッシュ

  1. \[設定\] > \[トラフィック管理\] > \[DNS\] > \[レコード\] に移動します。
  2. 詳細ペインで、\[ プロキシレコードのフラッシュ\]をクリックします。
  3. 「 フラッシュ・タイプ 」ボックスで、「 ネガティブ・レコード 」を選択します。
  4. \[ネガティブレコードタイプ\] ボックスで、\[NXDOMAIN\] または \[NODATA\] のいずれかを選択します。

ランダムなサブドメインおよび NXDOMAIN 攻撃に対する保護

ランダムなサブドメインおよび NXDOMAIN 攻撃を防ぐために、DNS キャッシュメモリを制限し、負のレコードの TTL 値を調整できます。
DNSキャッシュによって消費されるメモリの量を制限するには、最大キャッシュサイズ(MB単位)と、否定応答を格納するためのキャッシュサイズ(MB単位)を指定します。いずれかの制限に達すると、それ以上のエントリはキャッシュに追加されません。また、syslog メッセージが記録され、SNMP トラップが設定されている場合は SNMP トラップが生成されます。これらの制限が設定されていない場合、システムメモリを使い果たすまでキャッシュが続行されます。
負のレコードのTTL値が高いと、長期間価値のないレコードが保存される可能性があります。TTL 値が低いほど、バックエンドサーバーに要求が送信されます。
負のレコードのTTLは、TTL値またはSOAレコードの「有効期限」値のいずれか小さい方の値に設定されます。
注:
  • この制限は、パケットエンジンごとに追加されます。たとえば、maxCacheSize が 5 MB に設定され、アプライアンスに 3 つのパケットエンジンがある場合、合計キャッシュサイズは 15 MB になります。
  • 負のレコードのキャッシュサイズは、最大キャッシュサイズ以下である必要があります。
  • DNSキャッシュメモリの制限を、すでにキャッシュされているデータの量よりも低い値に減らすと、データが期限切れになるまで、キャッシュサイズは制限を超えたままになります。つまり、TTL0を超えるか、フラッシュされます(flush dns proxyrecords コマンド、またはCitrix ADC GUIのプロキシレコードのフラッシュ)。
  • SNMPトラップを構成するには、「 SNMPトラップを生成するようにNetScaler を構成する」を参照してください。

CLI を使用して DNS キャッシュによって消費されるメモリを制限する

コマンドプロンプトで入力します。
set dns parameter -maxCacheSize <MBytes> -maxNegativeCacheSize <MBytes>
例:
set dns parameter - maxCacheSize 100 -maxNegativeCacheSize 25

GUI を使用して DNS キャッシュによって消費されるメモリを制限する

\[設定\] > \[トラフィック管理\] > \[DNS\] に移動し、\[DNS 設定の変更\] をクリックして、次のパラメータを設定します。
  • 最大キャッシュサイズ(MB)
  • 負の最大キャッシュサイズ (MB)

CLIを使用して、ネガティブレコードのTTLを制限します

コマンドプロンプトで入力します。
set dns parameter -maxnegcacheTTL <secs>
例:
set dns parameter -maxnegcacheTTL 360

GUIを使用して、ネガティブレコードのTTLを制限します

  1. \[設定\] > \[トラフィック管理\] > \[DNS\] に移動します。
  2. \[DNS 設定の変更\] をクリックし、\[ネガティブキャッシュの最大TTL (秒)\] パラメータを設定します。

DNS レコードをキャッシュに保持する

攻撃により、DNSキャッシュが重要でないエントリでいっぱいになる可能性がありますが、すでにキャッシュされている正当なレコードがフラッシュされて、新しいエントリ用のスペースが確保される可能性があります。攻撃が無効なデータをキャッシュに埋め込むのを防ぐために、正規のレコードが TTL 値を超えた後でも保持できます。
cacheNoExpire パラメータを有効にした場合、キャッシュ内の現在のレコードは、パラメータを無効にするまで保持されます。
注:
  • このオプションは、最大キャッシュサイズが指定されている場合にのみ使用できます (maxCacheSize パラメータ)。
  • maxnegcacheTTL が設定されていて、キャッシュNoExpire が有効になっている場合、キャッシュNoExpire が優先されます。

CLI を使用して DNS レコードをキャッシュに保存する

コマンドプロンプトで入力します。
set dns parameter -cacheNoExpire ( ENABLED | DISABLED)
例:
set dns parameter -cacheNoExpire ENABLED

GUI を使用して DNS レコードをキャッシュに保存する

  1. \[設定\] > \[トラフィック管理\] > \[DNS\] に移動し、\[DNS 設定の変更\] をクリックします。
  2. \[キャッシュの有効期限なし\] を選択します。

DNS キャッシュバイパスを有効にする

DNS要求の可視性と制御を向上させるには、cacheHitBypassパラメーターを設定して、すべての要求をバックエンドサーバーに転送し、キャッシュを構築できるようにしますが、使用しないようにします。キャッシュが構築されたら、パラメータを無効にして、リクエストがキャッシュから送られるようにすることができます。

CLI を使用して DNS キャッシュバイパスを有効にする

コマンドプロンプトで入力します。
set dns parameter -cacheHitBypass ( ENABLED | DISABLED )
例:
set dns parameter -cacheHitBypass ENABLED

GUI を使用して DNS キャッシュバイパスを有効にする

  1. \[設定\] > \[トラフィック管理\] > \[DNS\] に移動し、\[DNS 設定の変更\] をクリックします。
  2. \[キャッシュヒットバイパス\] を選択します。

Slowloris 攻撃を防ぐ

複数のパケットにまたがるDNSクエリは、 Slowloris 攻撃の潜在的な脅威を示します。Citrix ADCアプライアンスは、複数のパケットに分割されたDNSクエリをサイレントにドロップできます。
クエリが複数のパケットに分割されている場合は、 splitPktQueryProcessing パラメータをALLOWまたはDROPに設定できます。
注意: この設定は、DNS TCPにのみ適用されます。

CLI を使用して DNS クエリを 1 つのパケットに制限する

コマンドプロンプトで入力します。
set dns parameter -splitPktQueryProcessing ( ALLOW | DROP )
例:
set dns parameter -splitPktQueryProcessing DROP

GUI を使用して DNS クエリを 1 つのパケットに制限する

  1. \[設定\] > \[トラフィック管理\] > \[DNS\] に移動し、\[DNS 設定の変更\] をクリックします。
  2. \[分割パケットクエリ処理\] ボックスで、\[ALLOW\] または \[DROP\] を選択します。

キャッシュから提供される DNS 応答の統計情報を収集する

キャッシュから提供されるDNS応答の統計を収集できます。次に、これらの統計を使用して、より多くのDNSトラフィックがドロップされるしきい値を作成し、帯域幅ベースのポリシーでこのしきい値を適用します。以前は、キャッシュから提供された要求の数が報告されなかったため、DNS負荷分散仮想サーバーの帯域幅の計算は正確ではありませんでした。
プロキシモードでは、要求バイト、応答バイト、受信した合計パケット数、および送信した合計パケット数の統計情報が継続的に更新されます。以前は、特に DNS 負荷分散仮想サーバーでは、これらの統計情報が常に更新されるとは限りません。
プロキシモードでは、キャッシュから提供される DNS 応答の数も決定できるようになりました。これらの統計を収集するために、次のオプションが stat lb vserver <DNSvirtualServerName> コマンドに追加されました。
  • リクエスト –DNSまたはが受信したリクエストの総数 DNS_TCP 仮想サーバー。バックエンドに転送された要求と、キャッシュから応答された要求が含まれます。
  • Vserverヒット –バックエンドに転送されたリクエストの総数。キャッシュから提供されるリクエストの数は、リクエストの総数と仮想サーバーから提供されるリクエストの数の差です。
  • 応答 –この仮想サーバーによって送信された応答の総数。たとえば、DNS LB 仮想サーバーが 5 つの DNS 要求を受信し、そのうちの 3 つをバックエンドに転送し、キャッシュから 2 つを提供した場合、これらの統計の対応する値は次のようになります。
    • Vserverヒット: 3
    • リクエスト: 5
    • 反応: 5