ファイアウォールフィルターの一致条件を理解する
ファイアウォールフィルターの条件を定義する前に、条件で指定した一致条件がどのように処理されるか、および目的のフィルタリング結果を得るためにさまざまなタイプの一致条件を指定する方法を理解する必要があります。一致条件は、一致条件を定義する文字列(一致ステートメントと呼ばれる)で構成されます。一致条件とは、パケットに含めなければならない値またはフィールドです。
フィルター一致条件
ファイアウォールフィルター条件のfromステートメントでは、thenステートメントのいずれかでアクションをトリガーするパケット条件を指定します。 次に、さまざまなオプション、インターフェイス、VLANの順に選択します。fromステートメントのすべての条件が一致し、実行するアクションに一致する必要があります。
一致が発生するためにはパケットが項内のすべての条件に一致する必要があるため、一致条件を指定する順序は重要ではありません。
条件に一致条件を指定しない場合、その条件はすべてのパケットに一致します。
fromステートメントの個々の条件に値のリストを含めることはできません。例えば、数値範囲や複数の送信元アドレスまたは宛先アドレスを指定することはできません。
fromステートメントの個々の条件を否定することはできません。否定された条件は、明示的な不一致です。
従来のJunos OSファイアウォールフィルターとは異なり、以下の点があります。
- 個々の条件に値リスト(範囲/複数のアドレス)を含めることはできません。
- 条件は、以下を使用して否定することはできません。
except
同じ条件に複数の値を指定するには、次のいずれかを使用します。
[edit firewall family family-name filter filter-name term term-name from] user@switch# set protocol icmp user@switch# set protocol udp user@switch# set source-address 10.1.1.1 user@switch# set source-address 10.1.1.2
数値フィルター一致条件
数値フィルター条件は、ポート番号やプロトコル番号などの数値で識別されるパケットフィールドに一致します。数値フィルター一致条件では、条件を識別するキーワードと、パケット内のフィールドが一致する必要がある単一の値を指定します。
数値は、以下のいずれかの方法で指定できます。
単一の数値—フィールドの値が数値と一致する場合、一致が発生します。次に例を示します。
set firewall family family-name filter filter-name term term-name from source-port 25
単一数値のテキスト同義語—フィールドの値が同義語に対応する数値と一致する場合、一致が発生します。次に例を示します。
set firewall family family-name filter filter-name term term-name from source-port http
フィルター条件に複数の値を指定するには、一致条件を定義する文字列である独自の一致ステートメントに各値を入力します。例えば、 vlan の値が10または30の場合、以下の項で一致が発生します。
[edit firewall family family-name filter filter-name term term-name from] user@switch# set vlan 10 user@switch# set vlan 30
複数の値を指定します。
[edit firewall family family-name filter filter-name term term-name from] user@switch# set source-port 22 user@switch# set source-port 23
数値フィルター一致条件には、以下の制限が適用されます。
値の範囲を指定することはできません。
値のリストをカンマで区切ることはできません。
数値フィルター一致条件で特定の値を除外することはできません。例えば、一致条件が指定された値と等しくない場合のみ一致する条件を指定することはできません。
インターフェイスフィルター一致条件
インターフェイスフィルター一致条件は、パケット内のインターフェイス名の値に一致できます。インターフェイスフィルターの一致条件では、インターフェイスの名前を指定します(例)。
[edit firewall family family-name filter filter-name term term-name from] user@switch# set interface ge-0/0/1
ポートおよびVLANインターフェイスは、論理ユニット番号を使用しません。ただし、ルーターインターフェイスに適用されるファイアウォールフィルターは、インターフェイスフィルターの一致条件で論理ユニット番号を指定できます。次に例を示します。
[edit firewall family family-name filter filter-name term term-name from] user@switch# set interface ge-0/1/0.0
必要に応じて、必ず論理ユニットを含めます。VLANフィルタリングアプリケーションの場合は、VLANに参加するインターフェイスを指定します。
たとえば、インターフェイス名の一部として * ワイルドカードを含めることができます。
[edit firewall family family-name filter filter-name term term-name from] user@switch# set interface ge-0/*/1 user@switch# set interface ge-0/1/* user@switch# set interface ge-*
ワイルドカードがサポートされています。
interface ge-0/*/6.0interface ge-0/1/*.0interface ge-0/0/6.*
IPアドレスフィルター一致条件
アドレスフィルター一致条件は、IP送信元や宛先プレフィックスなどのパケット内のプレフィックス値を一致させることができます。アドレスフィルター一致条件では、フィールドを識別するキーワードと、パケットが一致する必要があるそのタイプのプレフィックスを1つ指定します。
アドレスを 1 つのプレフィックスとして指定します。フィールドの値がプレフィックスと一致する場合、一致が発生します。次に例を示します。
[edit firewall family family-name filter filter-name term term-name from] user@switch# set destination-address 10.2.1.0/28
各プレフィックスには、暗黙的な0/0 exceptステートメントが含まれています。これは、指定されたプレフィックスと一致しないプレフィックスは、明示的に一致しないと見なされることを意味します。
アドレスプレフィックスを指定するには、表記prefix/prefix-lengthを使用します。prefix-length を省略した場合、デフォルトは /32 になります。次に例を示します。
[edit firewall family family-name filter filter-name term term-name from] user@switch# set destination-address 10 [edit firewall family family-name filter filter-name term term-name from] user@switch# show destination-address 10.0.0.0/32;
フィルター条件に複数のIPアドレスを指定するには、各アドレスを独自の一致ステートメントに入力します。例えば、 送信元アドレス フィールドの値が以下の送信元アドレスプレフィックスのいずれかに一致する場合、次の用語で一致が発生します。
[edit firewall family family-name filter filter-name term term-name from] user@switch# set source-address 10.1.0.0/16 user@switch# set source-address 10.2.0.0/16
MACアドレスフィルター一致条件
MACアドレスフィルター一致条件は、パケット内の送信元と宛先のMACアドレス値を一致させることができます。MACアドレスフィルター一致条件では、フィールドを識別するキーワードと、パケットが一致する必要があるそのタイプの値を1つ指定します。
以下の形式で、MACアドレスを16進数6バイトで指定できます。
[edit firewall family family-name filter filter-name term term-name from] user@switch# set destination-mac-address 0011.2233.4455
[edit firewall family family-name filter filter-name term term-name from] user@switch# set destination-mac-address 00:11:22:33:44:55
[edit firewall family family-name filter filter-name term term-name from] user@switch# set destination-mac-address 001122334455
すべてのフォーマットは標準 00:11:22:33:44:55に解決されます。
フィルター条件で複数のMACアドレスを指定するには、各MACアドレスを独自の一致ステートメントに入力します。例えば、 source-mac-address フィールドの値が以下のアドレスのいずれかに一致する場合、以下の用語で一致が発生します。
[edit firewall family family-name filter filter-name term term-name from] user@switch# set source-mac-address 00:11:22:33:44:55 user@switch# set source-mac-address 00:11:22:33:20:15
ビットフィールドフィルター一致条件
ビットフィールドフィルター条件は、パケットフィールドの特定のビットが設定されているかどうかに一致します。IPオプション、TCPフラグ、IPフラグメント化フィールドを一致させることができます。ビットフィールドフィルター一致条件では、フィールドを識別するキーワードを指定し、フィールドにオプションが存在するかどうかをテストします。
一致させるビットフィールド値を指定するには、値を二重引用符で囲みます。例えば、TCPフラグフィールドの RST ビットが設定されている場合、一致が発生します。
[edit firewall family family-name filter filter-name term term-name from] user@switch# set tcp-flags "rst"
通常、テストするビットはキーワードを使用して指定します。ビットフィールド一致キーワードは、常に1つのビット値にマッピングされます。ビットフィールドを 16 進数または 10 進数として指定することもできます。
さまざまな形式の例:
tcp-flags "syn" tcp-flags "0x02" tcp-flags "tcp-initial"
複数のビットフィールド値を一致させるには、次の表に示す論理演算子を使用します。演算子は、優先順位の高いものから順に記載されています。操作は左連想です。
論理演算子 |
説明 |
|---|---|
! |
否定 |
& |
論理AND |
| |
論理OR |
一致を否定するには、値の前に感嘆符を付けます。例えば、TCPフラグフィールドのRSTビットが設定されていない場合にのみ、一致が発生します。
[edit firewall family family-name filter filter-name term term-name from] user@switch# set tcp-flags "!rst"
次の論理 AND 演算の例では、パケットが TCP セッションの最初のパケットである場合に一致が発生します。
[edit firewall family family-name filter filter-name term term-name from] user@switch# set tcp-flags "syn&!ack"
次の論理 OR 演算の例では、パケットが TCP セッションの確立または破棄の一部である場合に一致が発生します。
[edit firewall family family-name filter filter-name term term-name from] user@switch# set tcp-flags "syn|fin"
オペレーター使用のガイドライン:
- 値を引用符で囲みます。
"syn|fin" - 演算子の間にスペースは使用できません
- OR演算ごとに最大2つの値
- 左から右に優先順位で評価された操作: !> & > |
論理 OR 演算では、1 つの条件で最大 2 つの一致条件を指定できます。論理OR演算で2つ以上のビットフィールド値を一致させる必要がある場合は、追加のビットフィールド値とともに連続して同じ一致条件を設定します。次の例では、設定された 2 つの条件が、TCP フラグ フィールドの SYN、ACK、FIN、または RST ビットに一致します。
[edit firewall family family-name filter filter-name term term-name1 from] user@switch# set tcp-flags "syn|ack" [edit firewall family family-name filter filter-name term term-name2 from] user@switch# set tcp-flags "fin|rst"
テキスト同義語を使用して、いくつかの一般的なビットフィールド一致を指定できます。これらの一致は、単一のキーワードとして指定します。以下のテキスト シノニムの例では、パケットが TCP セッションの最初のパケットである場合に一致が発生します。
[edit firewall family family-name filter filter-name term term-name from] user@switch# set tcp-flags tcp-initial