【WordPress セキュリティ】最低限の強化・対策はしておかなくてはなりません

僕のブログはWordpressの専用サーバをレンタルしているのではなく、VPSをレンタルしてWordPressの運用しています。

ミドルウェアなどの設定も当然自分でしているわけで、セキュリティの設定も自分でする必要があります。
そこで、僕がWordPressのセキュリティのために施している設定を紹介しようと思います。

僕がセキュリティのためにしている設定は、主に3点です。
管理画面への接続は VPN + htaccess で接続元を限定
管理画面へはBasic認証でID/パスワードを設定
管理画面はSSLの暗号化を使用

管理画面への接続は VPN + htaccess で接続元を限定

投稿画面などの管理画面への接続は接続元のIPアドレスを限定するようにしています。

そのためにはまずはIPアドレスを特定する必要があります。
固定グローバルIPアドレスを持っている回線からであればそのグローバルIPアドレスを用いれば大丈夫ですが、外出した時など外から接続しようとしてもIPアドレスが変わってしまうので接続はできません。

そんな時にはVPNが便利です。僕は自前のSSL-VPNを使っていますが、有料になりますがVPNサービスを使うことでIPアドレスの固定をすることもできます。

IPアドレスの固定ができるとあとはサーバ側のhtaccessで接続を許可するIPアドレスを限定します。
WordPressのwp-adminディレクトリの中に.htaccessファイルを作成します。

# cd /<Wordpressのドキュメントルート>/wp-admin/
# vim .htaccess
#以下の3行を追加して保存
order deny,allow
deny from all
allow from IPアドレス

htaccessは保存後に即時反映されるので設定には気を付けます。

管理画面へはBasic認証でID/パスワードを設定

WordPressの管理画面へ接続するにはWordpress自身のID/パスワード認証がありますが、認証を2段階にするためにBasic認証もしておきます。

# htpasswd -c /etc/httpd/.htpasswd <ユーザ名>
New password:
Re-type new password:
Adding password for user <ユーザ名>
# "-c" オプションは初回のみ使います

そして、Apacheにも設定を追加します。

# vim /etc/httpd/conf/httpd.conf
# 任意の場所に追加します
   <Directory /<Wordpressのドキュメントルート>/wp-admin >
        AuthType Basic
        AuthName "Secret Zone"
        AuthUserFile /etc/httpd/.htpasswd
        Require user <ユーザ名>
   </Directory>

# service httpd restart

これでBasic認証の設定も完了です。管理画面に接続した時に、ユーザ名とパスワードの入力画面が表示されるはずです。

管理画面はSSLの暗号化を使用

これまでの接続元のIPアドレスを限定するのと、二段階の認証のためにBasic認証の設定をしていても通信自体が盗聴されていてはあまり意味がありません。

盗聴されないためにもSSLを用いて通信の暗号化は必要です。

SSL通信するための設定は、以前に投稿した記事があるのでそちらを参考にしてもらえればと思います。
SSL証明書も年間900円から使うこともできるので導入することをお勧めします。
【HTTPS】当ブログ(zibunlog.com)をHTTPSでの表示に変更しました

そして、投稿ページはhttp通信をしますが、管理画面などは強制的にhttpsの通信に切り替えるようにします。

# vim /<Wordpressのドキュメントルート>/wp-config.php
#以下の1行を追記して保存します

define('FORCE_SSL_ADMIN', true);

#Apacheの再起動は不要です。

ここまでの設定でSSL通信ができるようになっています。SSL通信をして通信が暗号化されるとかなり安心です。

おまけにサーバとしてのセキュリティ設定

ここまでの設定でWordPressとしてのセキュリティを高めることはできました。

しかし、Wordpressは守られていても、そもそもサーバ自体を攻撃されてWEBサービスの停止をされてしまっては元も子もありません。

そのために以下の2つの設定もしておきます。
Apacheのバージョンを非表示
SSH接続はユーザ名を限定し、公開鍵認証をする

簡単に説明していきます。

バージョンの脆弱性を攻撃されないためにApacheのバージョンを表示させないようにします。

# vim /etc/httpd/conf/httpd.conf
# ServerTokensの設定を "off" にします
ServerTokens off

#service httpd restart

SSH接続は特定のユーザだけにして、認証もパスワード認証を停止して公開鍵認証だけにします。

# vim /etc/ssh/sshd_config
#PasswordAuthenticationの設定を "no" にしてAllowusersでユーザを限定します。 
PasswordAuthentication no  #パスワード認証を停止
PermitRootLogin no  #rootユーザでのログインを無効にする
Allowusers <ユーザ名>  #ログインできるユーザを限定にする

#service sshd restart

公開鍵認証の鍵ファイルの設定などはは以下のURLのサイトがわかりやすいので参考になります。
ssh公開鍵認証を実装する(自分メモ)

実はこのSSHのセキュリティが一番重要だったりします。なぜならSSHでサーバが乗っ取られるとすべてのセキュリティ設定が解除されたり、WordPressのデータをあっさり消すことも簡単にできてしまいます。
なので、SSHのセキュリティは非常に重要です!

さいごに

運営しているブログが悪意を持ったクラッカーなどに攻撃されてサービスの停止や、最悪はブログを乗っ取られて内容の削除や改ざんをされてはサイトの信頼にもかかわるのかなと思います。

そうはならないためにもできる限りの対策はしておきたいと思います。

WordPressの専用サーバを使っている人は諸々のセキュリティはサーバ会社側ですでにされている場合が多いでしょうけど、僕の場合はVPSを使っていてすべて自分でやらなくてはなりません。
その分、手間はかかりますが、そのあたりも自分でやる楽しみもあるので、今後もセキュリティを高めることができる情報があれば取り組んでいきたいと思います。

photo credit: Ian D via photopin cc