エックスサーバーでWordPressをインストールしたらすぐにしておきたいセキュリティ対策

WordPressのセキュリティを強化するため具体的な対策をいくつか紹介したいと思います。自分でできることはやっておいて損はないと思います。

スポンサーリンク

はじめに

全世界のサイトの27%はWordPressサイトとも言われているようなので、攻撃対象になりやすい傾向があるのはしかたがないと思います。
最低限自分でできるセキュリティ対策をすることで、多少防げる場合もありますから、何もやらないよりはやったほうがよいと思います。
とはいえ沢山あってもなかなかすべてできなかったりすると思いますので、とりあえずやれそうないくつかを書きたいと思います。
ただエックスサーバーを使用していれば会社側でかなりセキュリティ対策をしてくれておりますので、そのままでも案外平気かもしれません。

『WordPress』におけるセキュリティの強化対応について(エックスサーバー)
WordPressセキュリティ設定(エックスサーバー)

国外IPアクセス制限設定
ログイン試行回数制限設定
コメント・トラックバック制限設定
をしてくれています。

WordPressのバージョンは常に最新にする

誰もが口をそろえて言っていることだとはお思いますが、WordPressのバージョンは常に最新にしておきましょう。
WordPressで不具合や脆弱性などがあった場合、次のバージョンで修正が加えられたりしています。
なので今よりもさらに最新に、常に一番新しいバージョンにすることはとても重要です。
とはいえ、バージョンが変わったことで、動かなくなるプラグインやおかしくなるテーマが出てくる可能性も否定できません。
運用を任されているWeb管理者の方々が、なかなか「更新」を押してアップデートに踏み切れない気持ちもよくわかります。
自分自身もサーバーを引っ越しさせるついでに最新のWordPressとプラグインとphp7でいこうとしたらトップが表示されなかった経験があります。
しかしながらウイルスが入るとその処理のほうも結構な手間だったりします。
ウイルス除去のあーだこーだの処理と最新のWordPressとテーマとプラグインの確認と修正の手間と、どちらがよいかといえば後者ではないでしょうか。
WordPressのバージョンをあげる際は必ずテストサーバーで確認したほうがよいと思いますが、その手間を入れても、WordPressを最新にする意味は大きいと思います。

使っていないテーマとプラグインを削除する

WordPressをインストールするとデフォルトで「twentyfifteen」と「twentyseventeen」と「twentysixteen」が入っていると思います。(4.9.4の場合)
まったく使わない場合も多いと思うので、削除してしまいましょう。
プラグインも入れたけど使わなくなったというものがあった場合は停止にするだけではなく削除しておきましょう。
こういったものが攻撃の入り口になる場合が多々ありますので、必要なものだけにしておきましょう。

「wp-config.php」のパーミッションを「400」にする

「wp-config.php」というファイルは、データベースのアカウント情報も記載されていますので、最もセキュリティレベルを高く設定しなければいけないファイルです。
こちらが丸見えですと、簡単にデータベースを改ざんできてしまいます。
パーミッションは「400」の管理者のみ「読み取り」権限にします。

WinSCPの場合ですと、「wp-config.php」で右クリックし、「プロパティ」を開けば、パーミッションの画面が出てきます。
こちらを400にします。

うまく動作しない場合は404にします。それでもうまくいかない場合は「600」にしてみましょう。
レンタルサーバーによって推奨されるパーミッションが違うようです。
エックスサーバーは、「600」を推奨されているようですが、「400」でも問題なく使えています。
とりあえずエックスサーバーのインストーラーを使うとデフォルトで「600」になるようです。推奨なのでそのままでもよいかもしれませんが、できたら「400」がよいと思います。
ロリポップの場合も「400」で大丈夫でした。
ちなみにエックスサーバーでは「通常は644等のパーミッションでも問題になることはございません」と書いてあります。エックスサーバーすごいですね。
まあでも「600」か「400」にしておきましょう!

ただし「wp-config.php」に何か書き込みをしたい場合は、いったん「400」のパーミッションを書き込みが可能なパーミッションへ変更してからにする必要があります。
「600」とかでよいかと思います。

.htaccessにセキュリティの命令を記載する

「.htaccess」が存在していない場合は、管理画面の[設定]から[パーマリンク設定]を押して、どの設定でもよいので保存すると「.htaccess」が出現すると思います。
こちらに命令を追加することでセキュリティが高められますので、いろいろ入れていきましょう。

htaccess – WordPress Codex 日本語版

あとパーミッションは「604」か「644」にします。エックスサーバーの推奨は「644」のようです。
ロリポップは「604」のようです。

パーミッション(エックスサーバー)
パーミッションについて(ロリポップ)

