各種サーバをインストールして起動すると、そのままでは外部の第三者がアクセス可能になる場合があります。

ここれは、XAMPPとMAMPにおいて、最低限のセキュリティ設定をして自分以外がサーバにアクセス出来ないようにする方法を学びましょう。

※この記事は執筆・公開から3年以上経過しています。記事の情報が古くなっている場合がありますのでご注意ください。

公開日時:2016/02/07 15:52
最終更新:2019/12/09 22:15

開発環境のセキュリティ~ 365日の紙PHP(3日目)

XAMPPもMAMPも、デフォルトではサーバーが公開されています。たとえばカフェなどの公衆無線LANに接続していると、ほかのパソコンからXAMPPやMAMPPのWEBサーバーにアクセスできてしまいかねません。

ですから、自分のパソコンからしかアクセスできないようにアクセス制限をかけておいた方が良いでしょう。

アクセス制限する方法はいくつかあるのですが、できるだけ簡単そうな手順を説明します。

XAMPPのセキュリティ

さて、ではXAMPPのセキュリティについて設定していきましょう。

実はXAMPPのセキュリティについて、2015年の半ばから大きな変更がなされています。以前のXAMPPではセキュリティについての設定画面があり、そこで簡単に設定ができたのですが、現在のバージョンではそれが無くなってしまいました。

どうも大幅な仕様変更を行おうとしているようで、現在はその過渡期で対応が行き届いていないようです。

しばらくは古いバージョンのXAMPPを利用するという手段もありますが、このコーナーでは現行バージョンでの対応をしていきたいと思います。

MariaDBのrootパスワード変更

まず、MariaDBのrootアカウントにパスワードを設定しましょう。XAMPPのコントロールパネルからShellを起動します。

XAMPPコントロールパネル

shell画面

では、rootのパスワードを変更します。

mysqladmin -u root password

と入力して下さい。パスワードの入力を求められます。強固なパスワードを設定しましょう(設定したパスワードは忘れないようにしてください)。

MariaDBルートパスワードの設定

パスワードを入力すると、確認用にもう一度パスワードを求められます。最初に入力したパスワードと確認用のパスワードが一致していれば、rootのパスワードの変更が行われます。

MariaDBのルートのパスワードを変更したので、phpMyAdminでの接続用のパスワードも変更します。XAMPPをインストールしたディレクトリ内のphpMyAdminディレクトリ内、config.inc.phpを開きます。

phpmyadminの設定ファイル

ファイルの上部に以下のようなコードがありますので、ここにパスワードを入力して下さい。

$cfg['Servers'][$i]['password'] = '';

新規パスワードの設定

これでデータベースに関する設定は終了です。

Apacheのアクセス制限

次はApacheの設定を行います。当面、Apacheには外部からアクセス出来ないようにしたいと思います。

XAMPPのコントロールパネルのApacheの行にあるConfigをクリックし、開いたメニューから「Apache(httpd.conf)」を選択します。httpd.confはApacheの設定ファイルです。

Apacheのアクセス制限

エディタで、以下のような行を探して下さい。

Listen 80

これは、80番ポートへのアクセスを待ち受けるという意味です。これを以下のように書き換えて下さい。

#Listen 80
Listen 127.0.0.1:80

#は以下の文章をコメントアウトしています。127.0.0.1というのはループバック IP アドレスで、自分自身を指します。これで、自分自身のパソコンからの80番ポートへのアクセスのみを待ち受ける、という意味になります。

書き換えたらhttpd.confを保存し、サーバーを再起動して下さい。これで、他のパソコンからのApacheへの接続を遮断できます。

セキュリティについては以上です。

MAMPのセキュリティ

MAC OS Xにはファイアウォール機能が装備されているので、これを有効にします。

MAMPのコントロールパネルでサーバーを起動しておいてください。

システム環境設定からセキュリティとプライバシーを選びます。

システム環境設定画面

ファイアーウォールタブを開きます。

ファイアーウォール設定画面

鍵をクリックして、ファイアーウォールを入にします。httpd(Apache)とmysqld(MySQL)への接続許可を求めるアラートが出ますので、両方許可してください。

サーバへの接続許可設定

なお、今は明らかに自分のコンピュータの接続であることがわかっているので許可しましたが、もし、おかしなタイミングで接続許可のアラートが出た時は危険なので拒否しましょう。

MySQLの不要なユーザーを削除

http://localhost/phpmyadmin

にアクセスします。

phpmyadminホーム画面

ユーザタブからroot@localhost以外のユーザを削除してしまいます。

不要なユーザーの削除

MAMPでインストールされたMySQLのroot@localhostのパスワードはデフォルトがrootです。これはよろしくないのですが、MAMPの場合パスワードの変更がやけに大変なようです。設定を間違えるとphpMyAdminでMySQLにアクセスすることができなくなってしまいます。

MySQLにアクセスできるユーザーはlocalhostからのrootユーザのみになっていますので、ひとまずはこのままにしたいと思います。

もしrootのパスワードを変更されたい方は[XOOPS]MAMPのヘルプにあった「mysqladmin」で正しくデータベースパスワードを変更する方法MAMP設定備忘録?MySQLのパスワード変更?等を参照されると良いかもしれません。

