ボットトラフィックは、未だかつてないほど増加しています。Distil Networksの調べでは、2017年には悪質なボットが全ウェブサイトトラフィックの21.8%を占めており、前年比9.5%増。さらに、悪質なボットトラフィックの74%は、複数のIPアドレスに攻撃を分散させたり、ユーザーの行動をシミュレートすることで検知を回避する、中程度から高度なボットです。悪質なトラフィックをフィルタリング、またはブロックする方法を知らない企業にとって、これは大きな課題となります。
そこでこの記事では、Sucuriのウェブアプリケーションファイアウォール(WAF)を使用した簡単な対策をご紹介。WordPressサイトがDDoS攻撃を受けている場合でも、過剰なボットやプロキシトラフィックに悩まされている場合でも、WAFを実装すれば、ほぼ瞬時に問題を解決することができます。
WordPressサイトにSucuriのファイアウォールを設定する方法と適切な設定、そして推奨プランを詳しく見ていきましょう。
Sucuriとは
Sucuriは、万能なウェブサイトセキュリティツールです。セキュリティの脅威からビジネスを保護するだけでなく、進行中の攻撃を軽減するのにも役立ちます。CDN、マルウェアスキャン、ハッキング修正、DNS監視、ファイル変更検出、ブルートフォース対策など、さまざまな製品やサービスを提供しています。
今回は、Sucuriのウェブアプリケーションファイアウォール(WAF)に絞ってご紹介していきます。Sucuriのファイアウォールはクラウドベースで、ウェブサイトのハッキングや攻撃(悪質なトラフィックも含む)を阻止するように設計されています。基本的には、DNSをファイアウォールに紐付けると、ファイアウォールがトラフィックをWordPressサーバーにルーティングする仕組みです。ウェブアプリケーションファイアウォールが仲介することで、トラフィックがサーバーに到達する前にブロックします。

日々進化する脅威の検出と軽減を向上するため、Sucuriは常に新たな方法を研究しています。さらに、Sucuriでは独自のカスタムルールを設定することも可能です。
Sucuriを使用するメリット
Sucuriのようなサービスは本当に必要なのかと疑問を抱く方もいるでしょう。WordPressサイトとホスティングサーバーをWAFが仲介することには、デメリットがありません。むしろこの先、時間と手間を削減できる可能性が高いです。
しかし、実際に問題が発生するまで、Sucuriのようなセキュリティサービスを利用する人はほとんどいないのが現状です。もっとも一般的な問題は、DDoS攻撃やボットやプロキシサーバーからの悪質なトラフィックが挙げられます。「悪質」と言っても、第三者がサイトをハッキングしようとしているとは限りません。サーバーサービスの過負荷の問題を引き起こすのは通常、大量のトラフィック。利用しているプランの訪問数や帯域幅などの上限を超過してしまうという点では、「悪質なトラフィック」と言えます。共用サーバーを使用している場合は、WordPressサイトが一時停止される可能性もあります。
以下、夜中に突然悪質なプロキシIPトラフィックが発生したサイトの例を見てみましょう。MyKinstaの分析機能を使用すると、いつこのトラフィックが発生したかを正確に確認することができます。このサイトでは、1日平均125件の訪問数から1,500件にまで急増しました(のちに一時的な問題ではないことが判明)。また、1日あたり25MBの帯域幅使用量が25GBに。これは大変な事態です。

分析画面を詳しく見ると、イタリアのアレッツォからの訪問がもっとも多く、過去30日間で400万回以上のリクエストがあったことがわかります。通常は、米国からのトラフィックが90%以上を占めていたため、問題を引き起こしている地域は容易に特定できました。

Kinstaをはじめとするほとんどのサーバー会社では、一般的な悪質ボットをブロックし、スパムIPをフィルタリングし、IP制限などのセキュリティ設定を行っていますが、SucuriやCloudflareのようなWAFほどの効果はありません。
余談ですが、私たちがWordPressサーバーとメールサーバーは分けることを推奨する理由はここにあります。それぞれの分野や業界で、最高品質のソリューションを選んで使用することが、ビジネス成功の鍵。Kinstaは、高性能なホスティングと世界トップクラスのサポートの提供に全力を注いでいます。
Sucuriを使用する前に試すべきこと
WordPressサイトで悪質なトラフィックが発生している場合、Sucuriを使用する前に試しておきたいことがいくつかあります。
1. 個々のIPアドレスをブロックする
1つ目は、問題のあるIPアドレスを個別にブロックしてみること。Kinstaをご利用の場合は、MyKinstaの「分析」画面にある「リクエスト数上位のクライアントIP一覧」を確認してください。

IPをGoogleで数回検索してみると、多くはイタリア(アレッツォ周辺)からのプロキシIPアドレスであることが判明しました。ボットかスパムである可能性が高いことがわかります。

