KUSANAGIの導入後に推奨するセキュリティ対策について解説いたします。
1 wp-config.phpの安全性を高める
wp-config.phpはデータベースの接続情報だけでなく、認証用ユニークキーなど重要なセキュリティ情報も含んでいます。
そのためwp-config.phpファイルのセキュリティを向上させることは重要です。
1-1 wp-config.phpファイルを、ドキュメントルートと同じ階層に移動する
wp-config.phpはWordPressをインストールする際に、ドキュメントルート直下に生成されます。
外部からURLで直接ファイルにアクセスできなくするため、wp-config.phpをドキュメントルートの上の階層へ移動します。
※URLで指定してアクセスできない領域になります。
1-1-1 仮想マシンへのログイン
PoderosaなどのSSHクライアントやターミナルソフトを用い、SSHで仮想マシンにログインします。
ログインに使用するユーザー名:kusanagi
パスワードはkusanagi initコマンド実行時に設定したパスワードです。
Microsoft Azure の場合ログインに使用するユーザー名は「2-3 仮想マシンの構成(1)」で指定したユーザー名、パスワードです。
1-1-2 rootユーザーへの切り替え
次のように入力し、rootユーザーに切り替えます。
$ su -
パスワードを要求されるので、rootユーザーのパスワードを入力します。
※ rootユーザーのパスワードは各クラウドにて仮想マシンを作成した際に入力したパスワードです。
Microsoft Azure の場合次のように入力し、rootユーザーに切り替えます。
$ sudo su -
パスワードを要求されるので、SSHのログインに使用したユーザーのパスワードを入力します。
1-1-3 wp-config.phpが配置されているディレクトリへの移動
wp-config.phpが配置されているディレクトリへ移動します。
次のように入力します。
# cd /home/kusanagi/kusanagi_html(※1)/DocumentRoot
(※1)kusanagiプロビジョニングで作成したプロファイル名を入力します
1-1-4 wp-config.phpを一つ上の階層へ移動
wp-config.phpを一つ上の階層へ移動します。次のように入力します。
# mv wp-config.php ../
1-1-5 カレントディレクトリを1つ上の階層へ変更
1-1-4でwp-config.phpが正しく移動できているか確認するため、カレントディレクトリを1つ上の階層へ変更します。
次のように入力します。
# cd ..
1-1-6 wp-config.phpファイルの存在の確認
移動したディレクトリ内にwp-config.phpファイルが存在するか確認します。
次の様に入力し、移動したディレクトリ直下のファイル一覧を表示し、wp-config.phpが存在していることを確認します。
# ll
ファイルが存在してればファイルの移動は成功です。
1-1-7 サイトの表示確認
ブラウザで該当のサイトのURLへアクセスを行います。
サイトのTOPページが問題なく表示されていれば、wp-config.phpの移動後も問題なくWordPressが動作していることが確認できます。
1-2 パーミッションを制限的な値に設定する
KUSANAGIによるWordPressのインストールにおいては、wp-config.phpのオーナーはhttpd(グループはwww)、パーミッションの値はデフォルトでは666(rw-rw-rw-)と設定されています。
wp-config.phpのオーナーを変更し、パーミッションを可能な限り制限的な値を設定することでセキュリティを高めます。
※なお以下の手順は1-1にてwp-config.phpをインストールしたディレクトリより1つ上の階層に配置していることを前提に記載しています。
1-2-1 仮想マシンへのログイン
PoderosaなどのSSHクライアントやターミナルソフトを用い、SSHで仮想マシンにログインします。
1-2-2 rootユーザーへの切り替え
次のように入力し、rootユーザーに切り替えます。
$ su -
パスワードを要求されるので、rootユーザーのパスワードを入力します。
※ rootユーザーのパスワードは各クラウドにて仮想マシンを作成した際に入力したパスワードです。
Microsoft Azure の場合次のように入力し、rootユーザーに切り替えます。
$ sudo su -
パスワードを要求されるので、SSHのログインに使用したユーザーのパスワードを入力します。
1-2-3 wp-config.phpが配置されているディレクトリへ移動
次のように入力し、wp-config.phpが配置されているディレクトリへ移動します。
# cd /home/kusanagi/kusanagi_html(※1)
(※1)kusanagiプロビジョニングで作成したプロファイル名を入力します
1-2-4 wp-config.phpのオーナーを変更
次のように入力し、オーナーをWebサーバーからkusanagiユーザーへ変更します。
# chown kusanagi.www wp-config.php
1-2-5 wp-config.phpのパーミッションを変更
オーナーを変更したら、wp-config.phpのパーミッションを440(r-- r-- ---)にし、書き込みができないよう変更します。
次のように入力します。
# chmod 0440 wp-config.php
1-2-6 変更したパーミッションを確認
変更したwp-config.phpのパーミッションを確認します。次のように入力し、当該ディレクトリ直下のファイル一覧およびそのファイルのパーミッションを表示し、wp-config.phpのパーミッションを確認します。
# ll
wp-config.phpのパーミッションが「r-- r-- ---」となっていれば成功です。
1-2-7 サイトの表示確認
ブラウザで該当のサイトのURLへアクセスを行います。
サイトのTOPページが問題なく表示されていれば、wp-config.phpのパーミッション変更後も問題なくWordPressが動作していることが確認できます。
2 WordPressの管理画面に対してアクセス制限を行う
WordPressの管理画面へのアクセスに対し、ベーシック認証やIPによるアクセス制限を行い、第三者による不正ログインを防止します。
KUSANAGIには、NginxとApache、2種類のWebサーバーがインストールされており、切り替えて使用できるようになっています。どちらのWebサーバーを利用していても、正しく機能するよう設定を行います。
2-1 Nginxのアクセス許可IPアドレス設定
次のように入力し、Nginxのコンフィグファイルを開きます。
# vi /etc/nginx/conf.d/[プロファイル名(※1)]_http.conf
(※1)kusanagi provisionコマンドで作成したプロファイル名です。
例:vi /etc/nginx/conf.d/kusanagi_html_http.conf
43行目の
allow 0.0.0.0/0; を、許可したいIPアドレスに変更します。
例:allow xxx.xxx.xxx.xxx;
※ベーシック認証を使用しない場合は、46行目と47行目をコメントアウトしてください。(行頭に # を入力してください)
KUSANAGIでは kusanagi provision の際に SSL 領域のコンフィグファイルも作成しますので、以下の手順も必要です。
次のように入力し、Nginxのコンフィグファイルを開きます。
# vi /etc/nginx/conf.d/[プロファイル名(※1)]_ssl.conf
(※1)kusanagi provisionコマンドで作成したプロファイル名です。
例:vi /etc/nginx/conf.d/kusanagi_html_ssl.conf
54行目の
allow 0.0.0.0/0; を、許可したいIPアドレスに変更します。
例:allow xxx.xxx.xxx.xxx;
※ベーシック認証を使用しない場合は、57行目と58行目をコメントアウトしてください。(行頭に # を入力してください)
現在Nginxを利用していて、すぐに設定を反映させる場合は、kusanagi nginx コマンドを実行してください。
これにより、次回以降NginxがWebサーバーとして起動した際は、許可設定したIPアドレス以外からはベーシック認証によりWordPressの管理画面に直接アクセスできなくなります。
※ベーシック認証のユーザー名、パスワードを設定する.htpasswdファイルの設定については「2-3..htpasswdファイルの設定」を参照ください。
2-2 Apacheのアクセス許可IPアドレス設定
次のように入力し、ドキュメントルート上の.htaccessファイルを開きます。
# vi /home/kusanagi/[プロファイル名(※1)]/DocumentRoot/.htaccess
(※1)kusanagi provisionコマンドで作成したプロファイル名です。
例:vi /home/kusanagi/kusanagi_html/DocumentRoot/.htaccess
8行目の
Allow from all を、許可したいIPアドレスに変更します。
例:Allow from xxx.xxx.xxx.xxx
※ベーシック認証を使用しない場合は、10、11、12行目をコメントアウトしてください。(行頭に # を入力してください)
これにより、次回以降ApacheがWebサーバーとして起動した際は、許可設定したIPアドレス以外からはベーシック認証によりWordPressの管理画面に直接アクセスできなくなります。
※ベーシック認証のユーザー名、パスワードを設定する.htpasswdファイルの設定については「2-3..htpasswdファイルの設定」を参照ください。
2-3 .htpasswdファイルの作成、ユーザー名およびパスワードの設定
ベーシック認証のユーザー名、パスワードを設定する.htpasswdファイルを作成し、ユーザー名およびパスワードを設定します。
2-3-1 .htpasswdファイルの作成
KUSANAGIはデフォルトでNginxとApacheの双方で.htpasswdファイルは共通のパスを参照するよう設定されています。
設定されているパスに.htpasswdファイルを作成します。
次のように入力します。
# htpasswd -c /home/kusanagi/.htpasswd [ユーザー名]
続いてパスワードを入力します。
確認用に同じパスワードを入力します。
ベーシック認証に設定したユーザー名とパスワードを入力し、管理画面が表示されれば設定は完了です。
3 接続元のIPによるサーバーへのアクセス制限
hosts.allowファイル、hosts.denyファイルに接続元のIPやホストを指定することで、許可されたIPアドレスおよびホスト以外からのサーバーへのSSHなどのアクセスを制限することが可能です。
- hosts.allow
アクセス許可の条件を設定します - hosts.deny
アクセス禁止の条件を設定します
指定した設定が適用される順番は以下のとおりです。
- hosts.allowファイルに設定された条件に合致した場合、そのホストからのアクセスは許可されます。
- hosts.denyファイルに設定された条件に合致した場合、そのホストからのアクセスは禁止となります。
- hosts.allowおよびhosts.denyのいずれの条件にも合致しない場合、そのホストからのアクセスは許可されます。
指定方法はhosts.allow、hosts.denyは共に以下の様なフォーマットで記述します。
サービス名:ホスト名またはIPアドレス
例)ssh:192.168.1.0
3-1 hosts.allowでのアクセス許可
アクセスを許可するIPもしくはホスト名を設定します。
3-1-1 hosts.allowファイルが配置されているディレクトリへ移動
次の様に入力します。
# cd /etc/
3-1-2 hosts.allowファイルを開く
/etc/ディレクトリに移動したら、hosts.allowファイルを開きます。
次の様に入力します。
# vi hosts.allow
3-1-3 アクセスを許可する条件の記述
サーバーへのアクセスを許可する条件を記述します。
例
all:192.168.1.10
all:192.168.10.
all:.ucom.ne.jp
追記したら当該ファイルを保存します。
この許可設定を値を間違えるとサーバーへアクセスできなくなってしまいます。設定される際はご注意の上、設定を行って下さい。
3-2 hosts.denyでのアクセス禁止
全てのアクセスを禁止にします。
hosts.denyファイルはhosts.allowファイルと同階層に配置されています。
3-2-1 hosts.denyファイルを開く
hosts.denyファイルを開きます。
次の様に入力します。
# vi hosts.deny
3-2-2 全てのアクセスを禁止する記述
次の記述を追記し、全てのアクセスを禁止にします。
all:all
これによって2-1で許可設定を行ったIPやホスト名以外からはサーバーへのアクセスが拒否されるようになりました。
追記したら当該ファイルを保存します。
4 その他、ディレクトリのパーミッションを適切に設定する。
KUSANAGIでは、次のディレクトリのパーミッションが777(rwx rwx rwx)となっているため、パーミッションを755(rwx rw- rw-)に変更します。
・ドキュメントルート(/home/kusanagi/[プロファイル名]/DocumentRoot)
・wp-contentディレクトリ(/home/kusanagi[プロファイル名]/DocumentRoot/wp-content)
4-1 DocumentRootディレクトリのパーミッションの変更
次のように入力し、DocumentRootディレクトリが配置されているディレクトリへ移動します。
# cd /home/kusanagi/kusanagi_html(※1)
(※1)kusanagi provisionコマンドで作成したプロファイル名を入力します
続けて次のように入力します。
# chmod 0755 DocumentRoot
4-2 wp-contentディレクトリのパーミッションの変更
3-1に続いてwp-contentディレクトリのパーミッションを変更します。
次のように入力し、wp-contentディレクトリが配置されているディレクトリへ移動します。
# cd DocumentRoot
続けて次のように入力します。
# chmod 0755 wp-content
これでディレクトリのパーミッションが適切に変更されました。