AWS/Azure

自社WebサーバにAWS WAFを適用しました(4)~AWS WAFとALBの初期設定~

この記事は投稿日から1年以上経過しています。

こんにちは。
タイトルの通り、自社WebサーバにAWS WAFを適用しまして、
正常に稼働していることが確認できた頃合いだったので、
社内への技術的な共有も兼ねて寄稿することにしました。

若手エンジニア志望者を募集!支度金あり

全5回以下のような構成となります。

  1. 構成編
  2. 費用算出
  3. 構成変更における課題
  4. AWS WAFとALBの初期設定
  5. 運用後の経過

AWS WAFとALBの初期設定にあたって

今回はロードバランシングの要件がなかったため、簡単な設定のみでした。
Webアプリケーションの前段にロードバランサを置く場合、
セッション維持の方法などがガラッと変わるので、複雑な対応が必要になります。
必要に応じて、事前検証をするようにしてください。

AWS WAFの初期導入設定ポイント

①   精査除外用ルールを作る

以下は除外することを検討するとよいです。
- 脆弱性診断用IPアドレスからのリクエスト

 

②   適用するマネージドルールを検討する

AWS マネージドルールルールグループリスト

https://docs.aws.amazon.com/ja_jp/waf/latest/developerguide/aws-managed-rule-groups-list.html

費用算出の時点で既にやっていましたが、各ルールグループの説明を読みつつ、
サーバに必要なものかを確認します。

③   マネージドルールのアクションを [ Count ] に変更する。

可能であれば、アクションを [ Count ] へ変更して、検知状態を確認するべきです。
LogStare Quintを使えば、導入時のログ分析は特に問題ないと思ったため、
[ Count ] にて様子を見ていました。

ALBの初期導入設定ポイント

設定項目数が多いため、注意が必要な設定をピックアップしています。

①   セキュリティポリシー

(以下引用)
ロードバランサーは、セキュリティポリシーと呼ばれる
Secure Socket Layer (SSL) ネゴシエーション設定を 使用して、
クライアントと SSL 接続を管理します。

TLS接続確立時に、サーバサイドで利用する暗号化プロトコル、暗号化スイートを設定します。
レガシーなシステムではクライアントサイドの都合で、
古いTLSプロトコルを許容しないといけないことがあります。
(クライアントが提示できる暗号化スイートとサーバが許可する暗号化スイートが一つも一致しないとTLSハンドシェイクが失敗します。)
システムの性質に応じて、設定変更を検討する必要があります。

②   TLS バージョンと暗号ヘッダー

(以下引用)
有効にした場合、ロードバランサーは、クライアントリクエストに 2 つの TLS ヘッダー (x-amzn-tls-version および x-amzn-tls-cipher-suite) を追加してから、そのリクエストをターゲットに送信します。

TLSバージョン及び暗号化スイートを取得する必要はないと判断したため、無効にしています。
「セキュリティポリシー」を切替える前に有効化して、情報を集めるという使い方ができそうです。

③   HTTP/2

(以下引用)
プロトコルバージョン HTTP/2 を使用してロードバランサーにリクエストを送信します。

無効にしています。
HTTP/2では仕様上、全てのHTTPヘッダが小文字になります。サーバへ影響が出る可能性があり、
今回の作業では切替えない判断をしました。今後の改善事項になりそうです。

後日、先輩社員からの指摘によって、クライアントとALB間をHTTP/2にして、
ALBとサーバ間をHTTP/1.1で通信をするようにしたところ、
ALBとサーバ間では小文字になったHTTPヘッダをもとに戻しているような挙動が見られました。
オリジナルのヘッダ名であるのかは保証できませんが、バックエンドへのサーバの影響は抑えられそうです。

④   WAFのフェイルオープン

(以下引用)
Application Load Balancer が AWS のウェブアプリケーションファイアウォール (WAF) に接続できない場合に、バックエンドターゲットへのリクエストを許可します。

攻撃によるリスクが高いサーバではないので、有効にしています。
LogStare Quintを使って、フェイルオープンの発生を検知できるようにしているのですが、
過去3ヶ月間一度もフェイルオープンは起きていません。

⑤   Connection idle timeout

(以下引用)
The amount of time a client or target connection can be idle before the load balancer closes it.

