WordPress サーバーを Alibaba Cloud ESA 経由でセキュリティ強化する話

現在は、Alibaba Cloud Elastic Compute Service の仮想マシンを直接インターネットに公開しているのですが、セキュリティ強化の目的で Alibaba Cloud ESA 経由に変更し、セキュリティを強化する話です。
ESA (Edge Security Acceleration)はCDN(高速配信) + WAF(Web層防御) + 高度DDoS + ボット対策 + エッジコンピューティングが一つまとまったサービスです。  今回のセキュリティ強化用途には最適なサービスとなります。

作業の流れ

最初に全体の作業の流れを整理しておきます。

  1. ESA コンソールでのドメイン登録
  2. ESA 側の証明書・TLS・WAF 設定
  3. トラフィック超過保護ルール(Overage Rules)の設定
  4. ECS(Apache / WordPress)側の設定調整
  5. DNS 切り替えとサーバへの直接アクセスのブロック設定

ESA コンソールでのドメイン登録

Alibaba Cloud コンソールにログインし、Edge Security Acceleration の管理画面に移動します。

Add Website

ESA コンソールの 「Websites」> 「Add Website」 をクリックし、Webサイトの追加を進めます。

ここでは root domain を指定します。 この後選ぶプランで無償の”Entrance”を利用するには root domain の指定が必要なため。 サブドメインを利用する場合は有償プランが必要とのこと。

Locationは “Global (Excluding the chinese Mainland)” を選択します。 右隣のGlobalやChina Mainland を利用するには中国の ICP filing が必要です。

DNS Setup には “CNAME”を選択します。 今使っている Alibaba Cloud DNS を継続して利用します。

Planは無償の “Entrance”を利用します。 有償の Pro は 15 USD / Month です。 1年間で買えば 50% off の 7.50 USD / Month までディスカウントされますが、まずは無償で進めます。

支払い画面は省略しますが、1分もかからずに購入は完了です。

Veriy Domain Ownership

次は DNS ドメインの確認です。

指定のTXT recored を作成します。

面白いことに Cloudflare や AWS Route53、GCP DNS、Dyn DNS について設定画面の画像が紹介されています。 面白といったのはあまりこういうのを見たことがなかったのと、Alibaba Cloud DNS については紹介がなかったためです。

Cloudflare だとこんな画像が案内

私のDNSゾーンはAlibaba Cloud DNS で管理しているので Alibaba Cloud DNS で TXT レコードを追加します。 TXTレコードの登録で特に注意するべきことはありませんが、せっかく Alibaba Cloud DNS を使っているので TTL を 1秒にしています。

dig コマンドで登録したTXTレコードが正しく応答されるか確認します。

問題なく応答がかえってきたのでOKです。

bash
 $ dig txt _esaauth.bigriver.jp.

; <<>> DiG 9.18.39-0ubuntu0.22.04.6-Ubuntu <<>> txt _esaauth.bigriver.jp.
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37594
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;_esaauth.bigriver.jp.          IN      TXT

;; ANSWER SECTION:
_esaauth.bigriver.jp.   10      IN      TXT     "verify_f492a50b931ee7fa594d3629cca4a335"

;; Query time: 4 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Sat Oct 03 20:33:21 CST 2026
;; MSG SIZE  rcvd: 101

元の画面で”Verify”をクリックし、ESA 側でTXTレコードを確認させます。

クリックすると一瞬正常終了のメッセージが見えたような気がして閉じてしまいました。

まだStatusはPendingですが設定を続けていきます

Origin Pools

Originとして woredpress サーバ(Alibaba Cloud Elastic Compute Service の仮想マシン)を登録します。

Traffic > Origin Pools から “Create Origin Pool”をクリックし、

まずは Origin Server を追加します。

Alibaba Cloud ECS の仮想マシンを Origin にしますが、Origin Address には Public IP Address を指定します。

これで Origin Pools の設定は完了です。

ESA 側の証明書・TLS・WAF 設定

Edge Certificates

Edge Certificates(ユーザー ↔ ESA 間の TLS 終端)を設定します。

“Upload Custom Certificates”をクリックします。

Alibaba Cloud SSL で購入し ECS のApacheで利用している証明書をリストボックスから選びます。

別途購入した証明書を使う場合は Certificate Source で Custom Certificate を選び、Private Key と Public Key を指定することになります。

登録した証明書のStatus が “Normal”になればOKです。

Origin Certificates

次はOrigin TLS / Back-to-Origin Protocol(ESA ↔ ECS 間の暗号化)を設定していきます。

“Origin Protocol and Port” の “Configure”をクリックします。

Origin Protocol に”HTTPS”を指定します。

これで Origin Protocol の設定も完了です。

WAF

WAF(マネージドルール・攻撃防御)の有効化を行います。タブ「Managed Rules(マネージドルール)」から設定します。

