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

近代的なPHP開発を行うために

おススメ!記事
Raspberry Pi 用「HAL」で、
カップラーメン・タイマーを作ってみよう!
ラズパイDIYの決定版! ソケットサーバー「HAL」をご紹介します。

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

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

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

XAMPPのセキュリティ

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

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

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

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

MariaDBのrootパスワード変更

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

altテキスト

altテキスト

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

mysqladmin -u root password

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

altテキスト

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

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

altテキスト

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

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

altテキスト

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

Apacheのアクセス制限

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

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

altテキスト

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

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のコントロールパネルでサーバーを起動しておいてください。

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

altテキスト

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

altテキスト

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

altテキスト

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

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

http://localhost/phpmyadmin

にアクセスします。

altテキスト

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

altテキスト

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

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

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

Apacheのアクセス制限

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

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

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

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

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

<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の<Directory "/Applications/MAMP/bin/phpMyAdmin">ディレクティブでアクセス制限をしておかないと、他のパソコンから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でサーバーを再起動すると設定が反映されます。インターネットにサーバーを公開する場合は他にも様々な設定をする必要があるでしょう。

この記事へのコメント

※現在コメントはMarkdown記法が強制です。>>Markdown の書き方


この記事に返信

このコメントに返信