「604」ですとパーマリンクの設定が出来ないようなので、その場合は「644」か「606」にして変更し、終わったら「604」にする、または「606」なら変更ができますので「606」にしておくのがよいかと思います。

.htaccessファイルに書くもののまとめ

さきに.htaccessに書いておくものを列挙しておきます。こちらをコピペすればよいと思います。
何か不具合などが出てきたら、一つずつ確認をしていけばよいと思います。
ちなみに.htaccessをいじると必ずといってよいほど500エラーを出す人がいると思います。結構それば自分だったりするのですが、だいたいその原因は保存形式です。
万が一500エラーでまったくページが表示できなくなったという場合は、下記の記事も参考にしつつ、まずは落ち着いて保存形式を確認してみてください。

昔に比べてSSLの導入は敷居が低くなったと思います。googleでもWebサイトを常時SSL(https)にすると、SEO(検索順位...
# wp-config.phpと.htaccessとerror_log、php.iniと.htpasswdをアクセス拒否
<FilesMatch "^.*(error_log|wp-config\.php|php.ini|\.[hH][tT][aApP].*)$">
Order deny,allow
Deny from all
</FilesMatch>

# wp-mail.phpとinstall.phpとxmlrpc.phpをアクセス拒否
<FilesMatch "^(wp-mail\.php|install\.php|xmlrpc\.php)">
Order allow,deny
Deny from all
</FilesMatch>

# wp-includesをアクセス拒否
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^wp-admin/includes/ - [F,L]
RewriteRule !^wp-includes/ - [S=3]
RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]
RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L]
RewriteRule ^wp-includes/theme-compat/ - [F,L]
</IfModule>

# ディレクトリ一覧の非表示
Options -Indexes

# フォームから不正な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]

# BEGIN WordPress

.htaccessファイル自体をアクセス拒否に設定する

まずは、.htaccessに不正アクセスされては困るので、.htaccessファイル自体をアクセスできないようにします。

その際に重要なことは、

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /shiritai/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /shiritai/index.php [L]
</IfModule>

# END WordPress

のように書いてある部分の中には絶対入れないということです。
「# BEGIN WordPress」と「# END WordPress」の中は場合によっては書き換わることがあるので、中に入れてしまうと上書きされて消えてしまうこともあると思います。

# BEGIN WordPress
・
・
・
# END WordPress

部分以外に入れましょう。
いったんわかりやすいように新しい命令を「# BEGIN WordPress」の上に入れます。

# .htaccessファイルをアクセス拒否
<Files ~ "^.*\.([Hh][Tt][Aa])">
 order allow,deny
 deny from all
 satisfy all
</Files>

# BEGIN WordPress
・
・
・
# END WordPress

もしも上の方に何か他の命令が記載されている場合があるかもしれません。その場合絶対に消さないようにしてください。
その下に追加しましょう!

「wp-config.php」をアクセス拒否に設定する

つぎに「wp-config.php」にもアクセスできないように設定します。
「.htaccess」ファイルに、下記を追加します。

# wp-configをアクセス拒否
<files wp-config.php>
order allow,deny
deny from all
</files>

wp-configとhtaccessを一緒に、さらに「error_log」、「php.ini」と「.htpasswd」ファイルとまとめてアクセス拒否する命令は下記です。

# wp-config.phpと.htaccessとerror_log、php.iniと.htpasswdをアクセス拒否
<FilesMatch "^.*(error_log|wp-config\.php|php.ini|\.[hH][tT][aApP].*)$">
Order deny,allow
Deny from all
</FilesMatch>

「wp-mail.php」「install.php」「xmlrpc.php」もアクセス拒否したい場合は下記です。
ごちゃごちゃしてきますので、別にします。何かあった場合に削除しやすいように。

# wp-mail.phpとinstall.phpとxmlrpc.phpをアクセス拒否
<FilesMatch "^(wp-mail\.php|install\.php|xmlrpc\.php)">
Order allow,deny
Deny from all
</FilesMatch>

「xmlrpc.php」はPingbackに使用しているのでもし拒否にしたくない場合は、外しておきます。

# wp-mail.phpとinstall.phpをアクセス拒否
<FilesMatch "^(wp-mail\.php|install\.php)">
Order allow,deny
Deny from all
</FilesMatch>

wp-includesをアクセス拒否に設定する

「wp-includes」ディレクトリはWordPressのロジック部分なので、通常ユーザーがアクセスするような用事はないものです。
なのでこちらもアクセス拒否になるようにします。

WordPress の安全性を高める

# wp-includesをアクセス拒否
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^wp-admin/includes/ - [F,L]
RewriteRule !^wp-includes/ - [S=3]
RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]
RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L]
RewriteRule ^wp-includes/theme-compat/ - [F,L]
</IfModule>

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

WordPress内にあるディレクトリ一覧がブラウザなどで閲覧できてしまうと困るので一覧を表示させないようにします。

