mixhostを使い始めてはや1年、まぁいろいろあっていろいろ悩みましたが、結局先日2年目の契約更新しました。
この1年間でいろいろありましたが、その中でひとつを記事に。
mixhostを契約すると初期ドメインがもらえますね。
「○○○.mixh.jp」というドメインになり、「○○○」の部分はあなたのサーバーIDになります。
この初期ドメインをブラウザで見ると・・・なんとmixhostに登録しているドメインが丸見えになっちゃいます!
これ、どうするの???というお話しです。
独自ドメインが丸裸!これ、どうするの?
mixhostは運用ドメインが丸裸!
mixhostに限ったことではありませんが、あなたが運用している独自ドメインが丸裸になっているかもしれません!
あなたのサーバーIDのURLをブラウザに入れてみてください。
たとえばですが、私のmixhostでのサーバーIDが「kotonoha.mixh.jp」だったとします(違いますけど・・・)。
この画面が出なかったら、あなたが使っているサーバーはこの記事の対象外です。
この画面が出たら要注意!
フォルダの一覧はそのままサーバーに登録しているドメイン名になっていることにお気づきでしょうか?
エックスサーバーだとどうなる?
おなじことをエックスサーバーでやってみましょう。
私のエックスサーバーのサーバーIDが「kotonoha.xsrv.jp」だとします(違いますけど・・・)。
すると、このように「ここにコンテンツはありませんよ!」という趣旨のメッセージが返ってきます。
ドメインだけじゃない!
このように、「丸裸」で見えてしまうのはサーバーIDを指定した場合だけじゃありません。
たとえば、ブログの中に特定のディレクトリを作ってそこにドキュメントを保管していたとします。この場合、さらに「どうせブログからリンク張ってないから見る人いないよね」と思っても、たまたまURLを入れられると見えてしまいます。
なぜこうなる?
デフォルトコンテンツの存在
ウェブサーバーでは「デフォルトコンテンツ」という考えがあります。
これは、ファイル名を指定しないでディレクトリ名だけでブラウザを見た場合に、どのファイル名(拡張子)を表示するのか?という考えです。
一般的には「index.html」とか「index.htm」などのファイル名がデフォルトコンテンツとして定義してあり、ブラウザでファイル名(ページ名)を指定しない場合にはウェブサーバーは自動的にデフォルトコンテンツをブラウザへ返します。
デフォルトコンテンツのないディレクトリ
では、デフォルトコンテンツのないディレクトリの場合、ウェブサーバーはどのような動作をするのでしょうか?
この場合の動作の指示は、これもウェブサーバーの定義ファイルに定義されています。
一般的には「httpd.conf」などの定義ファイルに定義していきますが、まず以下の定義内容を見てください。
ウェブサーバー全体の定義
/* httpd.conf */ Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all
※2行目の「Indexes」に注目
この2行目の「Options」ではウェブサーバーがデフォルトコンテンツのないディレクトリ(URL)の場合に行うべき動作を定義していて、「Indexes」という指定により「デフォルトコンテンツの存在しないディレクトリ(URL)の場合には、ディレクトリを”Index Of”する、という定義になります。
“Index Of”するとは、mixhostのサーバーIDをブラウザで見た時のように、ディレクトリを一覧表示する、ということです。
この「Options Indexes」の指定がある以上、サーバーIDを入力した場合にディレクトリ(独自ドメイン)が見えてしまうのは当然の動作です。
この動作は正常なの?
一般的にはディレクトリの中身が丸見えになってしまうのはセキュリティ上好ましくない、と考えられています。
よって、通常は定義ファイルのOptions行から「Indexes」は削除するのが好ましい、と考えられます。
ただし、これはレンタルサーバー各社のセキュリティポリシー(セキュリティへの考え方)によるので、「Indexes」を削除するかしないかはレンタルサーバー各社の考え方次第であり、mixhostでは削除していないということになります。
対処法は?
デフォルトコンテンツを置く
このように、mixhostでサーバーIDを見た場合に独自ドメインが丸裸になるのは、そのディレクトリにデフォルトコンテンツがないからです。
デフォルトコンテンツ(index.html)が存在すれば、そのファイルがブラウザへ表示されるのでディレクトリの中身(所有する独自ドメイン)が丸裸になることはありません。
では、mixhostのサーバーIDディレクトリ「public_html」に「index.html」というダミーファイルを置いてみましょう。
これはダミーファイルですよ!
ウェブサーバー定義を変更する
いちいちデフォルトコンテンツをディレクトリごとに置きたくのが面倒、という方もいらっしゃるでしょう。
その場合にはウェブサーバーの定義を変更して「Indexes」の定義を削除して上げる必要があります。
ですが、ウェブサーバーの定義はサーバー全体での定義であり、利用者が変更することはできません。
しかし、ウェブサーバーによっては個別にウェブサーバー定義を初期値から変更することができます。
「個別に変更」する場合には、全体での定義を打ち消す定義を「.htaccess」に記述します。
たとえば「Indexes」の定義の自分だけ削除したい場合、自分の環境の「.htaccess」に「-Indexes」を定義することで、自分の環境においては「Indexes」定義を打ち消す(削除する)ことができるわけです。
このやり方ができるかどうか、もレンタルサーバーによって変わってきます。
さくらサーバーなどでは個人の環境での「.htaccess」による定義打消しは許可されていないようですが、mixhostではどうやら許可されているようです。
では私のサーバーIDのディレクトリ「kotonoha.mixh.jp」の「.htaccess」にIndexesを打ち消す定義を入れてみます。
FTPソフトでmixhostのサーバー内「public_html」ディレクトリ直下にある「.htaccess」を編集します。
「public_html」直下の「.htaccess」の先頭行に次の一文を入力します。
Options -Indexes
「.htaccess」の編集が終わったら、ブラウザでサーバーIDにアクセスしてみましょう。
私の場合はサーバーIDは「kotonoha.mixh.jp」です(違うけど)。
するとどうでしょう!
今まではディレクトリ名(つまり、登録しているドメイン名)が見えていたのに、今度は「403エラー」の画面となります。
ディレクトリ直下にデフォルトコンテンツ(index.htmlなど)が無い場合、mixhostではサーバー全体の定義として「IndexOf」が有効となっており、ディレクトリ一覧(つまり登録ドメイン一覧)が表示されていましたが、自分のサーバーID直下(public_html直下)の「.htaccess」に「IndexOf」を打ち消す定義「Options -Indexes」を記述することで、403エラーを返す定義となりました。
どうやら、mixhostではさくらサーバーと違って、サーバー全体定義の一部を個別に打ち消す定義ができるようです。
これにより、偶然にもサーバーIDを狙われてブラウザアクセスされた場合でも、mixhostで運用しているサイトがばれなくなります。
まとめ
mixhostで運用している、とある有名ブログのサーバーIDがブログ名となっていた時期がありました。
「ブログ名.mixh.jp」でブラウザで見ると、その方がmixhostで運用している他のサイトも丸見えになっていました。
現在は本記事と同様、「403エラー」を返すように対応済となっています。
偶然に、であったとしても、わかりやすいサーバーIDを設定している場合には他の運用サイト(登録ドメイン)を見られてしまう可能性があります。
mixhostで複数ドメインの運用をする場合には、本記事で紹介した2つの対応策をとり、登録ドメインを見られないようにした方が良いでしょう。