IP制限ツールを使って、IPアドレスをブロックすることができます。その後、訪問数と帯域幅を監視し、問題が解決されたかどうかを確認します。場合によっては、いくつかの悪質なIPがサイトを攻撃しているだけで、一度ブロックすれば解決することもあります。その一方で、IPをブラックリストに登録するという面倒な作業が必要になる場合もあり、そうなると一筋縄ではいきません。

Kinsta以外をご利用の場合は、WordPressのセキュリティプラグインを使用するという手があります。
ただし、セキュリティプラグインの使用には注意が必要です。ほとんどのプラグインは、常時有効化されていること、そしてスキャン機能によってパフォーマンスに悪影響を与えます。Kinstaでは、この理由からいくつかのセキュリティプラグインの使用を禁止しています。また、Google Cloud Platformでロードバランサーを利用しているため、一部セキュリティプラグインのIPブロック機能が正しく動作しない場合もあります。
2. ジオブロッキング
地域または国全体からのトラフィックをブロックしてみるのも効果的です。Kinstaではカスタマーサポートにその旨を連絡し、ブロックしたい国のISOコードを提供するだけでブロックすることができます。位置情報を利用したトラフィック拒否についてはこちらをご覧ください。
または、IP Location BlockやWordFenceのような(Kinstaではサポート対象外)、ジオブロッキングをサポートするプラグインを使用することも。
セキュリティプラグインを使ってもうまくいかない場合は、Sucuriのような有料WAFの導入を検討してください。プラグインをインストールしたり管理したりする必要がなく、サイトとサーバーの間に設置するだけでOKです。パフォーマンスを考慮すればこれがベストな方法で、問題が解決した後も、継続的に悪質なトラフィックをブロックすることができます。
Sucuriの推奨プラン
Sucuri Pro Firewall以上のプランをおすすめします。Proプラン(月額およそ20ドル)には、独自SSL証明書のサポートに加え、レイヤー3、4、7の高度なDDoS攻撃対策が含まれます。Cloudflareの月額200ドルのプランには、レイヤー7の保護しか含まれていません。
レイヤー7は、トラフィックの急激な変化を自動的に検出し、HTTPフラッドやDNSベースの攻撃から保護するのに役立ち、オリジンサーバーに到達することはありません。セキュリティに精通していない限り、小規模なDDoS攻撃と、サイトを圧倒する単なる悪質なトラフィックの区別は困難です。
HTTPフラッド攻撃は、レイヤー7(アプリケーション層)に対する攻撃の一種であり、SSLセッション中のURLデータ取得(画像、情報など)のように、情報を取得するために使われる標準的なGET/POSTリクエストを利用します。HTTP GET/POST フラッド攻撃は、不正なパケット、スプーフィング、またはリフレクションの技術を用いないボリュメトリック攻撃を意味します。(出典: Sucuri)
ProプランではHTTP/2もサポートされており、パフォーマンスの面で絶対に手にしたい機能です。以下の機能はすべてのプランに付帯します。
- 侵入検知システム
- 侵入防御システム
- 管理された監査ログ/セキュリティ
- HTTPフラッド攻撃対策
- ブルートフォース対策
- 仮想パッチとハードニング
- SQL、XSS、コードインジェクションの防止(SQLインジェクションの詳細はこちら)
- ワンクリックの二要素認証(2FA)、キャプチャ、パスワード保護
- 外部CDNサポート
- ロードバランシング
加えて、30日間の無料トライアルも利用することができます。
Sucuriのファイアウォールを設定する方法
それでは、先ほどご紹介したProプランを利用して、WordPressサイトにSucuriファイアウォールを設定する手順をご紹介します。設定は非常に簡単で、たった数分で完了します。
ステップ1
まずは、SucuriのProプランにサインアップします。
ステップ2
Sucuriの管理画面に入ったら、「Protect My Site Now!」をクリックします。

ステップ3
ドメイン名を入力し、以下の設定を行います(今回は3つともチェックを外した状態で進めていきます)。
- I am currently under a DDoS attack(現在DDoS攻撃を受けている):この項目にチェックをすると、Sucuriの強力な機能の一部が自動的に有効化されます。現在攻撃を受けているという確信がある場合は選択してください。この設定は、後からいつでも変更可能です。
- I want you to restrict access to admin directories to only whitelisted IP addresses(管理者用ディレクトリへのアクセスをホワイトリストに登録されたIPアドレスのみに制限):顧客を考慮し、ECサイトではこの設定を有効にしないことをおすすめします。
- I want to use the Sucuri’s DNS servers(Sucuri DNSサーバーを利用):Sucuriには、DNSインフラストラクチャを使用する使用するオプションがあり、最適化されたグローバルパフォーマンス、フェイルオーバー、高い可用性を確保するための地理的ルーティングが可能になります。今回は、サードパーティDNSサービスを使用するため、選択しません。Kinstaのお客様で、KinstaのDNSを使用しており、今後もKinstaでDNSレコードを管理したい場合も選択しないでください。

