DNS DDoS攻撃を軽減する

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

ネガティブレコードをフラッシュする

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

CLI を使用してネガティブキャッシュレコードをフラッシュする

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

GUI によるネガティブ・キャッシュ・レコードのフラッシュ

  1. > > > に移動します。
  2. 詳細ペインで、「 プロキシレコードをフラッシュ」をクリックします。
  3. 「 フラッシュ・タイプ 」ボックスで、「 ネガティブ・レコード」を選択します。
  4. 「ネガティブ・レコード・タイプ」ボックスで、「NXDOMAIN」または「NODATA」を選択します。

ランダムなサブドメイン攻撃とNXDOMAIN攻撃からの保護

ランダムなサブドメイン攻撃や NXDOMAIN 攻撃を防ぐために、DNS キャッシュメモリを制限したり、負のレコードの TTL 値を調整したりできます。
DNS キャッシュが消費するメモリ量を制限するには、最大キャッシュサイズ (MB 単位) と、否定応答を保存するためのキャッシュサイズ (MB 単位) を指定します。いずれかの制限に達すると、キャッシュにエントリは追加されません。また、Syslog メッセージがログに記録され、SNMP トラップを設定している場合は、SNMP トラップが生成されます。これらの制限が設定されていない場合、キャッシュはシステムメモリを使い果たすまで続きます。
負のレコードの TTL 値を大きくすると、価値のないレコードが長期間保存される可能性があります。TTL 値が小さいほど、バックエンドサーバーに送信されるリクエストが増えます。
ネガティブレコードの TTL は、TTL 値または SOA レコードの「Expires」値のどちらか小さい方の値に設定されます。
注記:
  • この制限はパケットエンジンごとに追加されます。たとえば、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 キャッシュが消費するメモリを制限する

> > に移動し、 をクリックして、次のパラメータを設定します。
  • 最大キャッシュサイズ (MB)
  • 負の最大キャッシュサイズ (MB)

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

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

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

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

DNS レコードをキャッシュに保存

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

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

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

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

  1. > > に移動し、 をクリックします。
  2. 「 キャッシュ期限なし」を選択します。

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

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

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

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

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

  1. > > に移動し、 をクリックします。
  2. 「 キャッシュヒットバイパス」を選択します。

Slowloris 攻撃を防ぐ

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

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

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

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

  1. > > に移動し、 をクリックします。
  2. 「 パケット分割クエリ処理 」ボックスで、「 許可 」または「 ドロップ」を選択します。

キャッシュから提供された DNS 応答の統計を収集します

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