インターネットからのアクセスを制御するセキュリティ設定

テストサーバーを外部(インターネット)からアクセスされないようにする方法について説明します。

独学!未経験からWebデザイナーになる!! > テクニカルノート > テスト用Webサーバーの設定 > 外部からのアクセスを制限する

外部からのアクセスを制限する

インターネットで公開されているWebサーバーは、不特定多数からリクエストを受け付け、レスポンスを返すのが仕事です。しかし、学習目的用のテストサーバーにおいては、正常にアクセスできるのは自分だけで十分です。万が一にもインターネットを通じて不特定多数から自由にファイルが閲覧できてしまうことがあっては問題ですからね。

したがってテスト環境においては、適切な設定をすることにより、インターネットからのアクセスを遮断しなければなりません。多くの環境では、ルータやファイアウォールにてブロックされるようになっていることが多いとは思いますが、念のため設定しておきましょう。

ここでは、Apacheの設定ファイルであるhttpd.confを修正することにより、外部からアクセスされないようにする方法をご紹介します。httpd.confについてわからない方は、このカテゴリTOP、Webサーバーの設定ページに記載していますのでそちらを先にご覧ください。

当サイトに記載されているものは、全て学習目的のローカルテストサーバー向けです。その他の用途には適切でない可能性もありますのでご注意下さい。

外部からのアクセスを制限する設定方法

ここでは二つの方法をご紹介します。一つ目の方が簡単ですが、二つ目の方が(ちょっと難しいですが)より利便性が高い方法です。お好みの方で設定してみてください。

MAMPをお使いの方

MAMPをお使いの方は、方法1はトラブルのもとになる場合があるので推奨しません。方法2の、[ Order,Deny,Allowディレクティブを修正する ]の方をお試しください。

方法1-Listen ディレクティブを修正する

httpd.conf内に、下記のように表記されている部分があると思います。

Listen 80

これを、以下のように変更します。赤い文字が追加する部分です。
(かならず半角で入力してください)

#Listen 80
Listen 127.0.0.1:80