ステップ4
重要)SucuriのProプラン以上を利用する場合、DNS変更前にファイアウォールにGoDaddy SSLをインストールすることができます。GoDaddyの証明書は、自動更新され、追加料金が発生しません。そのため、Proプランへの移行はスムーズで、ダウンすることもありません。
カスタマーサポートに問い合わせて、GoDaddy証明書のインストールを依頼した後、DNSを更新しましょう。
SucuriでLet’s Encrypt証明書を使用する
別の方法として、無料のLet’s Encrypt証明書を使用することもできます。ただし、これらの証明書は、ドメインをSucuriに紐付けた後に取得可能です。紐付けはアクセスの少ない時間帯に行うことをおすすめします。
KinstaでLet’s Encrypt証明書を使用する
Kinstaでは、無料のLet’s Encrypt証明書を提供しています。使用するには、カスタマーサポートに連絡を取り、証明書の検証を転送するための設定を依頼してください。これでHTTPSの設定が適切に行われ、MyKinstaから無料のSSL証明書をインストールすることができます。
ステップ5
続いて、ドメインを指定します。ダッシュボードを下にスクロールし、DNS情報を入力するセクションまで移動します。ドメインのAレコードを更新し、Sucuriのファイアウォールに紐付けます。これは通常、ドメインレジストラまたはDNSサービスで行います。

注意)Sucuriでは、現在のIPアドレスが自動的に取得されます。Sucuriにドメインを指定すると、自動的にWordPressサーバーにトラフィックがルーティングされます。
KinstaのDNSを使用している場合は、MyKinstaから設定可能です。ドメインをクリックし、提供されたSucuriのIPアドレスでAレコードを更新してください。

DNSの伝搬には、最大48時間かかることがあります(通常は数時間以内)。DNSが伝搬したかどうかは、whatsmydns.netで確認することができます。あるいは、Sucuri管理画面の更新アイコン(以下参照)をクリックして、ドメインがSucuriに紐付いているかを確認することも可能です。

すべてのルーティングが正しく行われたことが検出されると、以下のように緑色に変わります。

ステップ6
WordPressサーバーにファイアウォールが実装されている場合は、SucuriのIPアドレスをホワイトリストに登録することをお勧めします。ホスティングサーバーへの接続は、すべてこのファイアウォールを通過するため、誤ってブロックされるのを回避することができます。注意)以下はIPアドレスの例です。アカウントに基づく正しいSucuriのIPアドレスは、管理画面を参照してください。
192.88.134.0/23 185.93.228.0/22 2a02:fe80::/29 66.248.200.0/22
Kinstaのご利用の場合
Kinstaをご利用の場合は、カスタマーサポートに問い合わせ、適切なSucuri WAFルールの追加を依頼してください。SucuriのIPアドレスはすでにホワイトリストに登録されていますが、問題なく動作するようにSucuriと連携をとり、追加でNginxルールを設定しなければなりません。
Sucuriの適切な設定
基本的には、 SucuriのWordPressプラグインを使用することは推奨されません。WordPressサイトとホスティングサーバーの間を仲介し、サーバーレベルで機能するSucuriファイアウォールを使用するのが得策です。
最後に、Sucuriの管理画面で有効にしておきたい設定をいくつかご紹介します。
高度なセキュリティ設定
「Security」タブでは、以下の機能を有効にすることをおすすめします。
- XMLRPC、Comments and Trackbacks blocked:サイトでコメントを無効にしている場合、または外部のコメントシステム(Disqusなど)を使用している場合は、スパムの可能性が高いため、コメントの試みをブロックすることができます。WordPress標準のコメントを使用している場合は、有効にしないでください。
- Block anonnymous proxies and the top three attack countries:有効にすると、中国、ロシア、トルコからのアクセスを防ぐことができます。各国のユーザーはコンテンツを閲覧することはできますが、アカウントの登録、コメントの投稿、ログインの試行はブロックされます(読み取り専用モード)。IPアドレスを隠すために匿名プロキシサービスを使用しているユーザーにも同じ制限が適用されます。
- Aggressive bot filter:空のユーザーエージェント、PHPで始まるユーザーエージェント、主要ブラウザの不適切なユーザーエージェントなど、実際のブラウザと一致しない無効なユーザーエージェントがブロックされます。
- Advanced evasion detection:この高度な検出回避シグネチャも選択することをおすすめします。ただし、ASCII文字以外のURL(日本語、インド語、ロシア語など)をサポートしているサイトでは、無効にしてください。