Managed Ruleset を”Enable”にします。

Managed Rulesetが有効なりました。

“Edit”から既定の設定を確認しておきます。 とりあえずは既定のままで進めて今後問題が出たらチューニングしていきます。

ポイントは Basic Protection Rules (Free) の Protection Level が”Medium (Recommended)”になっていることです。 推奨なのでいったんはこのままとしますが、問題が出る場合はここを緩めるか、本当にチューニングする場合は有償のProに移行してルールをカスタマイズすることになるかなと。

その他、Request のフィルタリングや時間帯などもチューニングできそうですがまずは既定のままとします。

他にもいろいろWAFで設定できるのですが大体有償版にアップグレードしないと使えない感じでした。

これでWAF設定も完了です。

トラフィック超過保護ルール(Overage Rules)の設定

ESA の無料枠を超えた場合を想定し、制限をかけます。 可能性は低いとはいえ、万が一大量のトラフィックをさばいた結果莫大な課金が発生しても困ってしまうためです。

Usage Cap

左メニューの一番下にある”Usage Cap”から上限を設定します。 “Create Rule”をクリックします。

無償プランの無料枠は以下の通りです。 上限の80%位で Cap Rule を設定することにします。

  • 月間データ転送量(Traffic): 50 GB / 月
  • 月間リクエスト数: 300 万リクエスト / 月

これで cap の設定も完了です。 無料枠を超えての課金が発生しないようになるので少し安心です。

ECS(Apache / WordPress)側の設定調整

WordPressでのリダイレクトループ防止の設定

ESA ↔ ECS 間が HTTPS で正しく通信されていることを WordPress に認識させる設定です。

私は以前にAlibaba Cloud の Load Balancer を利用していたことがあり、その時にすでに設定済。

wp-config.php
if ( ! empty( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' ) { $_SERVER['HTTPS']='on'; }

Apache のmod_remoteip の設定(X-Forwarded-forを利用するための)

アクセスログや Security Center に記録される IP アドレスを、ESA の IP ではなく「実際のアクセスするデバイスの IP」に変換する設定です。 X-Forwarded-for の情報に読み替えます。

まずは 設定ファイルを作成します。 1行目は X-Forwarded-for の情報に読み替えの設定。

2行目は Alibaba Cloud の管理プレーンの IP アドレスを内部IPとしての定義。

/etc/apache2/conf-available/remoteip.conf
RemoteIPHeader X-Forwarded-For
RemoteIPInternalProxy 100.64.0.0/10

次にmod_remoteip を有効します。

bash
モジュールの有効化
$ sudo a2enmod remoteip
Enabling module remoteip.
To activate the new configuration, you need to run:
  systemctl restart apache2


apacheの再起動
$ sudo systemctl restart apache2


モジュール有効化の確認
$ sudo apachectl -M | grep remoteip
 remoteip_module (shared)

DNS 切り替えとサーバへの直接アクセスのブロック設定

DNS切り替えとオリジンサーバへのアクセス制限

Add Record

ESA にどのWebサイトを対象とするか、ESA のDNS画面で登録します。

“Add Record”をクリックします。

hostname には www.bigriver.jp となるように”www”を指定します。

Recorded Value には”Origin Pool”を選択し、Origin Poolでは別途作成したpoolを選択します。 このプール名は一見 DNS にレコード登録が必要に見えますが不要です。 ESA内での識別子となります。

Business Typeを選びます。 ”Web”を選択し、”OK”をクリックします。

Recordの追加が問題なく完了しました。 次は CNAME をDNSドメインに追加します。

ESAの画面でCNAMEの設定値を確認しておきます。

Alibaba Cloud側でCNAMEレコードを追加します。

このあと、Webブラウザからアクセスできることを確認し、問題なくアクセスできました。

ESA の overview 画面でトラフィックを処理していることも確認できました。

ECSのセキュリティグループでのアクセス制限

最後に ECS の Security Group で https 通信の送信元を制限します。

これまではすべての送信元を許可していましたが、ESA からのアクセスに限定します。

しかし、ESA のIPアドレスリストの入手には ESA の Free バージョンではなく Pro 以上の有償バージョンが必要なことがわかりました。 

今回は Pro を購入してのアクセス制限はいったんあきらめます。 以下の観点で再度整理、検討してみて本当に必要かどうかを見極めます。

    wordpress 管理者画面へのアクセス制限

    wordpress の管理者画面のアクセス制限をもともとはIPアドレスで行っていました。 今回、ESAを導入したことで送信元がESAのIPアドレスとなります。  アクセスすると制限されます。

    今回はシンプルにアクセスする端末の名前解決をStaticに行うことにしました。 DNS 問い合わせではなく hosts ファイルを使用します。

    以上