ロード バランサーがクライアント接続またはターゲット接続を閉じる前に、
クライアント接続またはターゲット接続がアイドル状態でいられる時間とのことです。
当初はサーバのデフォルト値5秒に合わせていましたが、
一部のシステムで504 Gateway Timeoutが発生したことが確認されたので、少し延ばしていました。
LogStare Quintで生成されるアクセスログレポートをチェックすると、
ALBが応答したコードが確認できるため、時々参照しています。

⑥   Desync緩和モード

(以下引用)
アプリケーションにセキュリティリスクを与える可能性のあるリクエストを、
ロードバランサーがどのように処理するかを決定します。

RFC7230(HTTPのルール)に違反するリクエストをどれだけ許容するのか決める設定です。
よほどセキュリティに妥協できない場合でなければ、「Defensive」が推奨になります。
ALBのアクセスログに判定結果も残るため、
LogStare Quintで生成されるアクセスログレポートをチェックすると傾向が確認できます。

⑦   無効なヘッダーフィールドを削除(Drop invalid header fields)

(以下引用)
有効ではないヘッダーフィールドを持つ HTTP ヘッダーを、ロードバランサーで削除する (true) か、
ターゲットにルーティングする (false) かを示します。

HTTPリクエストヘッダに対して特別な処理をかけることもなく、
不具合を起こすようなヘッダは削除したほうが良いと判断したため、trueにしています。
レガシーなシステムにおいて有効化する際には、検証環境を構築したうえで、
動作確認を取ることが推奨されます。

まとめ

弊社環境では、構成がシンプルだったので、ALBの設定に悩むことはありませんでした。
今回は弊社環境で気にするべきだったポイントを列挙していますので、
皆様の環境でALB及びAWS WAFを利用される際には、改めて全ての設定値を確認してほしいのですが、
[ Connection idle timeout ] はバックエンドのサーバにも影響が及ぶので、
入念に確認をしたほうが良いと思います。

次回は実際に運用してみたうえでのレポートを記載していこうと思います。

若手エンジニア志望者を募集!支度金あり

LogStare Collector 無償版

記載されている会社名、システム名、製品名は一般に各社の登録商標または商標です。

当社製品以外のサードパーティ製品の設定内容につきましては、弊社サポート対象外となります。

自社WebサーバにAWS WAFを適用しました(3)~構成変更における課題編~前のページ

自社WebサーバにAWS WAFを適用しました(5)~運用後の経過~次のページ

ピックアップ記事

  1. 自社製品をAMIにしてAWSマーケットプレイスへ出品
  2. ログフォワーダー「okurun.jar」について
  3. IoT機器「Raspberry pi」とLogStare Collectorで温…
  4. Zabbixヒストリデータのレポート生成について

関連記事

  1. NW機器

    【2021/12/29更新】Log4jの脆弱性(CVE-2021-44228)に対する各UTM/IP…

    ※本記事の内容は、2021年12月13日現在の公開情報をもとに記載して…

  2. FortiGate

    【現場SE奮闘記 vol.2 】「天狗となったエンジニア」~FortiGate NATの仕様編~

    筆致についてはタイトル毎に統一されていません。あらかじめご了承ください…

  3. AWS/Azure

    NetworkELB関連メトリクス一覧

    当記事では、CloudWatch監視にて対応しているNetworkEL…

  4. LSCセキュリティアラート
  5. Windows/Linux

    WindowsServerにaws cliバージョン2をインストールする方法について

    当記事では、WindowsServerにaws cliバージョン2をイ…

  6. Azureマーケットプレイスへの出品

    AWS/Azure

    Azureマーケットプレイスに自社製品を出品する手順と注意点

    弊社では「LogStareCollector」をAWSマーケットプレイ…

若手エンジニア志望者を募集!
LogStare Collector 無償版
クラウド活用の「困った」「焦った」事例
月額200円でM356の監査ログの運用レベルUP LogStare M365
AWSのログ分析・モニタリングに 次世代のマネージド・セキュリティ・プラットフォーム LogStare

  1. 実践記事

    DNSキャッシュポイズニングやってみた
  2. SNMPを触ってみた

    ログ分析・監視テクニック

    SNMPとは?新入社員が生まれてはじめて触ってみた!
  3. ログ分析・監視テクニック

    nProbeであらゆる通信をログに記録し可視化する
  4. NW機器

    SonicWall UTMにSyslog送信設定を追加する方法について
  5. NW機器

    Nutanix Prism ElementにおけるSNMP監視/REST API…
PAGE TOP