およそ一ヶ月ぶりの更新。

このカテゴリでのサービスは初めてとなりますが、この度WP Guardというサービスを始めました。今年の頭からWebサイトの「静的化」というキーワードで勉強会を開いたり色々技術調査もしてきて、行き着いた先がこうなりました的な感じです。プレスリリースをこちらに掲載しておりますので御覧下さい。

以下、開発の経緯などを簡単に書いてみます。

静的サイトジェネレータは難しい

随分前に、CMSにもうずっと疑問を持ってますという話というエントリで問題提起をしてからというもの、静的サイトジェネレータを色々触ってきました。

20160408_1058
(2016年3月に開催した第二回静的Webサイト勉強会の様子)

しかし、やっぱり開発者以外の方には難し過ぎるなと。勉強会の発表でもデメリットとして強調していたので、分かってはいたのですけどね。

ツールとしての難しさが解消する見込みはどうも無さそうなこと、制作現場・運用現場での要求に見合う程の成熟にまで時間がかかりそうということから、一般的な浸透は難しいという結論に至ってしまいました。黒い画面が分かる人には手軽でとっても良いツールなのですけどね。

じゃぁ静的化は現実的ではないのか。

…という訳ではなく、依然として CMSによるサイト運営は利便の割に余計な面倒やリスクを抱えている という問題意識は持っていたので、もう少し追求してみようと考えたのです。自分もCMSでさんざん辛い思いをしてきましたから。

CMSの利便はそのままに、セキュリティの心配を限りなくゼロに近づけられないか。

自社開発のWebサイト静的化エンジン

そこで、現存するCMSサイトを、無理やり静的化して別立ての公開用サーバに静的化済みファイルを転送。更に「問い合わせフォーム」もちゃんと機能させる仕組みもセットにするという方向で作り込んでみた次第です。全く違うアプローチですね。

これが形になってみたら結構良い感じだったと。図を書くとこんな感じになります。

20161004_1625

CMSは変えません。まず、既存のCMSを完全に封印します(右側の茶色の囲い)。Basic認証とかクライアント証明書とか、要するに第三者のアクセスを一切受け付けないようにします。更新担当者が編集/確認をできるだけ。安全を優先確保です。

でもこれだと一般の閲覧者も見れなくなるので、CMS側のサーバでWebサイトを更新の度に静的化、公開用サーバへ安全に差分転送。閲覧者には公開サーバ側を見て貰います。公開用サーバ内は、静的ファイルしかありませんので、幾ら攻撃されても漏洩や改ざんのしようがありません。事実上の攻撃無効化ですね。

更に、一般的には静的化すると問い合わせフォーム等が動作しなくなる(phpやperlを期待しているから)ので、それも機能させる仕組みも織り込んで静的化してしまう。いわゆるサーバレスアーキテクチャです。

こんな一連の連携を実現するエンジンを開発しました。名を espar と言います。elastic static page renderer の頭文字とって espar。目指しているのは、Webサイトの完全静的化。CMSを使いながらも静的化によって安全を担保すると。PowerCMSNORENなどの企業向けの高額CMSには標準で備わっているのですけどね、汎用的という意味でちょっと違います。

実はこの種のエンジンって作る必要ありません。勘の良い方は気付かれると思うのですが、いわゆるクローラーに近いものなので、それこそ GNU wget とか既存のモノを使ったらいいんです。ただ、パフォーマンスの問題、サイトごとの特性に応じた柔軟さ、セキュリティの為の静的化という観点の相違、などなどからベストマッチには至らず、自前で実装することにしました。目的が違うと手段であるツールは別に必要ってことなのでしょうね。

やりたいことが上述の通りなので、言語はもちろんGo言語を使ってます。エンジニアの間で流行ってるからということではなく、要件が見事にマッチしたのでGo言語を選択しました。期待通りのパフォーマンスを出してくれています。Go言語、素晴らしいですね。

espar の提供第一弾として「WP Guard」

espar は、原理的にはWebサイトとして存在していれば良いのでCMSに全く依存しません。

