0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

HerokuアプリにExpedited WAF導入

Last updated at Posted at 2025-05-26

前提

  1. Windows
  2. NodeJSアプリ
  3. Heroku CLIインストール済 & heroku login 実行済
  4. Expedited WAFのプラン決定済 → https://elements.heroku.com/addons/expeditedwaf#pricing
  5. 当該アプリに付与するカスタムドメイン名決定済
  6. 当該ドメインのDNSへのCNAMEレコード・Aレコードの追加・削除が可能

手順その1(Expedited WAF導入前に最低限のアプリを作成してhttps://カスタムドメイン名にアクセス可能としておく)

  1. Herokuダッシュボードにブラウザでアクセス
  2. Herokuアプリを作る
  3. 当該アプリのSettingsタブを開く
  4. Buildpacks欄のAdd buildpackボタンからnodejsを追加(他にも追加予定のビルドパックがある場合は先に追加しておく)
  5. コマンドプロンプトで任意のフォルダに移動し、以下を実行して最低限のアプリを作成
    heroku git:clone -a <アプリ名>
    cd <アプリ名>
    echo { ^"scripts^": { ^"start^": ^"node index.js^" } } > package.json
    echo require('http').createServer((_, res) =^> res.end('ok')).listen(process.env.PORT) > index.js
    git add .
    git commit -m "minimum app"
    git push heroku master
    
  6. ブラウザに戻り、SSL Certificates欄のConfigure SSLボタンからACMを有効化
  7. Domains欄のAdd domainボタンから使用予定のカスタムドメイン名を追加
  8. 表示されたDNS Target(app-xxx.xxx.herokuspace.com形式)を使用して、DNSにCNAMEレコード(★1)を一時的に追加 (DNS作業1/3、ExpeditedWAFからのアプリ正常稼働確認用一時レコード追加)
    • Record Name:<カスタムドメイン名>
    • TTL:60(後で本レコードを削除する予定があるため短めにしておく)
    • Class:IN
    • Type:CNAME
    • Canonical Name:<DNS Target>
  9. Domains欄のACM StatusがDns Verifiedになることを確認
  10. ブラウザまたはコマンドプロンプトでcurl -I https://<カスタムドメイン名>を実行し、HTTPステータス200 OKが返ることを確認

手順その2(Expedited WAFインストール・セットアップ)

  1. ブラウザに戻り、Resourcesタブを開く
  2. Add-on Services欄でExpedited WAFを検索して押下、プランを選択してインストール
  3. アドオン名Expedited WAFを押下
  4. Select Domainボタンを押下
  5. 表示されたドメイン所有者確認用のCNAME NAME・CNAME CONTENTを使用して、DNSにCNAMEレコード(★2)を一時的に追加 (DNS作業2/3、ExpeditedWAFからのドメイン所有者確認用一時レコード追加)
    • Record Name:<CNAME NAME>(枠外に表示されるTLDを含めたFQDNで指定)
    • TTL:60(後で本レコードを削除する予定があるため短めにしておく)
    • Class:IN
    • Type:CNAME
    • Canonical Name:<CNAME CONTENT>
  6. 「Check for DNS CName」ボタンを押下(★2を検知して勝手に画面が進むかも)
  7. WAF Buildingが終了してメールが届く&次の画面が表示されるまで待つ(約11分)
  8. 表示されたAレコード値(IPアドレス)を使用して、DNSに以下の操作を行う (DNS作業3/3、一時レコード削除、WAF経由アクセス用正式レコード追加)
    • ★1のCNAMEレコードを削除
    • ★2のCNAMEレコードを削除
    • 以下のAレコードを追加
      • Record Name:<カスタムドメイン名>
      • TTL:3600(標準的な値)
      • Class:IN
      • Type:A
      • Value(IPアドレス):<表示されたAレコード値>
  9. 「Refresh DNS Results」ボタンを押下し、完了メッセージが表示されることを確認
  10. コマンドプロンプトでnslookup -type=CNAME <カスタムドメイン名>を実行し、結果が当該ドメインのDNSサーバ情報のみであることを確認 (削除後2〜5分してから実行)
  11. コマンドプロンプトでnslookup -type=CNAME <★2のRecord Name>を実行し、Non-existent domainになることを確認 (削除後2〜5分してから実行)
  12. コマンドプロンプトでnslookup -type=A <カスタムドメイン名>を実行し、結果が表示されたAレコード値であることを確認
  13. コマンドプロンプトでcurl -v https://<カスタムドメイン名>を実行し、結果がok、かつHTTPステータスが200、かつServerヘッダがSucuri/Cloudproxyである(WAF経由での応答)ことを確認

手順その3(Expedited WAF設定)

  1. Manage your WAFボタン押下
  2. Home画面で各種設定のサマリが見れる、ACTIVE/Inactiveを押下して詳細設定画面に入れる項目もある
    image.png
    image.png
    image.png
    image.png

文中のLearn Moreとかは以下やその子ページへのリンク
https://expeditedsecurity.com/
https://expeditedsecurity.com/heroku/

以下、ブラウザの機能で翻訳
image.png
image.png
image.png
image.png

注意事項

  1. HerokuアプリのSettingsのカスタムドメイン・SSL証明書を削除しないこと
    (WAFからの通信が通らなくなる)
  2. WAFで/.well-known/acme-challenge/をブロックしないこと
    (Let's EncryptからのACMEチャレンジが失敗する)
    https://letsencrypt.org/ja/docs/challenge-types/
  3. 認証必要なURLや動的コンテンツを返却するURL等の末尾に「.jpg」等の拡張子をつけないこと
    (静的ファイルだと思われてWAFがキャッシュしてしまう)
    http://docs.expeditedsecurity.com/article/30-asset-file-caching

以上

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?