Apacheで、一部のコンテンツにホスト名(ダイナミックDNS)でアクセス制限したい

【結論】
・条件 Apacheバージョンが2.4.19以上の場合
Require forward-dns
が使えます。
設定例 ) Require forward-dns test.example.jp
test.example.jp のIPアドレスで制限をかける事が可能です。

WEBコンテンツで、一部の人にしか見せたくない、自分(管理者)だけしか見せたくない、アクセスさせたくないコンテンツが
あります。
特定の人だと、ユーザー/パスワード 認証とか、クライアント証明書による認証とかになると思うのですが、
IPアドレスレベルで良いと言った場合に、

Apacheの場合は、
<Directory "/var/www/html/secret">
    Options hogehoge
    AllowOverride foo
    Require ip 192.168.1.1
    Require host test.example.jp
</Diredctory>
Require ipRequire host 制限を書いてきました。

でも、アクセス元IPアドレスが動的IP(プロバイダからのグローバルIP配布)の場合は、
Require host は使えないのですよね。
例えば、上記のように、DDNSを利用し test.example.jp を指定すると、Apacheは
test.example.jp のIPアドレスをチェック。
そのIPアドレスの逆引きが、test.example.jpになるかチェックして、逆引きまでOKなら許可とします。

つまり、アクセス元IPアドレスは、DDNSを使ってAレコード test.example.jp を登録していても、
プロバイダが所持しているグローバルIPの逆引きまでは設定出来ないので、事実上、Require host は使えない。
※ 静的グローバルIPアドレスを所持/貸与されており、DNS逆引き設定まで可能な場合は問題ありません。

ですので、ブロードバンドルータはほとんど電源OFFしないので、動的IPアドレスがあまり変わらないから、
Require ip xxx.xxx.xxx.xxx
で書いていたのですが、たまにルーターがフリーズして再起動を余儀なくされたりします。
その度にapacheの設定変更してました。
たまに、なんとかならんか・・・と思って、googleんだけど、

(方法1)
/etc/hosts に逆引きホストを書けば良い。動的IPが変わったら、/etc/hosts を自動updateされるよう、スクリプトを組む

(方法2)
CGIなら、(Apacheではなく)CGI側でアクセスコントールを行うように改修する

とかで、これらの手間を考えたら、棚上げ状態だったのですが。

運よく、Require forward-dns を使えばDDNSの人でも、アクセス制限可能との事。
バージョン 2.4.19で実装 って、かなり前からあったんだ。。。。
https://httpd.apache.org/docs/2.4/mod/mod_authz_host.html

今まで調べても、「これだ!」という解決法に辿りつけなかったのだが、「Require forward-dns」で検索したら、
一発だもん。
いや~。情報社会でこのような解決法に辿り着くには、つくづくgoogleの検索キーワード次第ですね。

早速、うちのコンテンツに実装しったた。

タグ

関連エントリー