こんにちは、さくらインターネットの大喜多です。

さくらのナレッジをお読みの皆様には、WordPressを使ってWebサイトを運用されている方が多くおられると思います。今回は、さくらのVPS上のWordPressで常時SSL化する手順と、定期的にセキュリティチェックを行う方法についてご説明します。

常時SSL化が必要とされる理由

2014年に、世界最大級の検索エンジンを運営するGoogleが「HTTPS(暗号化通信) をランキングシグナルに使用します」と公式に発表しました。簡単に言えば、「HTTPS(暗号化通信)かどうかがSEO(検索順位)の判断基準のひとつになる」ということです。ただしこれまでは「ユーザーにとって良質なコンテンツであるかどうか」が最も重要な判断基準とされているGoogleの評価基準の一要素でしかありませんでした。

ところが、WebブラウザのGoogle Chrome 56では、HTTPのページでID、パスワード等を入力する項目があれば、「保護されていません(Not Secure)」という警告が表示されるようになり、今後全てのHTTPページに警告を出す予定であると発表されています。このようにWebサイトの常時SSL化は「対応した方がよい」ものから「対応が必須とされる」ものへ変化しつつあります。

常時SSLのWordPressを構築しよう

ここからはさくらのVPSとKUSANAGIを使って、常時SSL化されたWordPressサイトを作成する手順を解説します。SSL証明書はLet’s Encryptを使用します。

さくらのVPSにKUSANAGIをインストールする手順については公式サイトをご参照下さい。

KUSANAGIの詳細なセットアップ手順は公式ドキュメントに譲りますが、ここでは常時SSL化のために必要な部分をフォローしていきます。

Let’s Encryptの設定

kusanagi provisionコマンドにてプロファイルの設定を行っている際に、Let’s Encryptの設定を行う箇所があります。ここでメールアドレスを入力します。

In order to use Let's Encrypt services, you must agree to Let's Encrypt's Term of Services.
If you agree to this TOS, type your email address; if not, hit enter twice.
TOS of Let's Encrypt : https://letsencrypt.org/repository/
t-okita@sakura.ad.jp #メールアドレスを入力
Re-type mail address.
t-okita@sakura.ad.jp #メールアドレスを再度入力

リダイレクト設定

常時SSL化のためには、httpでアクセスがあった際に、サーバ側でhttpsに転送する必要があります。以下のコマンドを実行し、http→httpsへのリダイレクトを有効にします。

[root@kusanagi71 ~]# kusanagi https redirect
Set redirect all traffic on ssl.sacloud.jp to HTTPS.(Permanently)
Done.
[root@kusanagi71 ~]# kusanagi restart
Done.

以上の作業で、常時SSL化されたWordPressサイトの作成が完了しました。
WordPressサイト画面

Walti.ioを用いたセキュリティチェック

ここからはセキュリティ診断サービス Walti.io を使用して、サーバの定期的なセキュリティチェックを行ってみたいと思います。

Walti.io は、「日本のサーバのセキュリティ水準を上げていこう!」とサーバサイドのセキュリティスキャンを身近にするための活動の一環として、株式会社ウォルティが開発したサービスです。
Walti.ioトップページ

脆弱性診断を誰でも簡単に行えるよう、Walti.ioは「管理画面から簡単スキャン」できることや、「圧倒的な低コスト」を実現することで、脆弱性診断のハードルを下げることに成功しています。
管理画面から簡単スキャン
圧倒的な低コスト

さっそくWalti.ioを使ってみよう

1. クーポンの取得

今回はキャンペーンでプレゼントしている「Walti.ioさくらクーポン」を利用します。クーポンを使うと、毎月500円分のスキャンを実行することができます。本キャンペーンでは抽選で600名様にクーポンをプレゼント致します。是非ご応募ください。
キャンペーンへのお申込みはこちらです。

Walti.ioキャンペーンバナー

クーポンを入手できなかった場合は、下記クーポンの登録手順はスキップして下さい。ただ、クーポンを使わなくてもWalti.ioは安価なサービスなのでぜひ気軽にご利用いただければと思います。

2. アカウント~組織の作成

Webブラウザで Walti.io のサイトを開き、「今すぐアカウントを作成」をクリックします。
今すぐアカウントを作成

フォームに必要な情報を入力し、「Sign up」ボタンをクリックします。
また、FacebookアカウントやGitHubアカウントでサインアップすることも可能です。
サインアップ