Apacheのアクセス制限

次はApacheの設定ファイルの編集です。

MAMPは設計の不備から、Listenで特定のIPアドレスからの接続だけに制限することができません。

ですので、 ディレクティブで制限をかけます。次の場所にあるhttpd.confをテキストエディタで開いてください。

/Applications/MAMP/conf/apache/httpd.conf

以下が ディレクティブの記述です。

<Directory "/Applications/MAMP/htdocs">
    #
    # Possible values for the Options directive are "None", "All",
    # or any combination of:
    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    #
    # Note that "MultiViews" must be named *explicitly* --- "Options All"
    # doesn't give it to you.
    #
    # The Options directive is both complicated and important.  Please see
    # http://httpd.apache.org/docs/2.2/mod/core.html#options
    # for more information.
    #
    Options All

    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   Options FileInfo AuthConfig Limit
    #
    AllowOverride All

    #
    # Controls who can get stuff from this server.
    #
    Order allow,deny
    Allow from all
    XSendFilePath "/Applications/MAMP/htdocs"
</Directory>

この最後の

    Order allow,deny
    Allow from all

は、許可→拒否の順序でアクセスを制限し、まず、全てのアクセスを許可する、という設定です。

これを、

    Order Deny,Allow
    Deny from all
    Allow from 127.0.0.1
    Allow from localhost

のように書き換えます。拒否>許可の順序でアクセスを制限し、まず全てを拒否、そして127.0.0.1とlocalhostからのアクセスだけを許可するという設定です。

また、

Options All

    #Options All
    Options -Indexes FollowSymLinks

のようにしてファイル一覧を表示しないようにするのが良いかと思います。

同様に他のDirectoryディレクティブも書き換えます。例えばphpMyAdminはApache経由でMySQLにアクセスします。ですから、Apacheのディレクティブでアクセス制限をしておかないと、他のパソコンからMySQLが操作されてしまうことになります。ディレクティブが沢山あって大変ですが、きちんと設定しておいてください。

    #
    # We include the /icons/ alias for FancyIndexed directory listings.  If you
    # do not use FancyIndexing, you may comment this out.
    #

    Alias /favicon.ico "/Applications/MAMP/bin/favicon.ico"

    Alias /icons/ "/Applications/MAMP/Library/icons/"

    <Directory "/Applications/MAMP/Library/icons">
        Options -Indexes MultiViews
        AllowOverride None
        #Order allow,deny
        #Allow from all
        Order Deny,Allow
        Deny from all
        Allow from 127.0.0.1
        Allow from localhost
    </Directory>

    Alias /phpMyAdmin "/Applications/MAMP/bin/phpMyAdmin"
    Alias /phpmyadmin "/Applications/MAMP/bin/phpMyAdmin"

    <Directory "/Applications/MAMP/bin/phpMyAdmin">
        Options -Indexes MultiViews
        AllowOverride None
        #Order allow,deny
        #Allow from all
        Order Deny,Allow
        Deny from all
        Allow from 127.0.0.1
        Allow from localhost
    </Directory>

    Alias /phpPgAdmin "/Applications/MAMP/bin/phpPgAdmin"
    Alias /phppgadmin "/Applications/MAMP/bin/phpPgAdmin"

    <Directory "/Applications/MAMP/bin/phpPgAdmin">
        Options -Indexes MultiViews
        AllowOverride None
        #Order allow,deny
        #Allow from all
        Order Deny,Allow
        Deny from all
        Allow from 127.0.0.1
        Allow from localhost
    </Directory>

    Alias /phpLiteAdmin "/Applications/MAMP/bin/phpLiteAdmin"
    Alias /phpliteadmin "/Applications/MAMP/bin/phpLiteAdmin"

    <Directory "/Applications/MAMP/bin/phpLiteAdmin">
        Options -Indexes MultiViews
        AllowOverride None
        #Order allow,deny
        #Allow from all
        Order Deny,Allow
        Deny from all
        Allow from 127.0.0.1
        Allow from localhost
    </Directory>

    Alias /SQLiteManager "/Applications/MAMP/bin/SQLiteManager"
    Alias /sqlitemanager "/Applications/MAMP/bin/SQLiteManager"

    <Directory "/Applications/MAMP/bin/SQLiteManager">
        Options -Indexes MultiViews
        AllowOverride None
        #Order allow,deny
        #Allow from all
        Order Deny,Allow
        Deny from all
        Allow from 127.0.0.1
        Allow from localhost
    </Directory>

    Alias /MAMP "/Applications/MAMP/bin/mamp"

    <Directory "/Applications/MAMP/bin/mamp">
        Options -Indexes MultiViews
        AllowOverride None
        #Order allow,deny
        #Allow from all
        Order Deny,Allow
        Deny from all
        Allow from 127.0.0.1
        Allow from localhost
    </Directory>

これでひとまずの設定は終了です。MAMPでサーバーを再起動すると設定が反映されます。インターネットにサーバーを公開する場合は他にも様々な設定をする必要があるでしょう。

記事リンク