が、まずは自分がよく使っていたし、世界中で一番使われているCMSだし、問題も色々とあることがよく知られているし…ということで、WordPress 向けに espar をラップして使い易くしたプラグインを提供することにしました。それが今回発表した WP Guard です。(前置きが長くなりました)

実際にはプラグインをインストールしてはい完了!というシンプルなものではなく、サイト毎の要件に従って色々設定が必要にはなります。それを弊社やパートナー企業様が実施する(インテグレーションする)ということなんですが、一度 WP Guard を導入すると、

  • コンテンツ管理をするWordPressには、原則的に一切の攻撃が不可
  • コンテンツ配信をする公開サーバにも、原理的に一切の攻撃が不可

という鉄壁を作れると同時に、

  1. 今まで通りにWordPressの管理画面から編集/更新
  2. プレビューして保存
  3. WP Plugin の画面から「START」をクリックして、転送完了を待つ

ってな感じで、最後の1クリックだけ追加になる以外は、これまでの編集/更新操作を基本的に踏襲することができます。

プラグインの画面はこんな感じです。

20161004_1552

ボタン1つで超シンプル。いつも通りサイト更新して頂いて、最後にここのボタンを押すだけです。ボタン1つで、サイトが静的化され安全が確保されるのですから、安心してWordPressサイトを運用できます。

結局これは、コンテンツの管理機能と配信機能の完全分離 なんですよね。閲覧が主体のWebサイトの場合、サイトの脆弱性の根本原因はコンテンツの管理機能と配信機能を同じサーバ内に共存させていることにあります。それを分離する。

ぶっちゃけ、WordPress本体やプラグインのアップデートが全然追いつかなくても、不正アクセスを受ける心配はほぼありません(とはいえ、マメなアップデートやはり実施頂いた方が良い訳ですが)。WordPress側はIPや証明書で制限されますし、公開側はそもそもプログラムやデータベースが存在しないからです。悪意ある第三者には、どこでCMS(WordPress)が稼働してるかすら分かりません。

これが静的化によってコンテンツ管理と配信を分離するメリットです。ちなみにその仕組み上、リアルタイムな即時反映が必要な会員サイトやECサイトには向いていません。どちらかというと、企業サイトやサービスサイトやオウンドメディア等の情報発信系サイトを想定しています。

勿論、WP Guard のオフィシャルサイトも WP Guard が導入されていて、オフィシャルサイトの www.wpguard.biz には、html/css/js/画像などの静的なファイル以外存在していません。perlやphpなどのサーバサイドプログラムも、データベースも存在せず、問い合わせフォームも普通に動作します。

当然、競合もおられます。WordPress に限って言えば StaticPress というプラグインがありますしね。でも目指すものが違った(ウチは、CMSを選ばず高速なこと、フォームも含め完全静的化を目指すこと)ので開発した次第です。

Webサイトセキュリティ市場へ

espar はその目的からしてセキュリティ市場と相性が良く、開発途中からステルスで営業をしていく中で色んな方から興味関心をお寄せ頂きました。

既に、複数の地方自治体様(都道府県単位)のWebサイトでセキュリティを担保する仕組みとして espar を導入して頂くことが決まっているほか、プレスリリースにエンドースを寄せて頂いたM2Mテクノロジーズ様には、同社が手がけられるサイト改ざん検知サービスの仕組みと WP Guard を連携して頂くことにもなっています。

当社は元々、SYNCNELというiOSデバイス向けクラウドサービスでセキュリティをウリにしてビジネスしていましたが、今度はWebサイトのセキュリティに 静的化 という視点で関わっていきたいと思います。

サーバの価格は一昔前に比べると随分と下がりました。AWS S3のウェブホスティングのように安価な仕組みもある時代です。ファイアーウォールや侵入検知システムやWAFなどの高度なセキュリティ製品をいれなくても、コンテンツの管理と公開の機能を完全分離 することで守るスタイルもアリではないか。そんな問題提起をしていければと思います。

このたび、発表しました WP Guard と高速静的化エンジン espar ともども、これからもフィードテイラーをどうぞ宜しくお願い致します。興味関心お持ち頂けましたら、こちらからお問い合わせ頂けたら幸いです。