.htaccessでWordPressを守る

VPSサーバーは、ある程度まで構築してしまうと日常であまりやることがありませんw
今回は、WordPressを導入したときの、.htaccessによる基本的なセキュリティ設定方法についてご紹介します。
.htaccessファイルに下記のコードを設定していきます。

①.htaccessの保護

まずは、.htaccessに不正アクセスされては元も子もないので、.htaccessファイル自体をアクセス拒否して保護します。

<Files ~ "^.*\.([Hh][Tt][Aa])">
 order allow,deny
 deny from all
 satisfy all
</Files>

②WordPress内にあるディレクトリ一覧の非表示

WordPress内にあるディレクトリ一覧をブラウザなどで閲覧できないようにします。
当サイトのWebサーバーの構築で既に設定済みですが、念のため。

Options -Indexes

③wp-config.phpの保護

wp-config.phpには、データベース関連のパスワードなど大切な設定が書かれていますので、必ず保護しましょう。

# protect wp-config.php
<files wp-config.php>
order allow,deny
deny from all
</files>

④wp-mail.phpとinstall.phpを保護

wp-config.phpを保護しましたが、さらにwp-mail.phpとinstall.phpもアクセス拒否して保護します。
下記の設定では、wp-config.phpも保護する設定です。

<FilesMatch "^(wp-config\.php|wp-mail\.php|install\.php|\.ht)">
order allow,deny
deny from all
</FilesMatch>

⑤スクリプトインジェクション対策

フォームから不正なscriptタグを入力しても実行処理しないようにします。