Walti.ioでは、ターゲット(スキャン対象のサーバ)やWalti.ioのユーザーは必ず「組織」に属することになります。このことによって、スキャン結果をメンバー間で共有したり、ターゲットに変更を加えた際にリリースの担当者がスキャンできるなど、属人性を排除した運用ができるよう配慮されています。また、1.で取得したクーポンコードもこちらの画面で入力して登録します。
組織の作成

3. ターゲットの登録

Walti.ioでは、スキャン対象のサーバ(IPアドレスまたはドメインで登録します)を、「ターゲット」と呼んでいます。スキャンを実行するにあたり、ターゲットの登録が必要になります。これよりターゲットの登録手順を解説します。

「ターゲットを追加」ボタンをクリックします。
ターゲットを追加

「ターゲットの追加」画面で、ターゲット名をテキストボックスにドメイン名(例:example.jp)もしくはIPアドレス(例:203.0.113.100)を入力し、「ターゲットを追加する」ボタンをクリックします。
ターゲット追加画面

ターゲットを登録した後は、ターゲットの所有者確認を行います。この仕組みがあるのは、この仕組みが無いと、どのサーバに対してもスキャンを実行できてしまう(スキャンは疑似攻撃なので、第三者所有のサーバへ実行することは違法行為となる)ためです。

ターゲットの所有者が自分であることをシステム的にチェックをして、トラブルを未然に防ぐ仕組みになっています。

今回私はcurlコマンドを使用して、Webサーバのドキュメントルートに認証ファイルを設置しました。設置が終わったら、左下の「所有者確認を開始」をクリックします。
所有者確認

Walti.ioが所有者確認を実行しますので、しばらく待ちます。
所有者確認中

所有者確認が完了すると、以下のようにスキャンが実行できる画面に遷移します。Walti.ioはこのときサーバに対してどのスキャンが行えるかをチェックします。
所有者確認完了

チェックが終わり、実行可能なスキャン項目が全て表示された状態が以下の画面となります。
スキャン画面

これで下準備は完了です。ではさっそくスキャン(脆弱性診断)をしてみましょう。脆弱性が発見された場合の対策も合わせてご紹介致します。

スキャンを実行してみよう(SSL編)

SSL/TLSのスキャンを実行します。赤枠部分のボタンをクリックします。
SSLTLSスキャン実行1

「実行」をクリックします。
SSLTLSスキャン実行2

スキャンがはじまりますのでしばらく待ちます。
SSLTLSスキャン実行中

3件の脆弱性が発見されました。「チケット」をクリックして詳細を確認します。
SSLTLS検出結果1
SSLTLS検出結果2

各チケットには脆弱性情報へのリンクが存在します。対策などはこちらで確認するようにします。
脆弱性詳細1
脆弱性詳細2

今回見つかったのは以下3つの脆弱性でした。
http://jvndb.jvn.jp/ja/contents/2011/JVNDB-2011-002305.html
http://jvndb.jvn.jp/ja/contents/2016/JVNDB-2016-004511.html
http://jvndb.jvn.jp/ja/contents/2013/JVNDB-2013-001460.html

以下のnginx設定ファイルの内容を修正します。
/etc/nginx/conf.d/_ssl.conf
/etc/nginx/conf.d/ssl_ssl.conf

ssl_protocols TLSv1.2;
ssl_ciphers HIGH:!ADH:!MD5;

nginxを再起動して設定変更を反映させます。

# systemctl restart nginx

再度SSL/TLSスキャンを実行します。
SSLTLS再スキャン

以下のように脆弱性が検出されなければ対策完了です。
脆弱性なし

定期自動スキャン機能を設定してみよう

今回ご紹介したクーポンは登録後「毎月500円」利用できるクーポンになっています。500円使い切ったら終わり、でないところがポイントです。Walti.ioには定期自動スキャン機能があります。定期的に自動でセキュリティチェックを行うことで、SSL証明書の有効期限切れを防いだり、OpenSSLの脆弱性発見をいち早く行うことができます。Webサイトを安全な状態に保つことがクーポンの範囲で十分可能になるのです。

「タイプ&スケジュール登録」をクリックします。
スケジュール登録

Walti.ioでは、全てのスキャンが定期実行に対応しています。以下のスクリーンショットでは、SSL/TLSのスキャンを毎週月曜日に行うように設定しています。
定期スキャン設定画面

まとめ

このようにWaiti.ioを使用してセキュリティチェックを行うことで、安全にWordPressサイトを運用することができます。ぜひこの機会にWalti.ioを活用してサーバを安全に保つようにしましょう!