
CloudWatch、S3、およびサンプリングAPIからAWS WAF v2ログを閲覧・リプレイするためのターミナルUI。YAMLフィルタリング、認証検出、curl/ブラウザリプレイを備える。
AWS WAF v2 のログブラウザ兼リプレイヤー。インタラクティブな TUI を備える。CloudWatch、S3、および WAF サンプリング API からログを取得し(SQLite キャッシュ付き)、認証検出と YAML ベースのフィルタリングを備えた分割ペインのターミナル UI に表示し、Firefox、Chrome、または curl を介してヘッダー/クッキー/ボディを完全に再現してリクエストをリプレイする。curl、JSON、HAR へのバッチエクスポートをサポートする。
uv pip install waf-fu
pipx install waf-fu
uv pip install git+https://gitrdun.trustedsec.net/cloud/aws/waf-fu.git
pipx install git+https://gitrdun.trustedsec.net/cloud/aws/waf-fu.git
git clone https://gitrdun.trustedsec.net/cloud/aws/waf-fu.git
cd waf-fu
uv pip install .
pipx install .
同梱の uv.toml は、uv pip が virtualenv を作成するのではなくシステム Python にインストールするよう設定する。pipx と uv tool install は常に独自の分離環境を使用する。
Python >= 3.12
AWS 認証情報をプロファイル、環境変数、またはインスタンスロール経由で設定すること。ソースごとの要件については IAM 権限 を参照。
| パッケージ | 最小バージョン | 必要な用途 |
|---|---|---|
| boto3 | any | AWS ログ取得 |
| selenium | 4.26 | Chrome および Firefox リプレイ |
| trio | any | Chrome CDP リプレイ内部処理 |
boto3 と selenium は pyproject.toml で宣言されており、自動的にインストールされる。trio は Chrome バックエンドの推移的依存関係である。
ブラウザリプレイはオプションである。Curl リプレイは追加の依存関係なしで動作する。
Firefox(ヘッダーの忠実性のために推奨):
| コンポーネント | 最小バージョン | インストール |
|---|---|---|
| Firefox | 120 | sudo dnf install firefox / sudo apt install firefox |
| geckodriver | 0.35.0 | sudo dnf install geckodriver / sudo apt install firefox-geckodriver または github.com/mozilla/geckodriver/releases (>= 0.35.0) |
| selenium | 4.26 | uv pip install 'selenium>=4.26' |
Firefox リプレイは WebDriver BiDi ネットワーク傍受を使用して、元のリクエストのメソッド、ヘッダー、クッキー、ボディを注入する。BiDi ネットワークサポートには geckodriver >= 0.35 および selenium >= 4.26 が必要である。古いバージョンはカスタムヘッダーを注入できない XHR ベースのアプローチにフォールバックする。
Chrome / Chromium:
| コンポーネント | 最小バージョン | インストール |
|---|---|---|
| Chrome | 118 | sudo dnf install google-chrome-stable / sudo apt install google-chrome-stable または Chromium |
| chromedriver | 118 | sudo dnf install chromedriver / sudo apt install chromium-driver または googlechromelabs.github.io/chrome-for-testing |
| selenium | 4.26 | uv pip install 'selenium>=4.26' |
Chrome リプレイは CDP(Chrome DevTools Protocol)Fetch ドメインを使用してリクエストを傍受および変更する。メソッド、ヘッダー、ボディ、クッキーはすべて CDP 経由で注入される。
自動検出が正しいバイナリを見つけられない場合、ドライバのパスは --chromedriver PATH および --geckodriver PATH で上書きできる。
# Interactive TUI -- browse and replay
waf-fu --log-group "aws-waf-logs-my-acl"
# No log group -- interactively select from discovered groups
waf-fu --profile myprofile --region us-east-1
# S3 WAF logs instead of CloudWatch
waf-fu --s3-bucket aws-waf-logs-my-bucket
# Discover and fetch every log source across all regions
waf-fu --inventory
# Pre-filter before the TUI opens
waf-fu --start 4h --action BLOCK
# Offline mode -- cached records only, no AWS calls
waf-fu --db-only
# Replay through a proxy (Burp, mitmproxy, etc.)
waf-fu --log-group "aws-waf-logs-my-acl" --proxy 127.0.0.1:8080
# Non-interactive batch export
waf-fu --log-group "aws-waf-logs-my-acl" --mode batch-curl -o replay.sh
# Export cached records to JSON
waf-fu --export logs.json
# Debug mode -- log replay details to file (client data redacted)
waf-fu --log-group "aws-waf-logs-my-acl" --debug
waf-fu は 3 つのソースから WAF ログを取得し、リクエストごとにマージする:
| ソース | CLI フラグ | データ |
|---|---|---|
| CloudWatch | --log-group (デフォルト) | 完全な WAF ログ JSON(ヘッダー、URI、クエリ、アクション) |
| S3 | --s3-bucket | CloudWatch と同じ、S3 配信から |
| WAF API | --log-location waf | 秘匿化されていないフィールドを含むサンプリングされたリクエスト |
--log-location cwl|s3|waf を使用して単一のソースに制限するか、--inventory を使用してすべてのリージョンにわたるすべてのソースを自動的に検出して取得する。
異なるソースからのレコードは相関キーによってマージされるため、リクエストごとに単一の統合ビューが表示され、それぞれから最も豊富なデータが得られる。
各ソースは、それをトリガーする CLI フラグにスコープされた独自の IAM 権限を必要とする。
必要な用途: デフォルト操作、--log-location cwl
logs:FilterLogEvents -- CloudWatch からログレコードを取得logs:DescribeLogGroups -- aws-waf-logs-* に一致するロググループを検出必要な用途: --s3-bucket、--log-location s3、--inventory
s3:ListAllMyBuckets -- 名前プレフィックスによって WAF ログバケットを検出s3:ListBucket -- WAF ログバケット内のログオブジェクトを一覧表示s3:GetObject -- gzip 圧縮されたログファイルをダウンロード必要な用途: --log-location waf、--inventory、自動エンリッチメント
wafv2:ListWebACLs -- web ACL を検出wafv2:GetWebACL -- サンプリングされたリクエストクエリのルールを列挙wafv2:GetLoggingConfiguration -- ACL が使用するログ送信先(CWL、S3)を検出wafv2:GetSampledRequests -- 秘匿化されていないリクエストサンプルを取得(RedactedFields をバイパス)最小構成: CloudWatch Logs 権限のみが必要である。S3 および WAFv2 権限はオプションであり、追加のデータソースを有効にする。権限が欠落している場合、ツールは適切にフォールバックする。