他にも、「Enable Emergency DDoS protection」(緊急のDDoS対策を有効にする)は、サイトが今現在攻撃を受けていると思われる際に非常に役立ちます。HTTPフラッド対策は、JavaScriptが無効なブラウザ(主要な検索エンジンを除く)を使用しているユーザーの訪問をブロックします。しかし、最初の読み込み時にHTTPリクエストを生成するため、正常化した後にこれを無効にするのが得策です。
または、HSTSのようなセキュリティヘッダーを有効化することも可能です。
キャッシュ設定
「Performance」タブの「Caching Level」ページでは、Sucuriのキャッシュ処理方法を設定することができます。WordPressサイトはすでにキャッシュが正しく設定されているため、「Site caching」の選択をすることで、Sucuriのキャッシュの代わりに、オリジンサーバーのキャッシュが使用されます。Kinstaのお客様のサイトでは、引き続き高速のフルページキャッシュとKinsta独自のキャッシュルールが適用されます。

Sucuri推奨のキャッシュを使用することも可能ですが、WooCommerceやEDDのような高度に動的なサイトでは注意が必要です。Kinstaでは、カートページ、決済ページ、そしてCookieなど、特定のものをキャッシュしないためのルールを設定しています。Sucuriでは、ECサイトで独自のサイトヘッダーを使用することが推奨されています。
CDN
Sucuriでは、サードパーティCDN(KeyCDN、MaxCDNなど)または独自のCDNを使用することができます。SucuriのCDNは、米国、ヨーロッパ、アジアで6つのSuperPOP、オーストラリア、ブラジル、フィリピンに3つのCDN POPを持つ、高速なHTTP/2 Anycastネットワークを備えています。Sucuriファイアウォールを利用している場合は、無料で使用することができます。

KinstaのCDNとSucuriのCDNを併用することもできますが、SucuriのCDNも高速で信頼性に優れており、基本的にはどちらか一方を使用してください。前者を使用する場合は、「CDN support」タブで「Others」を選択してください。
サードパーティのCDNを使用してサイトをセットアップすることも可能です。主要サードパーティCDNの統合方法は以下を参照してください。
圧縮
「Performance」タブの「Compression」ページで圧縮機能も有効化することをおすすめします。これにより、ネットワーク経由で送信されるバイト数が削減され、サイトのパフォーマンスが改善されます。

以上です。Sucuriを実装してから数日後、その結果に驚くはず。Sucuriを導入した先ほどのサイトでは、帯域幅が即座に低下し、1日あたりの訪問数が以前の平均値に戻りました。

その他の便利な機能とレポート
Sucuriを設定した後は、サイトのトラフィックの質をさらに高めるのに役立つ便利な機能やレポートを活用しましょう。
アクセス制御
「Acces Control」タブでは、IPとパスのホワイトリストとブラックリスト、ユーザーエージェントのブロック、Cookieのブロック、HTTPリファラのブロック、さらに特定のページをキャプチャ、二要素認証、またはシンプルなパスワードで保護することができます。また、ジオブロッキング機能で、国全体も簡単にブロック可能です。

リアルタイムビュー
リアルタイムビュー機能も素晴らしく、現在のリクエストのログ一覧を即座に確認できます。疑わしいものはワンクリックでブラックリスト、またはホワイトリストに登録することも。

ブロックされた攻撃
「Blocked Attacks」チャートでは、DDoS攻撃を含め、ブロックされている攻撃の割合をすばやく確認できます。同じウィンドウの他のチャートには、ブラウザの種類、デバイス、HTTPレスポンスコード別のトラフィックも表示されます。

1時間あたりの平均トラフィック
「Avarage Traffic per Hour」チャートでは、トラフィックのピーク時間帯やブロックされているリクエストの割合を確認できます。

国別トラフィック
「Traffic by Country」チャートでは、特定の地域からのトラフィック量を確認できます。ワンクリックで国全体を一時的にブロックすることも可能です。

実際のIPアドレスを表示する
すべてのユーザーが同じIPアドレスを使用しているように見える場合は、単にWAFによるものです。アプリケーションまたはホストが実際のユーザーIPを必要とする場合は、Sucuriの公式ドキュメントをご覧ください。
まとめ
Sucuriのファイアウォールは、非常に簡単に設定することができます。質の低いトラフィック、DDoS攻撃、ボットなどにお悩みの場合は、ぜひ導入を検討してみてください。悪質なトラフィックがフィルタリングされ、正当な訪問者だけがアクセスできるようになるため、月額20ドルを支払う価値は十分にあります。また、サイトのフロントエンドとバックエンド両方でパフォーマンスが向上することは、言うまでもありません。
SucuriをWordPressサイトに導入した経験はありますか?以下のコメント欄でお聞かせください。