Palo Alto のゾーンプロテクションは、フラッド攻撃、偵察行為(スキャン)、異常なパケットを使った攻撃から、ゾーンを守る機能です。インターネットにつながるゾーンには、まず入れておきたい設定です。この記事では、ゾーンプロテクションの概要を整理したうえで、PAN-OS 10.2.4 の PA-VM でプロファイルを作ってゾーンに適用し、SYN フラッド・UDP フラッド・TCP ポートスキャン・大きな ICMP パケットで動作を確認します。
- ゾーンプロテクションの3つの防御(フラッド防御・偵察行為防御・パケットベースの攻撃保護)の役割
- ゾーンプロテクションプロファイルの作成と、ゾーンへの適用の手順
- 脅威ログと
show zone-protection zoneでの動作の確かめ方
ゾーンプロテクションとは何か
ゾーンプロテクションは、インターネットなどの外部につながるゾーンに対して、フラッド攻撃や偵察行為などのネットワーク攻撃から守るための機能です。設定は「ゾーンプロテクションプロファイル」にまとめ、そのプロファイルをゾーンに適用します。プロファイルを適用したゾーンから入ってくる通信が、保護の対象になります。
ゾーンプロテクションでは、主に次の3種類の攻撃に対して防御を設定できます。
フラッド防御(Flood Protection)
フラッド防御は、ネットワークやサーバを過負荷にすることを狙った大量の通信(フラッド攻撃)から守る機能です。代表的なものに、SYN フラッド攻撃や UDP フラッド攻撃があります。SYN・UDP・ICMP・ICMPv6・その他の IP のそれぞれについて、新しい接続数のしきい値を設定します。
偵察行為防御(Reconnaissance Protection)
偵察行為防御は、攻撃者がネットワークの構成や弱いところを調べるために行う偵察行為から守る機能です。TCP ポートスキャン、UDP ポートスキャン、ホストスイープ(どのアドレスに機器がいるかを順に調べる行為)を検知します。
パケットベースの攻撃保護(Packet-based Attack Protection)
パケットベースの攻撃保護は、不正な形や異常な中身のパケットを使った攻撃から守る機能です。IP フラグメント、送信元アドレスのなりすまし、大きすぎる ICMP パケット、データ付きの TCP SYN などを破棄できます。
ゾーンプロテクションは、ゾーンに入ってくる通信全体(集計値)を見て動きます。フラッド防御のしきい値も、送信元ごとではなくゾーン全体の新しい接続数で判定します。特定のサーバを個別に守りたい場合は、DoS 保護ポリシーと組み合わせます。
基本的な設定手順
今回は、インターネットにつながる Untrust ゾーンから、内部ネットワークの Trust ゾーンを守る設定をします。検証構成は次のとおりです。
ゾーンとセキュリティポリシーを用意する
まず、セキュリティゾーンを作って各ゾーンにインタフェースを割り当て、ゾーン間の通信を制御するセキュリティポリシーを設定します。今回は、Untrust ゾーン(ethernet1/1)から Trust ゾーン(ethernet1/2)の Linux サーバへの通信を、すべて許可するポリシーがある状態から始めます。
この記事の画面は、実際の画面ではなく、検証時の画面から設定する項目(見るポイント)を抜き出して描いたイメージです。バージョンによって、項目の並びや表記は変わります。
| 名前 | 送信元 ゾーン | 宛先 ゾーン | 宛先 アドレス | アプリケー ション | サービス | アクション | |
|---|---|---|---|---|---|---|---|
| 1 | Trust_to_Untrust | Trust | Untrust | any | any | application-… | 許可 |
| 12 | Untrust_to_Trust | Untrust | Trust | Linux_VIP | any | any | 許可 |
| 3 | ALLDENY | Untrust | Trust | any | any | application-… | 拒否 |
| 4 | intrazone-default | any | (intrazone) | any | any | any | 許可 |
| 5 | interzone-default | any | any | any | any | any | 拒否 |
| No. | 表示 | 意味 |
|---|---|---|
| 1 | Untrust_to_Trust | Untrust ゾーンから Trust ゾーンの Linux_VIP 宛ての通信を、アプリケーション・サービスを問わず許可します(緑の「許可」)。検証用の攻撃通信も、このルールでいったん許可される状態です。 |
ゾーンプロテクションプロファイルを作る
NETWORK ›› ネットワークプロファイル ›› ゾーンプロテクション を開き、「追加」をクリックします。表示された画面で、名前に任意の名前(今回は Untrust_Protect)を入れます。タブを見ると、「フラッド防御」「偵察行為防御」「パケットベースの攻撃保護」などを設定できることがわかります。
| 1名前 | Untrust_Protect |
| 内容 |
|
| No. | 項目 | 設定内容 |
|---|---|---|
| 1 | 名前 | 任意の名前です。ここでは Untrust_Protect とします。 |
| 2 | タブ | 防御の種類ごとのタブです。作成した直後は、どの防御も有効になっていません。しきい値には既定値(アラーム発生レート 10000、アクティベーション 10000、最大 40000)が入っています。 |
| 3 | OK | ここでは何も有効にせず、そのまま OK をクリックします。 |
一覧に Untrust_Protect が登録されます。フラッド防御の各列(SYN フラッド、UDP フラッド、ICMP フラッド、ICMPV6 フラッド、その他の IP フラッド)のチェックは、まだ空のままです。
ゾーンに適用する
作ったプロファイルは、守りたいゾーンに適用します。今回は、攻撃の通信が入ってくる Untrust ゾーンに適用します。NETWORK ›› ゾーン を開き、Untrust をクリックします。「ゾーンプロテクション」の欄で Untrust_Protect を選び、OK をクリックします。
| 名前 | Untrust |
| ログ設定 | None |
| タイプ | レイヤー 3 |
| インターフェイス | インターフェイスethernet1/1 |
| ⋮ (ユーザー ID ACL、Device-ID ACL は省略) | |
| 1ゾーンプロテクションプロファイル | Untrust_Protect |
| パケットバッファ保護の有効化 | ☑ |
| No. | 項目 | 設定内容 |
|---|---|---|
| 1 | ゾーンプロテクションプロファイル | STEP 2 で作った Untrust_Protect を選びます。 |
| 2 | OK | OK をクリックして画面を閉じます。 |
ゾーンの一覧で、Untrust の「ゾーンプロテクションプロファイル」列に Untrust_Protect が表示されれば適用できています。
| 名前 | タイプ | インターフェイス | ゾーンプロテクションプロファイル | パケットバッファ保護 |
|---|---|---|---|---|
| Trust | layer3 | ethernet1/2 | ☑ | |
| Untrust | layer3 | ethernet1/1 | 1Untrust_Protect | ☑ |
| No. | 表示 | 意味 |
|---|---|---|
| 1 | Untrust_Protect | Untrust ゾーンにプロファイルが適用されています。Trust ゾーンには適用していません。 |
最後に「Commit」を実行して、設定を反映します。ここまでの設定では、何も保護しないプロファイルをゾーンに適用しただけです。次から、プロファイルに保護の設定を足して、動作を確認していきます。
フラッド制御の設定と動作確認
フラッド防御として、SYN フラッドと UDP フラッドの保護を設定し、実際にフラッドの通信を発生させてみます。フラッド防御では、守りたいプロトコルごとに、新しい接続数(CPS:1秒あたりの接続数)について3つのしきい値を設定します。
| しきい値 | 意味 |
|---|---|
| アラーム発生レート | 新しい接続数がこの値を超えると、アラームを出します。 |
| アクティベーション | 新しい接続数がこの値を超えると、設定したアクションが動き始めます。RED(Random Early Drop)では、レートが上がるほど多くのパケットを破棄し、レートがこの値を下回ると破棄を止めます。SYN Cookie では、ファイアウォールがサーバの代わりに応答するようになります。 |
| 最大 | この値を超えた分のパケットを破棄します。レートがこの値を下回るまで、超えた分の新しい接続は通りません。 |
既定値は、プロファイルを適用しただけで正規の通信が落ちないよう、大きめの値になっています。今回は検証のため小さい値にしていますが、実際の環境では平常時の接続数を測ってから決めます。目安として、アラーム発生レートは平常時の平均より15〜20%ほど高い値、最大はファイアウォールの処理能力の80〜90%ほどにします。
SYN フラッドを防ぐ
ゾーンプロテクションプロファイルの「フラッド防御」タブで、SYN にチェックを入れます。アクションは「Random Early Drop」と「SYN Cookie」から選べます。ここでは SYN Cookie を選びます。
| 1SYN | ☑ |
| 2アクション | SYN Cookie |
| 3アラーム発生レート(コネクション/秒) | 10 |
| アクティベーション(接続/秒) | 10 |
| 最大(接続/秒) | 40 |
| UDP ほか | ☐(既定値 10000 / 10000 / 40000 のまま) |
| No. | 項目 | 設定内容 |
|---|---|---|
| 1 | SYN | チェックを入れて、SYN フラッドの保護を有効にします。 |
| 2 | アクション | SYN Cookie を選びます。 |
| 3 | しきい値 | 検証用に、アラーム発生レート 10、アクティベーション 10、最大 40 と小さくしています。 |
SYN Cookie を選ぶと、アクティベーションを超えたとき、ファイアウォールがサーバの代わりに TCP の3ウェイハンドシェイクを受け持ちます。SYN を受けたファイアウォールは、Cookie を埋め込んだ SYN-ACK を自分で返し、クライアントから正しい ACK が返ってきた接続だけをサーバへ渡します。送信元を偽った SYN には ACK が返ってこないため、サーバには届きません。
| アクション | 特徴 |
|---|---|
| SYN Cookie | 正規の接続を公平に通せますが、ファイアウォールの処理の負荷は大きくなります。 |
| Random Early Drop | パケットをランダムに破棄するので負荷は小さいですが、正規の接続も落ちることがあります。 |
この状態で、検証用の端末から hping3 を使い、Untrust ゾーンを通る SYN フラッドを発生させます。MONITOR ›› ログ ›› 脅威 を開くと、TCP Flood のログが出ていて、フラッド防御が動いたことがわかります。
| タイプ | 脅威 ID/名 | 送信元 ゾーン | 宛先 ゾーン | 送信元 アドレス | 宛先 アドレス | アクション | 重大度 |
|---|---|---|---|---|---|---|---|
| flood | 1TCP Flood | Untrust | Untrust | 0.0.0.0 | 0.0.0.0 | drop | critical |
| flood | TCP Flood | Untrust | Untrust | 0.0.0.0 | 0.0.0.0 | drop | critical |
| No. | 表示 | 意味 |
|---|---|---|
| 1 | TCP Flood | タイプが flood、アクションが drop、重大度が critical(赤)のログです。送信元・宛先のアドレスは 0.0.0.0 と表示されています。フラッド防御は、送信元ごとではなくゾーン全体の接続数で判定する機能です。 |
CLI では、show zone-protection zone <ゾーン名> で、どの保護でどれだけパケットを破棄したかを確かめられます。
PA-VM
admin@PA-VM> show zone-protection zone Untrust ------------------------------------------------------------------------------------------ Number of zones with protection profile: 1 ------------------------------------------------------------------------------------------ Zone Untrust, vsys vsys1, profile Untrust_Protect ------------------------------------------------------------------------------------------ tcp-syn SYN cookie enabled: yes DP alarm rate: 10 cps, activate rate: 10 cps, maximal rate: 40 cps current: 0 packets dropped: 30 packets not TCP SYN: 0 packets not TCP SYN ACK: 0 packets ------------------------------------------------------------------------------------------ IPv(4/6) Filter: tcp-reject-non-syn: enabled: yes, (global), packet dropped: 0 discard-tcp-syn-with-data: enabled: yes, packet dropped: 0 discard-tcp-synack-with-data: enabled: yes, packet dropped: 0 IPv4 packet filter: IPv6 packet filter: routing-header-0: enabled: yes, packet dropped: 0 routing-header-1: enabled: yes, packet dropped: 0 routing-header-4-252: enabled: yes, packet dropped: 0 routing-header-255: enabled: yes, packet dropped: 0 ------------------------------------------------------------------------------------------
| 表示 | 意味 |
|---|---|
| Zone Untrust, … profile Untrust_Protect | Untrust ゾーンに Untrust_Protect が適用されています。 |
| tcp-syn SYN cookie enabled: yes | SYN フラッドの保護が、SYN Cookie で有効になっています。 |
| alarm rate / activate rate / maximal rate | 設定したしきい値(10 / 10 / 40 cps)です。 |
| dropped: 30 packets | SYN フラッドの保護で破棄したパケット数です。 |
| tcp-reject-non-syn | TCP の最初のパケットが SYN でないものを拒否する設定です。(global) は、システム全体の設定に従っていることを表します。 |
| discard-tcp-syn-with-data discard-tcp-synack-with-data | データを含む SYN や SYN-ACK では TCP セッションを確立させない設定です。既定で有効です。 |
| routing-header-0 など | IPv6 のルーティングヘッダ(Type 0 など)を含むパケットを破棄する設定です。 |
UDP フラッドを防ぐ
次に UDP フラッドを確認します。「フラッド防御」タブで UDP にチェックを入れます。しきい値は、SYN と同じく検証用に小さくしています。SYN のチェックは外した状態で確認しています。
| 1UDP | ☑ |
| 2アラーム発生レート(コネクション/秒) | 10 |
| アクティベーション(接続/秒) | 10 |
| 最大(接続/秒) | 40 |
| SYN | ☐(SYN Cookie / 10 / 10 / 40 の値は残したまま) |
| ICMP ほか | ☐ |
| No. | 項目 | 設定内容 |
|---|---|---|
| 1 | UDP | チェックを入れて、UDP フラッドの保護を有効にします。UDP にはアクションの選択はありません。 |
| 2 | しきい値 | アラーム発生レート 10、アクティベーション 10、最大 40 です。 |
検証用の端末から hping3 で UDP フラッドを発生させ、MONITOR ›› ログ ›› 脅威 を開くと、UDP Flood のログが出ています。
| タイプ | 脅威 ID/名 | 送信元 ゾーン | 宛先 ゾーン | 送信元 アドレス | 宛先 アドレス | アクション | 重大度 |
|---|---|---|---|---|---|---|---|
| flood | 1UDP Flood | Untrust | Untrust | 0.0.0.0 | 0.0.0.0 | drop | critical |
| No. | 表示 | 意味 |
|---|---|---|
| 1 | UDP Flood | UDP フラッドの保護で破棄したことを表すログです。SYN フラッドと同じく、重大度は critical(赤)です。 |
show zone-protection zone Untrust もあわせて確認します。
PA-VM
admin@PA-VM> show zone-protection zone Untrust ------------------------------------------------------------------------------------------ Number of zones with protection profile: 1 ------------------------------------------------------------------------------------------ Zone Untrust, vsys vsys1, profile Untrust_Protect ------------------------------------------------------------------------------------------ udp RED enabled: yes DP alarm rate: 10 cps, activate rate: 10 cps, maximal rate: 40 cps current: 0 packets dropped: 898 packets ------------------------------------------------------------------------------------------ IPv(4/6) Filter: tcp-reject-non-syn: enabled: yes, (global), packet dropped: 0 discard-tcp-syn-with-data: enabled: yes, packet dropped: 0 discard-tcp-synack-with-data: enabled: yes, packet dropped: 0 IPv4 packet filter: IPv6 packet filter: routing-header-0: enabled: yes, packet dropped: 0 routing-header-1: enabled: yes, packet dropped: 0 routing-header-4-252: enabled: yes, packet dropped: 0 routing-header-255: enabled: yes, packet dropped: 0 ------------------------------------------------------------------------------------------
| 表示 | 意味 |
|---|---|
| udp RED enabled: yes | UDP フラッドの保護が有効で、RED(Random Early Drop)で破棄しています。 |
| dropped: 898 packets | UDP フラッドの保護で破棄したパケット数です。 |
その他防御の設定と動作確認
偵察行為防御(TCP ポートスキャン)
偵察行為防御として TCP ポートスキャンの保護を設定し、実際にスキャンを実行してみます。ゾーンプロテクションプロファイルの「偵察行為防御」タブで、TCP ポートスキャンの「有効化」にチェックを入れ、アクションを block にします。
| スキャン | 有効化 | アクション | 間隔(SEC) | しきい値(イベント) |
|---|---|---|---|---|
| 1TCP ポートスキャン | ☑ | 2block | 2 | 100 |
| ホストスイープ | ☐ | alert | 10 | 100 |
| UDP ポートスキャン | ☐ | alert | 2 | 100 |
| ⋮ (送信元アドレスの除外:0 個の項目) |
| No. | 項目 | 設定内容 |
|---|---|---|
| 1 | TCP ポートスキャン | 「有効化」にチェックを入れます。間隔 2 秒・しきい値 100 イベントは既定値のままで、2 秒の間に 100 イベントを超えるスキャンを検知します。 |
| 2 | アクション | block を選びます。 |
| 3 | OK | OK をクリックし、コミットします。 |
アクションは、次の4つから選べます。
| アクション | 動作 |
|---|---|
| allow | スキャンを検知しても、そのまま通します。 |
| alert | 指定した間隔の中でしきい値を超えたスキャンごとに、アラートを出します。既定のアクションです。 |
| block | その送信元から宛先への以降のパケットを、指定した間隔の残りの間、破棄します。 |
| block-ip | 以降のパケットを、指定した期間(1〜3,600 秒)破棄します。「追跡」で、送信元だけを止めるか、送信元と宛先の組み合わせで止めるかを選びます。 |
block は、間隔の残りの短い時間だけ止める動作です。block-ip は、指定した期間のあいだ止め続けられます。block-ip を選ぶと、次のように追跡と期間を設定します。
| 1アクション | ブロック IP |
| 2追跡 | source-and-destination |
| 3期間(sec) | 3600 |
| No. | 項目 | 設定内容 |
|---|---|---|
| 1 | アクション | ブロック IP(block-ip)です。 |
| 2 | 追跡 | source-and-destination を選ぶと、送信元と宛先の組み合わせで止めます。 |
| 3 | 期間(sec) | 止める期間です。この例では上限の 3600 秒です。 |
アクションを block にした状態で、検証用の端末から nmap で TCP ポートスキャンを実行します。MONITOR ›› ログ ›› 脅威 を開くと、スキャンのログが出ていて、偵察行為防御が動いたことがわかります。
| タイプ | 脅威 ID/名 | 送信元 ゾーン | 宛先 ゾーン | 送信元 アドレス | 宛先 アドレス | アクション | 重大度 |
|---|---|---|---|---|---|---|---|
| scan | 1SCAN: TCP Port Scan | Untrust | Trust | (伏せています) | 192.168.20.100 | drop | medium |
| No. | 表示 | 意味 |
|---|---|---|
| 1 | SCAN: TCP Port Scan | タイプが scan、アクションが drop、重大度が medium(オレンジ)のログです。フラッドのログと違い、スキャンした送信元と宛先のアドレスが記録されます。 |
パケットベースの攻撃保護(ICMP 大型パケット)
パケットベースの攻撃保護として、大きな ICMP パケットを破棄する設定をし、実際にサイズの大きい ping を送ってみます。ゾーンプロテクションプロファイルの パケットベースの攻撃保護 ›› ICMP ドロップ タブで、「ICMP 大型パケット(>1024)」にチェックを入れます。
| ICMP ping ID 0 | ☐ |
| ICMP フラグメント | ☐ |
| 1ICMP 大型パケット(>1024) | ☑ |
| エラーメッセージとともに組み込まれている ICMP を破棄 | ☐ |
| ICMP TTL 失効エラーを抑制 | ☐ |
| ICMP フラグメント要求メッセージを抑制 | ☐ |
| No. | 項目 | 設定内容 |
|---|---|---|
| 1 | ICMP 大型パケット(>1024) | チェックを入れると、1024 バイトより大きい ICMP パケットを破棄します。 |
| 2 | OK | OK をクリックし、コミットします。 |
Untrust ゾーンを通る経路で 1024 バイトより大きい ping を送ると、応答が返ってこなくなります。show zone-protection zone Untrust で確かめると、大きな ICMP パケットが破棄されていることがわかります。
PA-VM
admin@PA-VM> show zone-protection zone Untrust
------------------------------------------------------------------------------------------
Number of zones with protection profile: 1
------------------------------------------------------------------------------------------
Zone Untrust, vsys vsys1, profile Untrust_Protect
------------------------------------------------------------------------------------------
IPv(4/6) Filter:
discard-ip-frag: enabled: yes, packet dropped: 0
tcp-reject-non-syn: enabled: yes, (global), packet dropped: 0
discard-tcp-syn-with-data: enabled: yes, packet dropped: 0
discard-tcp-synack-with-data: enabled: yes, packet dropped: 0
IPv4 packet filter:
discard-icmp-large-packet: enabled: yes, packet dropped: 521
IPv6 packet filter:
routing-header-0: enabled: yes, packet dropped: 0
routing-header-1: enabled: yes, packet dropped: 0
routing-header-4-252: enabled: yes, packet dropped: 0
routing-header-255: enabled: yes, packet dropped: 0
------------------------------------------------------------------------------------------
| 表示 | 意味 |
|---|---|
| discard-icmp-large-packet | 大きな ICMP パケットの破棄が有効で、521 パケットを破棄しています。 |
| discard-ip-frag | IP フラグメントの破棄が有効になっています(この時点で破棄は 0)。 |
ICMP 大型パケットの破棄を有効にすると、大きなサイズの ping を使う確認作業(経路の MTU の確認など)も通らなくなります。有効にする前に、Untrust 側から大きな ICMP を使う運用がないかを確かめておきます。
うまくいかないとき
| 状態 | よくある原因 | 確認すること |
|---|---|---|
| 脅威ログが出ない | プロファイルを、攻撃が入ってくるゾーンに適用していない/コミットしていない | show zone-protection zone で、ゾーンとプロファイル名が表示されるか |
| フラッドを流しても破棄されない | 新しい接続数がアクティベーションに届いていない | しきい値と、dropped のカウンタが増えているか |
| スキャンが検知されない | 間隔内のイベント数がしきい値に届いていない、または送信元が除外されている | 間隔・しきい値と、送信元アドレスの除外の一覧 |
| 正規の通信まで落ちる | しきい値が平常時の接続数より低い(検証用の値のまま など) | 平常時の接続数を測り、しきい値を見直す |
まとめ
今回確認した設定と結果は、次のとおりです。
| 防御 | 設定 | 確認した結果 |
|---|---|---|
| フラッド防御(SYN) | SYN Cookie、10 / 10 / 40 | 脅威ログに TCP Flood、dropped 30 packets |
| フラッド防御(UDP) | RED、10 / 10 / 40 | 脅威ログに UDP Flood、dropped 898 packets |
| 偵察行為防御 | TCP ポートスキャン、block、2 秒 / 100 イベント | 脅威ログに SCAN: TCP Port Scan(drop) |
| パケットベースの攻撃保護 | ICMP 大型パケット(>1024) | 大きな ping が応答なし、packet dropped 521 |
ゾーンプロテクションは、プロファイルを作り、守りたいゾーン(攻撃が入ってくるゾーン)に適用して使います。動いたかどうかは、脅威ログと show zone-protection zone の破棄カウンタで確かめられます。しきい値は、検証用の値のまま本番に入れず、平常時の接続数をもとに決めてください。
この記事は PAN-OS 10.2.4 で検証しています。Palo Alto Networks の End-of-Life Summary では、PAN-OS 10.2 の標準サポートは 2025年8月27日に終了しており、Extended Support+ は 2027年3月31日までとなっています。新しいバージョンでは、画面の項目や表記が変わっていることがあります。
コメント