[ # ] をつけることで、初期状態をコメントアウト(無効化)して、新しい設定をしているという訳です。

この設定により、このサーバは、127.0.0.1、つまりローカルPCでなければアクセスできないようになります。

IPv6環境の方

本ページではローカルのIPアドレスを127.0.0.1として書いていますが、IPv6環境の方等は、127.0.0.1を::1に読み替えて実行していただくと、うまくいく場合があるようです(以後の解説でも同様)。コメントにて教えていただきました。ありがとうございます!

方法2- Order,Deny,Allowディレクティブを修正する

方法1は非常に簡単でしたね。PCを1台でお使いの方には簡単なのでいいでしょう。しかし方法1は、LAN上にある別のPCからの接続をも拒否してしまうため、複数のPCを使う環境では不便なこともあります。Webデザインの学習中はブラウザの表示チェックをよくしますから、複数のPCをお持ちの方は、同一LAN上にある別PCでも表示チェックできた方が便利ですよね。その場合にふさわしい設定案をご紹介します。

まず、下記のようにDocumentRoot~と記載されている部分を見つけてください。(グレー部分、D:/wwwは、お使いの環境によって異なります。)

DocumentRoot "D:/www"

上記グレー部分はドキュメントルート(http://localhost/でアクセスできるディレクトリ)のことです。このグレー部分のファイルパスを覚えておいてください。見つかったら、先ほどのファイルパスと同様のパスが記載されている、下記のような部分を見つけます。(以後DocumentRootが、D:/wwwだとして記載します。この部分は各自DocumentRootの設定に読みかえてください)

<Directory "D:/www">


  ~中略~


</Directory>

さて、見つかりましたか?該当部分をよ~く見ると、下記の太字部分のような感じに記載されている部分があるかもしれません。

<Directory "D:/www">


  ~中略~
  Order Allow,Deny
  Allow from all


</Directory>

上記太字部分が今回のキモです。この部分は多少異なるかもしれませんが、もしあれば、これを下記のようにします。無ければ、#を除いた赤字部分を該当部分に書き足してください。

<Directory "D:/www">


  ~中略~
  #Order Allow,Deny
  #Allow from all
  Order Deny,Allow
  Deny from all
  Allow from localhost 127.0.0.1
  Allow from 192.168


</Directory>

※11/07/26補足
環境によっては、Allow fromの部分を下記のように一つずつ設定しないと動かない場合もあるようです。もし 動かない場合は、下記もお試しください。
Allow from localhost
Allow from 127.0.0.1
Allow from 192.168

192.168とある部分は、プライベートIPアドレスの不変部分を指しています。プライベートIPアドレスはこれ以外にも考えられますが、通常のご家庭ではこれがほとんどでしょう。(もしこれ以外のプライベートIPをお使いであれば、ネットワークの管理者に尋ねてみてください)

個別IPでも指定できます。

上記設定では192.168からはじまるIPからのアクセスは全て受け入れますが、プライベートIPアドレスで予約されているIPなので、通常は問題ないでしょう。ただし万一特別な事情があり不都合が生じる場合は、Allow from 192.168の部分を、フルのプライベートIPアドレスで指定してもかまいません。

半角スペースで区切れば、複数指定することも可能です。
(例:
Allow from 192.168.1.2 192.168.1.3 192.168.1.4
※補足 もしうまくいかない場合は、一行ずつ指定してみてください。

これだけでもテスト用には大抵大丈夫でしょうが、今回設定した部分以外の、下記のような形式の部分全てを下記のようにしておくとさらに確実です。

<Directory ["ファイルパス・またはスラッシュ"]>


  ~中略~
  Order Deny,Allow
  Deny from all


</Directory>

↓もし参考になりましたら、シェアしていただけると嬉しいです(^-^)

12/06/30 facebookページ開設しました。RSS代わりにも使いたいと思います。

コメント

けいた さん 2010年10月02日17時28分
プライベートipアドレスを打ち込むそうですが、192.168だけで良いのですか?
その後も数字が続いている場合、それも打ち込むのですか?
馬場誠 さん 2010年10月03日16時38分
192.168から始まるIPアドレスが設定対象になるという意味ですので、192.168だけで大丈夫です。

もちろん、下記のように、個別のフルIPアドレスを指定しても大丈夫ですよ。
Allow from 192.168.1.2 192.168.1.3

ただしこちらは、自動的にプライベートIPアドレスが割り当てられるようにしている場合、いつのまにかプライベートIPアドレスが変わってしまい、再設定が必要になることがあります。
それが面倒な場合は、プライベートIPアドレスを固定にするなどの対策をするのもいいかもしれませんね。
momo さん 2011年05月16日17時06分
はじめまして。

osx6にmamp1.9.6.1を入れてみたんですが、 アクセス権限の管理を
”方法2- Order,Deny,Allowディレクティブを修正する”で修正し、mampを再起動したところ、どういう訳か、mysqlサーバーが起動しません。

元に戻すと起動します。 当方初心者でして、何が何だかわからない状態でして、申し訳ありません。解決方法等アドバイスをいただけたら、幸いです。
馬場誠 さん 2011年05月16日20時44分
momoさん、はじめまして。

Apacheは起動するけれど、MySQLのみ起動しないということですよね。
こちらの環境(1.7.1)で確認してみたところ、特に問題は発生しませんでした。

ただし、他の環境のMAMP(1.9系だと思います)をさわった際、MySQLが立ち上がらなくなることは目にしたことがあります。
外部からのアクセスを制限するような設定をしていない状態だったので、もともと不具合がある(?)のかもしれません。

立て込んでいて今すぐには確認できないのですが、近日中に最新バージョンのMAMPでも確認してみますね。
馬場誠 さん 2011年05月17日20時12分
今日、MAMPの1.9.6.1を入れて試してみました。

インストールしてすぐの状態で、方法2の修正をして起動させてみたところ、問題なくMySQLも起動しました。

しかし、その後ApacheとMySQLのポートをそれぞれ標準ポートに変更してから起動させようとしたら、MySQLが起動しなくなる現象が発生しました。
あれこれいじってみましたが原因不明だったので、OSを再起動させたところ、無事MySQLも起動するようになりました。

同じ原因かは分かりませんが、まだOSを再起動させていなければ試してみてはいかがでしょうか。

他には、過去にMySQLをインストールされたことがあれば、残っているファイルが影響を与える可能性もあるようです。
Kichi さん 2011年10月02日19時53分
はじめまして。

7月からwebの勉強を始めたばかりの者です。
PHPの勉強の為にMAMPをDLし、設定を参考とさせていただいてます。

MAMP利用の為、方法2を試しているのですが、apache2フォルダ内のhttpd.confファイルは見つかったのですが、その中に記載されている下記文章が見つかりません。

<Directory "D:/www">
  ~中略~
</Directory>


<Directory "/Library/WebServer/CGI-Executables">
    AllowOverride None
    Options None
    Order allow,deny
    Allow from all
</Directory>

上記の内容か

<Directory "/Library/WebServer/Documents">
〜中略〜

 Order allow,deny
    Allow from all

</Directory>

上記内容ならあるのですが…。

見ているファイルが違っている可能性などあるのでしょうか?

馬場誠 さん 2011年10月03日19時14分
Kichi さん、はじめまして。

httpd.confファイルですが、元もとMac OS XにインストールされているApacheのhttpd.confをご覧になっていませんでしょうか。

MAMP利用の際に編集するhttpd.confは、MAMP内のhttpd.confです。

× /private/etc/apache2/httpd.conf
○ /Applications/MAMP/conf/apache/httpd.conf


私の手元のMAMPだと、DocumentRootが初期設定で/Applications/MAMP/htdocsとなっていました。もし同様の場合は、下記のような場所を探してみてください。

<Directory "/Applications/MAMP/htdocs">
  ~中略~
</Directory>
元アフロ さん 2012年02月08日18時21分
馬場さん、はじめまして。

馬場さんの紹介されていたHTML,CSSの書籍を使って学習を始めました。
HTML,CSSは比較的超初心者でも入りやすく、イメージしていた形に少しずつですがが近づいていくのが楽しくて、没頭しています。
(まだまだ無駄が多く、無様なコーディングですが...(^^))

少し慣れ始めたところでphp,mySQL等の勉強も並行して進めていこうと思い、MAMPにたどり着きました。

質問の内容ですが、
アクセス権限の変更後、Apacheのみ起動しません。
{流れ}
 MAMP(1.9.6)インストール
 ↓
 MANP起動 (どちらも正常に起動)
 ↓
 アクセス権限変更 (変更後MAMP→OS再起動済み→MySQLのみ起動)
 
変更後の記述 {ファイル名:/Applications/MAMP/conf/httpd.conf}

DocumentRoot "/Applications/MAMP/htdocs"

 〜中略〜

<Directory "/Applications/MAMP/htdocs">

 〜中略〜
  #Order allow,deny
  #Allow from all
  Order Deny,Allow
  Deny from all
  Allow from localhost 127.0.0.1
  Allow from 192.168
</Directory>                      

自分はOS X (10.4.11)で、
Apacheはmacに標準装備されているらしいのですが触った事はありません。
過去にMySQL,php等をインストールした事もありません。
まだ仕組み的なものの理解が乏しいのでイージーミスをしている可能性があると思い一連の流れと変更内容を記述させて頂きました。
少し長文になってしまいましてすいません。

原因としては何が考えられるのでしょうか?
馬場誠 さん 2012年02月08日19時57分
元アフロさん、はじめまして。

楽しく学習されていらっしゃるとのこと、とてもよいことだと思います。本も役立っているようでなによりです(^-^)

MAMPインストール後、一度はApacheの起動も確認されているようですので、httpd.confの修正が影響している可能性が高いかもしれません。
(見たところは問題なさそうなのですけれど)

ですので、まずはhttpd.confを修正前に戻してみるといいと思います。
手作業で戻すのもいいのですが、手作業では思いもよらないタイプミス等が原因の場合、とても発見しづらいです。

もし変更前のバックアップをお取りであれば、そのファイルと置きかえ。もし無ければ、インストールしたばかりであれば再インストールしてしまった方が早い場合も多いと思います。
元アフロ さん 2012年02月09日18時25分
馬場さんこんばんわ。
返信ありがとうございました。

アクセス権限変更後にApacheが起動しなくなった件ですが、
httpp.confのバックアップをとっていたので置き換えてみました。
結果、どちらも起動しなくなってしまいました。

置き換えた後、元のファイルは捨ててしまったんですがそれの影響も考えられますか?

この際、再インストールした方が早いでしょうか??
馬場誠 さん 2012年02月09日20時57分
元アフロさん、こんばんは。

元のhttpd.confは削除して、現在はバックアップから復元したhttpd.confが配置されているということですよね。そうであれば、元のhttpd.confは不要です

ApacheとMySQLは別のアプリですので、httpd.confの設定はMySQLの動作に影響を与えないと思われます(私もたまにMAMPでhttpd.confの文法エラーをやらかしますが、MySQLは起動します)。

MAMPはもともとMySQLが起動しなくなる不具合(?)もあるので、それが原因なのかもしれません。

論理的に考えると、「Apacheの初回起動成功時」~「初めて起動しなくなった時」の間のどこかに何かがあった。もしくはMAMPの不具合のどちらかだと思います。エラーログを見たり、構文エラーをかけたりして調査もできるでしょうけれど、なれないと大変です。

いろいろとカスタマイズした後だと再インストールも面倒ですが、インストールしたてのようですし、再インストールの方が断然簡単だと思います。
名無し さん 2015年05月11日13時22分
外部公開する方法の設定はありますでしょうか?
馬場誠 さん 2015年05月11日21時07分
外部に公開することももちろんできるのですが、当サイトの趣旨と異なってしまうので、大変恐縮ですがご紹介していません。お役に立てず、申し訳ありません。

ですが検索すれば、すでにたくさんのサイトで方法が紹介されていると思います。ただ、セキュリティの設定が極めて重要なので、1つのサイトを鵜呑みにせずに、複数の解説サイトをご覧になることをお勧めします。

ちなみに、私も同様のことを考えたこともありますが、結局レンタルサーバーの方が安くつく&安定しているのであきらめました(汗)
kottekotte さん 2017年02月24日10時29分
馬場さん、はじめまして
kottekotteと申します。

記事を拝見させていただき、勉強になりました。
ただ自分の環境でうまく動作せず、うまくいった方法がありましたので、この設定でも問題ないのか不安で質問させていただきます。

環境:windows10 xampp for windows 5.6.28


■うまくいった方法
  Order Deny,Allow
  Deny from all
  Allow from ::1


上記の設定でうまく動作しているのですが、こちらでも問題ないのでしょうか?
何か懸念点等ございましたら、ご指導のほどよろしくお願いいたします。
馬場誠 さん 2017年02月24日18時04分
kottekotteさん、はじめまして。

IPv4では自身のマシンを指すのに「127.0.0.1」が使われますが、IPv6においては「::1」が使われます。

つまりは、ご自分のPCからのみのアクセスにされたい場合、こちらの設定で問題無いと思います。

情報、ありがとうございます!
本ページ内にも補足として入れておきました☆
藤本 邦夫 さん 2017年08月24日09時36分
アクセス制限についてお伺いします。
レンタルサーバーにおいて、アクセスを一台のパソコンに制限するアクセス制限は可能なのですか?
パソコン1台に制限することができないのであれば、パソコン一台だけににアクセスを制限させる方法を教えてください。
馬場誠 さん 2017年08月25日09時26分
藤本さん、こんにちは。

Apacheの機能で、“1台のPCだけ確実に”、というのはおそらくできないと思います。
ただ、レンタルサーバーでということですから、セキュリティ上の理由で他者に閲覧されたくないということでしょうか。これはWeb制作の実務でもよくあります。

確実に1台のPCとは言えませんが、IPアドレスや特定のホストで制限をかけることで、実質的に近いことは可能です。


例えば、下記のような形式で、「xxx.xxx.xxx.xx」を特定のIPアドレスにすれば、そのIPアドレス以外からはアクセスできません。

Order Deny,Allow
Deny from all
Allow from xxx.xxx.xxx.xx

注意点としては、同一ネットワーク=同じIPアドレスのPCではアクセス可能なことです。例えば、自宅ならLANで繋がっているPC等です。これでも、家族にも絶対にアクセスされたくないという場合を除き、十分セキュリティは高められます。

ただし、インターネット環境が固定IPアドレスならIPアドレスが変わりませんのでいいのですが、そうでない場合は定期的にIPアドレスは自然に変わります。したがって、Allow from xxx.xxx.xxx.xxの部分は閲覧終了後に削除して全アクセスをいったん拒否し、再度閲覧時時にピンポイントでIPを追加する方がよりセキュアです。

また、
Allow from xxx.xxx.xxx.xx
の部分を、
Allow from nttkyo123456789.tkyo.nt.ngn.ppp.infoweb.ne.jp
の用にホストで制限もできますが、IPアドレスと同様に同一ホストでアクセスができるため、注意が必要です。


結論としては、最初の通り1台のPCとはいきませんが、簡単で現実的なアクセス制限方法として実務でも使われています。これ以上のセキュリティを求めるなら、パスワード認証を併用する等でしょうね。
テクニカルノート
環境環境のインストール
Apacheのインストール for Windows
XAMPPのインストール for Windows
MAMPのインストール for Mac
Perl(ActivePerl)のインストール for Windows
PHPのインストール for Windows
MySQLのインストール for Windows
PostgreSQLのインストール for Windows
テスト用Webサーバーの設定
├外部からのアクセスを制限する
ドキュメントルートを変更する
バーチャルホストを設定する
.htaccessを有効にする
CGIを有効にする
.htaccessの設定
エラーページを指定する
特定のファイル・ディレクトリのアクセスを拒否する
簡易的なユーザ認証をする