自分が管理するウェブサイトに対して、知らないドメインのDNSが向けられたときに、

知らないドメインからのアクセスを防ぐ方法はありますか?ウェブサーバーはApacheです。

【例】
自分が管理するドメイン example.com
自分が管理するサーバー 123.456.123.456
他人が管理するドメイン unknown.com
とし、現在example.comでもunknown.comでも
123.456.123.456の内容が表示されるとします。
これをexample.comでアクセスしたときは正しく表示し、
unknown.comでアクセスしたときははじくようにしたいです。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2011/09/02 12:53:35
  • 終了:2011/09/05 11:57:08

ベストアンサー

id:studiocherry No.1

studiocherry回答回数271ベストアンサー獲得回数962011/09/02 23:12:35

Apache であれば、ネームバーチャルホストが有効になっている場合に、設定されてないホスト名で、アクセスされた場合は、一番最初に記載されている VirtualHost 設定が、デフォルトとして、使われます。

これを利用して、一番最初の VirtualHost 設定で、すべてのアクセスを Deny するように設定したら 実現できるんじゃないかと思います。

なお、deny で、アクセス拒否された場合、403 Error になったと思います。

http://httpd.apache.org/docs/2.1/ja/vhosts/name-based.html


以下、設定例;

NameVirtualHost 123.456.123.456:80

<VirtualHost *:80>

# デフォルト設定

# すべての URI を 拒否。

ServerAdmin webmaster@example.com

DocumentRoot "/usr/local/apache/htdocs/"

ServerName 123.456.123.456

ErrorLog "logs/error_log"

CustomLog "logs/access_log" common

<Location /*>

Order allow,deny

Deny from all

</Location>

</VirtualHost>


<VirtualHost *:80>

# www.example.com の設定

ServerAdmin webmaster@example.com

DocumentRoot "/usr/local/apache/htdocs/"

ServerName www.example.com

ServerAlias example.com

ErrorLog "logs/error_log"

CustomLog "logs/access_log" common

</VirtualHost>

id:shinwa-tokyo

ご回答ありがとうございます。

早速、教えていただいた方法を試してみましたが、

_default_ VirtualHost overlap on port 80, the first has precedence

というエラーがでて、最初のバーチャルホスト設定が優先されてしまうようです。(Apache Ver2.2.3)

リンク先のページでは、同じポートに複数のバーチャルホストを設定しても問題なさそうですので、なぜエラーが起きたのかもう少し原因を探ってみます。

2011/09/03 11:35:26
  • id:studiocherry
    [warn] _default_ VirtualHost overlap on port 80, the first has precedence
    のエラーということは、バーチャルホストの設定が、重複しているという警告ですね。


    apachectl -S を実行すると すべてのバーチャルホストが、リストで、表示されますが、この中に 同じドメインの行が、あったりしないでしょうか?

    うちのサーバでは、以下の様に表示されました。

    # apachectl -S <-- コマンドラインからの入力 (必要に応じてパスを追加してください)

    VirtualHost configuration:
    192.168.11.15:80 is a NameVirtualHost
    default server 192.168.11.15 (/usr/local/apache/conf/extra/httpd-vhosts.conf:90)
    port 80 namevhost 192.168.11.15 (/usr/local/apache/conf/extra/httpd-vhosts.conf:90)
    port 80 namevhost www.example.co.jp (/usr/local/apache/conf/extra/httpd-vhosts.conf:97)
    port 80 namevhost www.example.jp (/usr/local/apache/conf/extra/httpd-vhosts.conf:107)
    port 80 namevhost www.example.com (/usr/local/apache/conf/extra/httpd-vhosts.conf:118)
    port 80 namevhost www.example.net (/usr/local/apache/conf/extra/httpd-vhosts.conf:131)
    port 80 namevhost www.example.ne.jp (/usr/local/apache/conf/extra/httpd-vhosts.conf:155)
    Syntax OK


    この状態で、192.168.11.15 のバーチャルホストに deny 設定を加えて、クライアントの /etc/hosts にドメインを追加して、ドメインで、アクセスしてみたところ、正しく拒否できる様でした。

  • id:shinwa-tokyo
    コメントありがとうございます。
    問題はNameVirtualHostの設定でした。
    NameVirtualHostの設定を修正したら、
    問題なくApacheを起動でき、
    他のドメインからのアクセスを拒絶できました。

    このたびはありがとうございました。
    いろいろ勉強になりました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません