Web Application Firewall(WAF)
WAF は fn-knock を経由する HTTP リクエストを検査し、有効なルールに基づいて不審な内容を記録またはブロックします。ゲートウェイ認証やアプリケーション側のセキュリティを補完する機能であり、ゲートウェイを迂回するポート、TCP/UDP トラフィック、ホスト上のサービスは保護できません。
fn-knock は Coraza を使用して、システムルールとカスタムルールを読み込みます。全体の有効/無効、保護レベル、ルールの有効/無効、ルール更新はすべて Go ゲートウェイへ同期されます。
有効にする前の確認
- 実クライアント IP が正しく認識されていることを確認します。CDN や前段のリバースプロキシを経由するときに、ゲートウェイから常にプロキシノードのアドレスが見えている場合、WAF ログ、ブラックリスト、送信元の判定にも誤ったアドレスが使用されます。
- 対象のサービスへ fn-knock 経由でしかアクセスできないことを確認します。WAF は、ゲートウェイを迂回してアップストリームのポートへ直接届くリクエストを検査しません。
- 誤検知でブロックされた場合にルールを調整できるよう、対象サービスの入口に依存しない管理手段を確保します。
- ヘルスチェック、Webhook、アップロード用エンドポイント、アプリケーション API の正常なリクエスト特性を記録し、有効化後はこれらのパスを重点的に監視します。
全体設定
システム設定 → WAF で次の項目を設定します。
| 設定 | デフォルトまたは範囲 | 反映方法 |
|---|---|---|
| WAF を有効化 | デフォルトは無効 | 有効にすると、最初にシステムルールを確認して同期し、現在の保護レベルでゲートウェイへ読み込みます。無効にすると、WAF チェックを直ちに省略します |
| ルールを自動更新 | デフォルトは有効 | バックエンドがシステムルールを自動的に管理します。更新に失敗した場合は、後続の周期で再試行します |
| よく使う地域を除外 | デフォルトは無効 | 最近のログインでよく使われている地域からのリクエストは、WAF チェックを省略します |
| 保護レベル | レベル 1~4、デフォルトはレベル 1 | 変更すると直ちにゲートウェイへ再適用されます |
保護レベルは次の 4 段階です。
レベル 1 · 標準保護:通常利用での推奨値です。レベル 2 · 強化保護:より敏感に検知するため、アプリケーション API を重点的に監視してください。レベル 3 · 厳格な保護:誤検知によるブロックがさらに増える可能性があります。レベル 4 · 最大保護:主に短時間のトラブルシューティング向けで、検証せず長期間使用することは推奨しません。
高い保護レベルは、脆弱性の修正に代わるものではありません。検査範囲が厳しくなる一方、正当なリクエストを異常と判定しやすくなります。
よく使う地域を除外するときの境界
よく使う地域は、最近のログイン位置から生成されます。除外を有効にすると、一致した地域からのリクエストは一部ルールのスコアが下がるのではなく、WAF 全体をそのまま省略します。モバイル回線、VPN、企業の出口、IP 位置情報データベースの誤差によって除外範囲が広がる可能性があるため、アップストリームのポートも制限し、認証、ブラックリスト、リクエストログを維持してください。
スキャナーのブロックにも、よく使う地域を除外する独立した設定があります。WAF の設定を変更しても、スキャナー設定には連動しません。
システムルール
システムルールの領域には、リモートマニフェストの日時、ローカルへの同期日時、更新の有無が表示され、次の操作を行えます。
- ルールの手動更新。
- 各ルールの有効化、無効化、表示、ダウンロード。
- 選択したルールの一括有効化または無効化。
- すべて有効化またはすべて無効化。
- 「推奨のみ有効化」への復元。
WAF 全体を有効にすると、最初にシステムルールの更新を試行し、プロジェクトであらかじめ指定された誤検知の多いルールファイルを除外します。すべてのルールを手動で有効にすると、多数の誤検知が再び発生する可能性があるため、元に戻せる環境で先に検証してください。
「推奨のみ有効化」は、システムルールを現在のバージョンで推奨される有効状態へ戻します。カスタムルールは変更せず、WAF 全体も自動的には有効にしません。WAF が有効な場合、ルールの変更は直ちにゲートウェイへ読み込まれます。無効な場合は設定だけが保存され、次回の有効化時に適用されます。
カスタムルール
カスタムルールの領域では、1 つ以上の .conf ファイルを一度にアップロードし、ファイルごとに有効化、無効化、プレビュー、ダウンロード、削除を行えます。WAF が有効な場合、アップロード、有効/無効の切り替え、削除を行うと、ゲートウェイのルールが直ちに再読み込みされます。
カスタムルールは管理者自身で保守します。
- アップロード前に、ルールの構文、フェーズ、アクション、ルール ID を確認し、既存ルールとの競合を避けます。
- 最初は記録または検出モードで観察してから、ブロックアクションを有効にします。
- 元の
.confファイルと変更履歴を保存します。バックアップからの復元は、独立したルールのバージョン管理に代わるものではありません。 - カスタムルールを削除すると、ゲートウェイはそのファイルを読み込まなくなります。必要であれば、削除前にダウンロードして保管してください。
Host ごとに WAF を省略する
サービス用 Host では、サブドメインマッピングの詳細設定で WAF がデフォルトで有効になっています。誤検知や互換性の問題を切り分ける場合は、特定の Host だけ WAF を無効にできます。その Host は全体の WAF を省略し、他の Host は引き続き保護されます。
Host ごとの設定は、独立した WAF インスタンスではありません。WAF 全体が無効な場合、Host 側の設定だけでは保護されません。トラブルシューティング後は、ログに基づいてルールを調整し、Host の保護を元に戻してください。WAF の無効化を長期的な互換性対策にしないでください。
FN Connect トラフィックを WAF へ接続する
標準版 fnOS FPK では、システム設定 → fnOS → FN Connect トラフィックを WAF へ接続 を使い、fnOS のリモートアクセスサービス FN Connect からローカル fnOS HTTP ポートへのトラフィックを同じ WAF へ送れます。このスイッチが対象とするのは、FN Connect サービスプロセスがループバックアドレスへ送る IPv4 / IPv6 リクエストだけです。他のローカルプロセスや通常の LAN 直結トラフィックはリダイレクトしません。リクエストログと WAF ログのルート種別は FN Connect と表示されます。
入口を有効にするだけでは攻撃をブロックできません。グローバル WAF と対象ルールも有効にする必要があります。状態欄は、保護中、検出のみ、WAF 無効、デグレードを区別し、検出した fnOS ポート、入口状態、直近の同期エラーを表示します。システムは約 5 秒ごとにルールを再確認し、fnOS HTTP ポートの変更にも追従します。
現在のバージョンは、fnOS の HTTPS を強制 が有効な場合、平文の FN Connect 経路を引き継ぎません。この設定を検出するとリダイレクトを有効にしません。ポートへ到達できない、ルールを書き込めない、ローカル WAF 入口が異常な場合は Fail-open としてリダイレクトを削除し、対応する入口を停止して FN Connect 全体の停止を避けます。リモートアクセスできることを WAF が動作中である証拠とせず、表示されたエラーを修正してください。
この機能は公式サイトの標準 FPK だけで利用でき、ホストネットワーク権限が必要です。Knock Lite、Docker、OpenWrt、一般的な Linux、Synology、Windows では表示されません。有効にする前に fnOS デスクトップまたは LAN の管理経路を確保し、FN Connect から識別可能なリクエストを送って、リクエストログと WAF ログでルート種別とルール動作を確認してください。
WAF ログを確認する
WAF ログ ページでは、永続化されたイベントを日付ごとに読み込みます。現在 WAF が無効でも、過去のイベントは引き続き確認できます。ページでは次の操作を行えます。
- ログが存在する日付を選択。
- Trace ID、Host、パス、IP を検索。
- Trace ID から同じリクエストの処理経路を確認。
- 1 ページあたり 20、50、100、200 件を表示し、カーソルでページを切り替え。
- 1 つ以上の送信元 IP を選択し、共通ブラックリストへ追加または共通ブラックリストから解除。
- 選択した日付の WAF イベントをすべて削除。
特定の日付のログを削除すると、管理画面からは復元できません。監査証跡を保持する必要がある場合は、先に詳細をエクスポートまたはコピーしてください。
ログ詳細のフィールド
詳細には、日時、Trace ID、トランザクション ID、アクション、モード、HTTP ステータスコード、クライアント IP、リモートアドレス、IP 位置情報、リクエストメソッド、プロトコル、Host、パス、Query、完全なリクエスト URL、User-Agent、Referer、ルート種別、ルートキー、アップストリーム、ルールバンドル、ルール ID、ルールファイルと行番号、ブロック情報、エラーが含まれます。
アクションは通常、次のように分類されます。
記録:ルールに一致してイベントへ記録されましたが、そのルールによってリクエストは中断されていません。ブロック:ルールによってリクエストが中断され、ルール ID、アクション、返されたステータスコードが記録されます。許可:イベントは WAF の処理を経た後、そのまま通過します。
1 つのイベントが複数のルールに一致することもあります。一覧には主要なルールが表示され、残りは詳細に保持されます。調査するときは、最初のルール名だけで判断しないでください。
誤検知によるブロックの調査
- リクエストログ でリクエストがゲートウェイへ到達したことを確認し、日時、Host、パス、クライアント IP、Trace ID を記録します。
- WAF ログで Trace ID を検索します。見つからない場合は、Host、パス、IP でも検索します。
- アクション、モード、ブロック時のステータスコード、主要なルール、ルールファイルの位置を確認します。
- 対応するルールファイルをプレビューし、システムルールかカスタムルールかを確認します。
- 最初に特定のルールだけを一時的に無効にするか、保護レベルを下げてリクエストを再現します。WAF 全体をすぐに無効にすることは推奨しません。
- 正常なリクエストが回復し、異常なサンプルは引き続き記録またはブロックされることを検証してから、調整を確定します。
WAF ログにイベントがない場合は、ゲートウェイのレート制限、共通ブラックリスト、公開範囲、スキャナーのブロック、認証フローによって先に処理されていないか、対象 Host で WAF が無効になっていないかも確認してください。
保護対象外
fn-knock を経由しない元のポート。
DNS、ルーター、クラウドのセキュリティグループ、誤って設定された CDN オリジン。
アプリケーション側の権限設計、データバックアップ、脆弱性の修正。
HTTP 以外のプロトコルマッピングトラフィック。