Options +FollowSymLinks
RewriteEngine On
# <script> タグ
RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3E) [NC,OR]
# PHP グローバルに関連するもの
RewriteCond %{QUERY_STRING} GLOBALS(=|[|%[0-9A-Z]{0,2}) [OR]
# _REQUEST を変更しようとするもの
RewriteCond %{QUERY_STRING} _REQUEST(=|[|%[0-9A-Z]{0,2})
#マッチしたURLへのアクセスを禁止("403 Forbidden"のレスポンスを返す)
RewriteRule ^(.*)$ index.php [F,L]

⑥日本国外からのログイン画面へのアクセスを制限

不正アクセスの多くが日本国外からのため、国内のIPアドレスの場合だけログイン画面にアクセスできるようにし、日本国外のIPアドレスはログイン画面にアクセス出来ないようにします。
また、XML-RPCの脆弱性を狙った不正アクセスの試みも頻繁に発生するため、xmlrpc.phpへのアクセス制限も一緒にします。
下記サイトにアクセスして、「.htaccessダウンロード」ボタンを押して、.htaccessファイルをダウンロードします。その.htaccessファイルに記載されている「allow from IPアドレス」全てをコピーして、下記のハイライトした部分にペーストしてください。
IPアドレスで日本国外(海外/外国)からのアクセスを制限する.htaccess CGI’s

<Files ~ "^(wp-login\.php|xmlrpc\.php)$">
Order deny,allow
Deny from all
allow from 1.0.16.0/20
allow from 1.0.64.0/18
allow from 1.1.64.0/18
allow from 1.5.0.0/16
allow from 1.21.0.0/16
allow from 1.33.0.0/16
(以下、日本国内IPアドレス続く)
...
...
...
</Files>

以上の.htaccess設定でWordPressの基本的なセキュリティは確保できると思います。
上記以外にも.htaccessによるセキュリティ向上方法があった場合には、随時追記していきます。

【参考サイト】
.htaccessをWordPressで徹底活用 | CSSPRO
WP インストール時の注意点とセキュリティ | Web Design Leaves

拡張子.htmlでphpを動作させる

.htaccessの設定により拡張子.htmlファイルでphpを動作させることが可能です。
phpを動かしたい.htmlファイルと同じディレクトリ、または上層にある.htaccessに下記内容を記述してください。

AddHandler php5-script .php .html

以上の設定で、拡張子.htmlファイル内のphpが動作します。

上記の設定で動作しない場合

下記の設定を試してください。

設定方法①

AddType application/x-httpd-php .php .html

設定方法②

AddHandler application/x-httpd-php .php .html

設定方法③

AddHandler php-script .php .html 

おそらくphp5環境下だと一番上の方法で動作すると思います。
また、拡張子.htmでphpを動作させたい場合は、.html部分を.htmに変えるか、.htmlの後に追記してください。
当たり前ですが、.htaccessが有効になっていないと設定が反映されないので、忘れずに。

【補足】さくらのレンタルサーバの場合

上記は、さくらのVPSで設定する方法でしたが、さくらのレンタルサーバでは設定方法が異なります。
さくらインターネットでVPSとレンタルサーバの両方を使用されている方も多いと思いますので、補足として記載します。

まず、FTPからレンタルサーバにアクセスします。
共有ディレクトリの「/usr/local/php/●.●/bin(/home/rs/php/●.●/bin)」の中にある「php-cgi」を、FTPのバイナリ転送モードでダウンロードします。
(※●.●はPHPバージョン名。自分がレンタルサーバで使用している同じPHPバージョンからファイルをダウンロードします。)

ダウンロードした「php-cgi」は、設定したい環境のドキュメントルートにバイナリ転送モードでアップロードし、ファイル名を「php-cgi」から「php.cgi」にリネームします。また、パーミション(属性)を705または755に設定します。

次に、「php.cgi」を設置したドキュメントルートにある「.htaccess」に下記内容を追記します。(.htaccessがない場合は新規作成する)

Action myphp-script /php.cgi
AddHandler myphp-script .php .html

以上の設定で、さくらのレンタルサーバで拡張子.htmlをphpとして動作させることができます。
気をつける点としては、FTPでダウンロード・アップロードする際に、転送モードをバイナリモードにすることです。

【参考サイト】
.htaccessで、拡張子.htmlのままPHPを実行する方法 | 海外SEO情報ブログ

.htaccessを有効にする

.htaccessを利用することで、Webサイトへのアクセス制限やbasic認証を行うことができます。
Webサーバーの構築では、.htaccessを有効にする設定にしていないので、このページで説明します。

①/var/www/htmlディレクトリ配下にある.htaccessを有効にする

SSHでVPSサーバーにアクセスし、root権限でhttpd.confを編集します。

[root@ ~]# vi /etc/httpd/conf/httpd.conf (httpd設定ファイルの編集)

.htaccessを有効にするには、AllowOverride None の記述部分を AllowOverride All に変更します。

<Directory "/var/www/html">

#
# 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 FollowSymLinks

#
# 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 (NoneをAllに変更)

#
# Controls who can get stuff from this server.
#
    Order allow,deny
    Allow from all

</Directory>

変更が完了したら、ファイルを保存してください。
設定を有効にするため、Apacheを再起動。

[root@ ~]# service httpd restart (Apacheの再起動)

以上の設定で、/var/www/htmlディレクトリ配下にある.htaccessは有効になります。

②その他のディレクトリ配下にある.htaccessを有効にする

上記の設定では、/var/www/htmlディレクトリ配下にある.htaccessを有効にしましたが、/var/www/htmlディレクトリ以外でウェブコンテンツを設定している場合には、そのディレクトリで.htaccessが有効になるよう設定をします。
例として、/var/www/example.netディレクトリ配下の.htaccessを有効にします。

SSHでVPSサーバーにアクセスし、root権限でhttpd.confを編集します。

[root@ ~]# vi /etc/httpd/conf/httpd.conf (httpd設定ファイルの編集)

httpd.confのファイル末尾に下記3行を追加します。
“ “内のディレクトリ指定部分は適時変更してください。

<Directory "/var/www/example.net">
AllowOverride All
Order allow,deny
Allow from all
</Directory>

追加したら、ファイルを保存。
設定を有効にするため、Apacheを再起動。

[root@ ~]# service httpd restart (Apacheの再起動)

以上で設定したディレクトリ配下にある.htaccessが有効になります。

③.htaccessの利用について

.htaccessの設定内容によっては、ウェブサイトに支障をきたす可能性がありますので、.htaccessの設定は注意して行ってください。