WordPressのブログでセキュリティ対策してみる

※2016年11月に、別のブログで書いた記事を移行したものです。

---

"mokuo's tech blog"は、WordPressを使っています。インターンをしていた時に、WordPressのサーバー構築・サイト作成・カスタマイズまで行っていたので、慣れているということもあります。
そこで今回は、WordPressのセキュリティ対策について、実際の設定の仕方も含めて見ていきたいと思います。

<!--more-->

以下のサイトを参考にしました。徳丸 浩さんは、[体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践](https://www.amazon.co.jp/gp/product/4797361190/ref=as_li_qf_sp_asin_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=4797361190&linkCode=as2&tag=mokuo-22)![](http://ir-jp.amazon-adsystem.com/e/ir?t=mokuo-22&l=as2&o=9&a=4797361190)を執筆された方です。
それぞれのサイトで色々なことが書かれている中でも、信憑性が高いと思い、参考にさせていただきました。
（他にも、昔インターンでセキュリティ対策を実施した時の知識もありますが、どこのサイトを参照していたのか覚えていません・・・。）

- [徳丸浩の日記: WordPressの侵入対策は脆弱性管理とパスワード管理を中心に考えよう](http://blog.tokumaru.org/2015/12/wordpress-security.html?m=1)

<iframe src="https://rcm-fe.amazon-adsystem.com/e/cm?t=mokuo-22&o=9&p=8&l=as1&asins=4797361190&ref=qf_sp_asin_til&fc1=000000&IS2=1&lt1=_blank&m=amazon&lc1=0000FF&bc1=000000&bg1=FFFFFF&f=ifr" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>

\## ソフトウェアを最新に保つ
古いものには脆弱性が存在している可能性が高く、最新のものを使用することで脆弱性対策になるようです。
（逆に、脆弱性が見つかったから、対策を施したバージョンをリリースするとも言える？）
以下のものは、常に最新のものを使いましょう。

- WordPress本体
- WordPressのテーマ
- WordPressのプラグイン
- OS
- ミドルウェア（WordPress関連では、以下のもの）
 \* Apache
 \* PHP
 \* MySQL

また、使わないプラグインは、無効化ではなく、**削除**　しましょう。
脆弱性が存在するプラグインは、無効化していても、利用されるケースがあるようです。
ここからは、常に最新のものを使うための具体的なやり方を見ていきたいと思います。

\### 自動バックアップ
この後、自動アップデートの設定をしますが、自動でアップデートを行うと、不具合が発生することもあります。万が一に備えて、自動バックアップの設定をしておきましょう。
攻撃されたとしても、バックアップを取っておけば復旧もしやすくなります。

自動バックアップには、**BackWPUp**プラグインがオススメです。
以下のサイトがわかりやすいので、参考に設定してください。

- [BackWPUp](http://bazubu.com/how-to-use-backwpup-23804.html)
- [図解でわかるWordPressの全自動バックアップ方法](https://japan.norton.com/wordpress-backup-6384)

\### WordPress本体・テーマ・プラグインを自動更新
デフォルトでは、本体のマイナー更新と翻訳ファイルのみ、自動更新されるようです。
今回は、さらに設定を追加します。

外観 > テーマの編集 から、
functions.phpに以下を追記します。
functions.phpは、編集を間違えると画面が真っ白になることもあるので、必ずバックアップを取ってから行ってください。

<pre>
// *******************************************************
// 本体メジャーアップグレードの自動更新
// *******************************************************
add_filter( 'allow_major_auto_core_updates', '__return_true' );

// *******************************************************
// テーマ・プラグインの自動更新
// *******************************************************
add_filter( 'auto_update_plugin', '__return_true' );
add_filter( 'auto_update_theme', '__return_true' );
</pre>

\**参考**

- [自動バックグラウンド更新の設定 - WordPress Codex 日本語版](https://wpdocs.osdn.jp/%E8%87%AA%E5%8B%95%E3%83%90%E3%83%83%E3%82%AF%E3%82%B0%E3%83%A9%E3%82%A6%E3%83%B3%E3%83%89%E6%9B%B4%E6%96%B0%E3%81%AE%E8%A8%AD%E5%AE%9A)

\### Apache, PHP, MySQLなどのアップデート
以下のコマンドを実行

<pre>
$ sudo yum check-update
</pre>
最新版があれば、アップデート

<pre>
$ sudo yum update
</pre>

\## パスワードを強固なものにする
長め(12文字以上)のランダム文字列（英数字＋記号）がいいと思います。
WordPressの管理画面に加えて、phpMyAdminの管理画面もですね。
以下のサイトなどで、ランダム文字列を生成できます。

- [パスワード生成（パスワード作成）](http://www.luft.co.jp/cgi/randam.php)

\## ファイルのパーミッションを設定する
\### WordPressを置いてあるディレクトリの所有者をec2-user、グループをapacheにしておく
※ec2-userは、AWSのデフォルトユーザーです。適宜、置き換えてください。

<pre>
$ chown -R ec2-user:apache /var/www/html/◯◯
</pre>
\### パーミッションの設定
以下のサイトを参考に設定する

- [WordPressディレクトリのパーミッションをセキュアに | VPSサーバーでWebサイト公開　備忘録　~Linux、MySQLからAJAXまで](http://wordpress.honobono-life.info/wp-config/wordpress%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%81%AE%E3%83%91%E3%83%BC%E3%83%9F%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%81%AB/)
- [ファイルやディレクトリのパーミッションを一括で変更する方法 - 指導員日記::ブログ](http://blog.servered.net/2008/01/post-12.html)

\### 追加のパーミッション設定
\#### ① SiteGuard画像認証
後述しますが、SiteGuard WP Pluginのログイン画面での画像認証で、画像が表示されなくなってしまいました。

修正前のパーミッション

<pre>
$ pwd
/var/www/html/mokuo.yokohama/wp-content/plugins/siteguard/really-simple-captcha
$ ls -la
合計 36
drwxr-x--- 5 ec2-user apache  4096 11月 28 12:11 .
drwxr-x--- 9 ec2-user apache  4096 11月 28 12:11 ..
drwxr-x--- 2 ec2-user apache  4096 11月 28 12:09 gentium
drwxr-x--- 2 ec2-user apache  4096 11月 28 12:09 mplus-TESTFLIGHT-058
-rw-r----- 1 ec2-user apache 14697 11月 28 12:09 siteguard-really-simple-captcha.php
drwxr-x--- 2 ec2-user apache  4096 11月 29 11:16 tmp
$ ls -la tmp/
合計 48
drwxr-x--- 2 ec2-user apache 4096 11月 29 11:16 .
drwxr-x--- 5 ec2-user apache 4096 11月 28 12:11 ..
-rw-rw---- 1 ec2-user apache  118 11月 28 12:12 .htaccess
-rw-r----- 1 ec2-user apache 1448 11月 29 10:38 1136737313.png
-rw-r----- 1 ec2-user apache   97 11月 29 10:38 1136737313.txt
-rw-r----- 1 ec2-user apache 1307 11月 29 10:51 1350422043.png
-rw-r----- 1 ec2-user apache   97 11月 29 10:51 1350422043.txt
-rw-r----- 1 ec2-user apache 1606 11月 29 11:08 1587730570.png
-rw-r----- 1 ec2-user apache   97 11月 29 11:08 1587730570.txt
-rw-r----- 1 ec2-user apache 1351 11月 29 11:16 826994820.png
-rw-r----- 1 ec2-user apache   97 11月 29 11:16 826994820.txt
-rw-r----- 1 ec2-user apache  102 11月 28 12:11 dummy.png
</pre>
以下の対策を実行すると、直った。

<pre>
$ chmod 770 tmp/
$ ls -la
合計 36
drwxr-x--- 5 ec2-user apache  4096 11月 28 12:11 .
drwxr-x--- 9 ec2-user apache  4096 11月 28 12:11 ..
drwxr-x--- 2 ec2-user apache  4096 11月 28 12:09 gentium
drwxr-x--- 2 ec2-user apache  4096 11月 28 12:09 mplus-TESTFLIGHT-058
-rw-r----- 1 ec2-user apache 14697 11月 28 12:09 siteguard-really-simple-captcha.php
drwxrwx--- 2 ec2-user apache  4096 11月 29 11:16 tmp
</pre>

\#### ② BackWPup
BackWPupプラグインが、バックアップを取る際に、書き込み宣言が必要になる。

<pre>
$ find /var/www/html/mokuo.yokohama/wp-content/uploads/ -type d -exec chmod 770 {} \;
</pre>

\#### ③ FTP接続情報の対策
テーマのアップデートや、プラグインのインストールで、FTP接続情報を聞かれることがある。
wp-config.phpに、以下の行を追加

<pre>
define('FS_METHOD','direct');
</pre>**参考**

- [WordPress更新時にFTP情報入力画面が表示される場合の対処方法3つ \| sand a lot Web & Music Create \[札幌\]](http://www.sandalot.com/wordpress%E6%9B%B4%E6%96%B0%E3%81%A7ftp%E5%85%A5%E5%8A%9B%E7%94%BB%E9%9D%A2%E3%81%8C%E8%A1%A8%E7%A4%BA%E3%81%95%E3%82%8C%E3%82%8B%E5%A0%B4%E5%90%88%E3%81%AE%E5%AF%BE%E5%87%A6%E6%B3%95/)

\#### ④ プラグインのインストール
プラグインのインストール時に、「ディレクトリを作成できませんでした。」と出て、インストールに失敗する。
パーミッションの問題だと推測される。

<pre>
$ chmod 770 wp-content/plugins/
</pre>

\### ログファイルの場所
パーミッションでエラーが起きた場合、ログを見ると原因がわかる。
ログは、以下のディレクトリにあるはず。
/var/log/httpd/
ない場合は、httpd.confに場所が書いてある。（/etc/httpd/conf/httpd.conf）

\## SiteGuard WP Plugin
基本的に導入するだけで、いくつかのセキュリティ対策をしてくれます。

以上になります。
ここまでやると、ある程度のセキュリティ対策にはなるかと思います。

ご意見・つっこみ等あれば、よろしくお願いいたします。