はじめに
レポート用アプリは、別の PostgreSQL データベースから合成の店舗注文を読み取ります。現在は External Probe もそのデータベースに接続できます。不要な経路を閉じながらレポートページを維持してください。
この Challenge は独立した環境で始まります。Guided Lab で練習した接続テスト、ルート確認、順序付き Gateway ルールを、別のアドレス図とデータベースポートに適用します。
レポート用データベースを保護する
現在の状況
Order Page で注文、ネットワーク図、現在の接続結果を確認できます。Report Client は正規アプリのノード、External Probe は不要なクライアントです。Gateway が転送通信を制御します。これらは別々のネットワーク名前空間を持つコンテナで、1 つのインスタンスのカーネルを共有します。
対象範囲
稼働中 Gateway の LAB_FORWARD チェーンだけを変更します。ルート、アドレス、認証情報、データベース設定、アプリのコード、サービスは変更しません。親の FORWARD は接続済みで、一致しない通信を拒否します。ルールは今回の実習セッション中に有効ならよく、再起動後の永続化は対象外です。
| 送信元 | 宛先 | 必要な結果 |
|---|---|---|
Report Client 172.29.10.40 |
データベース 172.29.20.15:5544 |
実際の PostgreSQL 読み取りを許可 |
External Probe 172.29.10.50 |
データベース 172.29.20.15:5544 |
新規 TCP 接続を遮断 |
| 両クライアント | 公開ステータス 172.29.20.15:8001 |
許可 |
クライアントの次の転送先は 172.29.10.254、データベースの戻り先は 172.29.20.254 です。固定の接続情報はユーザー shopapp、パスワード training-only、データベース shop、テーブル orders、列 id と item です。tcp-probe ADDRESS PORT、ip route get ADDRESS、psql、curl は学習済みの方法で使えます。レポート用アプリも同じ認証情報を使います。
ルールの参照:-A は末尾追加、-s は送信元、-d は宛先、-p tcp はプロトコル、--dport は宛先ポート、-j は処理を指定します。-F CHAIN は指定チェーンだけを消去し、-nvL CHAIN は数値ルールとカウンターを表示します。返信には接続追跡が必要です。広い拒否が狭い許可より前にあると、拒否が優先されます。
目標
データベースは正規クライアントを受け入れ、External Probe の新規 TCP 接続を拒否し、レポートページと公開サービスは動作し続ける状態にしてください。データベースと認証情報は変更しません。
合格条件
- Report Client が固定認証情報を使い、
5544の PostgreSQL 経由で実際の行を読み取れる。 - External Probe はそのポートに新規 TCP 接続を確立できない。
- External Probe は引き続き
8001からPUBLIC STATUS OKを受け取り、レポートの注文も表示される。 - 変更後に Order Page で作成した注文
practice-2があり、商品はGreen teaである。レポートやスクリーンショットは不要。
ヒント
例外に指定する送信元はどれですか?
ブラウザや Gateway ではなく、データベース接続を実際に開くクライアントを使います。図と ip route get で送信元を確認できます。
正規通信が止まったのはなぜですか?
最初に一致するルール、宛先ポート、応答処理を比較します。ポートは Guided Lab と異なります。誤入力後は実習専用チェーンを再構築できます。
認証エラーで遮断を証明できますか?
パスワード拒否は PostgreSQL に到達したことを意味します。禁止経路は TCP テスト、許可経路は実際のクエリで確認し、公開ステータスも別に確認します。
まとめ
別のクライアントとポートにゲートウェイの制御を応用し、データベースに基づくレポートと公開ステータスを維持しました。実際の許可・拒否テストが結果を証明します。広い許可を残す、データベースを止める、無効なパスワードを使う方法では達成できません。



