HTTP rDNS

説明

ngx_http_rdns_module - 入ってくる接続に対してreverse DNS lookupを有効にし、入ってくるホスト名に対してallow/denyルールによって簡単なアクセス制御を提供します(HttpAccessModule allow/denyディレクティブに似ています; 正規表現がサポートされます)。モジュールは標準的なリゾルバディレクティブによって定義されるDNSサーバと共に動作します。

特徴

  • 通常のrDNS lookup (結果を $rdns_hostname 変数に保存します);
  • "double lookup": 名前を取得するためにrDNS、およびIPアドレスを取得するためにDNS;
  • rewriteモジュールをサポートします(rdnsifブロックの中で使うことができます);
  • 指定されたDNS名からの接続をallow/denyするための単純なアクセス制御。

GitHubからモジュールを取得することができます。

注意

このモジュールはNGIXのソースと一緒に配布されません。 インストレーションの説明を見てください。

ディレクティブ

rdns

構文:rdns [ on | off | double ]
デフォルト:none
コンテキスト:http, server, location, if-in-server, if-in-location
Phase:rewrite

rDNS lookupを有効/無効にします。

on:このコンテキスト内でrDNS lookupを有効にします。
off:このコンテキスト内でrDNS lookupを無効にします。
double:このコンテキスト内でdouble DNS lookupを有効にします。reverse lookup (rDNS リクエスト)が成功すると、モジュールはその結果に対してforward lookup (DNSリクエスト)を実施します。forward lookup が失敗するか、IPアドレスのforward lookupのいずれもが元のアドレスに一致しない場合、$rdns_hostnamenot foundに設定されます。

$rdns_hostname 変数は以下を持つかも知れません:

  • lookupの結果;
  • リクエストの間に何も見つからないかエラーが起きた場合、特別な値not found;
  • lookupが無効な場合、特別な値-

lookupを実施した後で、モジュールは新しい $rdns_hostname 変数の値を他のディレクティブに見えるようにするために、リクエストの処理パイプラインを再起動します。

注意

内部的には、サーバあるいはlocationの ifの中でモジュールはrewriteモジュールのコードを使って動作します。最初になんらかのディレクティブが有効(on あるいは double) が実行された場合、それはDNS lookupを有効にし中断します(このif内で更にディレクティブが実行されるのを防ぐため)。lookupが完了した後で、2回目のrewriteモジュールコードを使っているif 内のディレクティブが中止無しに実行されます。ディレクティブの無効化(off) は中止しません。

このディレクティブを使用するためにコアモジュールのリゾルバが定義されていなければなりません。

rdns_allow

構文:rdns_allow regex
デフォルト:none
コンテキスト:http, server, location
Phase:access

正規表現を使って一致したドメインにアクセスを許可します。

rdns_deny

構文:rdns_deny regex
デフォルト:none
コンテキスト:http, server, location
Phase:access

正規表現を使って一致したドメインにアクセスを禁止します。

注意

rdns_allow およびrdns_deny ディレクティブは、使用されたコンテキストのための新しいアクセスリストを定義します。コンテキスト内のアクセスリストの継承は、子コンテキストが独自のルールを定義しない場合のみ動作します。

名前付きlocationでの警告

名前付きlocation内でのrDSNリクエストの生成はサポートされておらず、ループを引き起こすかも知れません。例えば:

server {
    rdns on;

    location / {
        echo_exec @foo;
    }

    location @foo {
        #...
    }
}

名前付きのlocation内にあり、リクエスト処理パイプラインを再起動すると、NGINXはそのリクエストを通常の(名前無しの)location内で処理し続けようとします。名前付きのlocationの中でモジュールを無効にしない場合は、この例はループをするでしょう。この例の正しい設定は以下のようでなければなりません:

server {
    rdns on;

    location / {
        echo_exec @foo;
    }

    location @foo {
        rdns off;
        #...
    }
}

インストール

GitHubからソースコードを取得し、一般的な サードパーティモジュール の説明に従います。

バグ/パッチ

バグのレポート & GitHubでのパッチの提案をしてください。

Credits

このモジュールの元のバージョンは Dmitry Stolyarov, written by Timofey Kirillov, CJSC Flantによって設計されました。