# ディレクトリ一覧の非表示
Options -Indexes

ちなみにさくらインターネットでは上記の使用が禁止されている?らしいのでその場合には

# ディレクトリ一覧の非表示
DirectoryIndex index.html index.cgi index.php .ht

とします。

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

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

# フォームから不正な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]

参考
.htaccessでWordPressを守る

uploads配下、画像ディレクトリでのphp実行制限

/wp-content/uploads/はWordPressの画像をアップロードする為に書き込み権限があり、その中でPHP実行をされないよう、/wp-content/uploads/.htaccessを作成し、下記命令を書きます。
「wp-content/uploads」ディレクトリに「.htaccess」を設置します。
今までとは違い、wp-content/uploads/.htaccessというように、「wp-content/uploads/」配下に「.htaccess」を別で作ります。

# 画像ディレクトリでPHPの実行を防ぐ
<Files *.php>
deny from all
</Files>

上記を.htaccess.txtという形で保存して、wp-content/uploads/配下にアップしてから.htaccessに変更すればOKです。
.htaccessはサーバーに一つしか置いてはいけないものではありません。フォルダ内に1つという感じです。
なので、/uploads/に新たに置いても問題ございません。
あまり無いとは思いますが、万が一「wp-content/uploads」内にプラグインを置くような場合があり、ここでphpが実行されるような場合はこちらの対策はしないということで。

IDとパスワードを複雑なものに

新規でWordPressを入れるとデータベースの設定などをすると思います。
そのあとにサイト名やユーザー名を入力すると思いますが、こちらのユーザー名をadminなど単純なものにせず少し複雑なものにしましょう。パスワードもデフォルトで表示されているものはわりと複雑に設定されているのでそれを基本使いましょう。

念のためさらに2,3文字追加してもよいと思います。
もしくは「パスワード生成」と検索すると

パスワード生成(パスワード作成)するweb・ウェブ制作に役立つ便利ツール。お好みのパスワードを生成(自動作成)することができるツールです。
などのサイトが出てくると思います。
こちらを利用し、自分でも文字を追加などしてなるべく複雑になるように設定しましょう。

すでにWordPressのインストールが終わっていて、adminにしてしまっているという方もいると思います。
その場合は、管理画面のユーザーから新たにユーザーを作成し、単純なユーザー名、testやadminなどにしていた場合はユーザーを削除して、新たなユーザーを設定しましょう。
必ず新規のユーザーを作った場合は、testやadmin等使用しなくなったユーザーを削除することをお忘れなく!

たまにデータベースと画像をバックアップ

ウイルスが仕込まれた場合は、基本はすべて削除対応になってくると思いますので、データベースや画像を別でバックアップしておくことも必要です。
あとなんのプラグインを入れているか、覚えておくとか。

WordPressでは自動でデータベースをバックアップするような機能はありませんので、プラグインを使わず手動でMySQLをphpMyAdminを使って保存する方法をロリポップ、エックスサーバー、Webアリーナに分けて解説します。

その他やれそうなら

下記のようなこともできたらよいかと思います。

WordPressのテーマによっては、記事の下などに投稿者が表示されてしまい、なんとか消せないだろうかと思うこともあると思います。 ...

おわりに

少し長くなってしまいましたが、レンタルサーバーによってすでに対策が施されていてかぶっているものもあると思います。気になる方はお使いのレンタルサーバーに確認してください。
なにか不具合が起きた場合、不具合というのは、ようはページが見れない、500エラー表示、メディアがくるくるして表示されない、アップできない、へんなエラー文字がページに表示される等、おかしなことが起きることをいいます。何か変だなと思った場合は、.htaccessとwp-config.phpのパーミッションを見直す、.htaccessに書いたものを消して確認してください。その際に.htaccess自体を消すのは絶対にだめです。# BEGIN WordPressから# END WordPressまで消すと、さらなるエラーになり、何がエラーになっているのかわけがわからなくなると思います。
またセキュリティ系のプラグインと干渉して何か起こることもあるかもしれません。なので何か気になることが発生した場合は、プラグインも疑ってください。
WordPressをインストールして使っている方なら、これくらいのことはあーだこーだ考えながらやったほうが勉強にもなりますし、頑張ることをお勧めします。
WordPressは簡単でおすすめなどと書いてある記事もありますが、テーマのカスタマイズを含め、そんなに簡単ではないと思います。
とはいえWordPressを導入できているならば、それなりにできている人だと思いますので、これらの対策も追加していただけたらと思います。
ただこれらのことをしても安全とはまったくいえないと思います。ただやらないよりはやったほうがまだよいという感じです。
それだけは何卒ご了承ください。

スポンサーリンク

シェア

フォローする

スポンサーリンク