Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Firewall Filter Match Conditions Based on Bit-Field Values

Match Conditions for Bit-Field Values

Table 1 lists the firewall filter match conditions that are based on whether certain bit fields in a packet are set or not set. The second and third columns list the types of traffic for which the match condition is supported.

Table 1: Binary and Bit-Field Match Conditions for Firewall Filters

Bit-Field Match Condition

Match Values

Protocol  Families for Standard Stateless Firewall Filters

Protocol Families for Service Filters

fragment-flags flags

Hexadecimal values or text aliases for the three-bit IP fragmentation flags field in the IP header.

family inet

family inet

fragment-offset value

Hexadecimal values or text aliases for the 13-bit fragment offset field in the IP header.

family inet

family inet

tcp-flags value

Hexadecimal values or text aliases for the low-order 6 bits of the 8-bit TCP flags field in the TCP header.

family inetfamily inet6family vplsfamily bridge

family inetfamily inet6

 The Junos OS does not automatically check the first fragment bit when matching TCP flags for IPv4 traffic. To check the first fragment bit for IPv4 traffic only, use the first-fragment match condition.

Match Conditions for Common Bit-Field Values or Combinations

Table 2 describes firewall filter match conditions that are based on whether certain commonly used values or combinations of bit fields in a packet are set or not set.

You can use text synonyms to specify some common bit-field matches. In the previous example, you can specify tcp-initial as the same match condition.

Note:

Some of the numeric range and bit-field match conditions allow you to specify a text synonym. For a complete list of synonyms:

  • If you are using the J-Web interface, select the synonym from the appropriate list.

  • If you are using the CLI, type a question mark (?) after the from statement.

Table 2: Bit-Field Match Conditions for Common Combinations

Match Condition

Description

Protocol Families for Standard Stateless Firewall Filters

Protocol Families for Service Filters

first-fragment

Text alias for the bit-field match condition fragment-offset 0, which indicates the first fragment of a fragmented packet.

family inet

family inet

is-fragment

Text alias for the bit-field match condition fragment-offset 0 except, which indicates a trailing fragment of a fragmented packet.

family inet

family inet

tcp-established

Alias for the bit-field match condition tcp-flags "(ack | rst)", which indicates an established TCP session, but not the first packet of a TCP connection.

family inetfamily inet6

tcp-initial

Alias for the bit-field match condition tcp-flags "(!ack & syn)", which indicates the first packet of a TCP connection, but not an established TCP session.

family inetfamily inet6

Logical Operators for Bit-Field Values

Table 3 lists the logical operators you can apply to single bit-field values when specifying stateless firewall filter match conditions. The operators are listed in order, from highest precedence to lowest precedence. Operations are left-associative, meaning that the operations are processed from left to right.

Table 3: Bit-Field Logical Operators

Precedence Order

Bit-Field Logical Operator

Description

1

(complex-match-condition)

Grouping—The complex match condition is evaluated before any operators outside the parentheses are applied.

2

match-condition

Negation—A match occurs if the match condition is false.

3

match-condition-1  &  match-condition-2ormatch-condition-1  +  match-condition-2

Logical AND—A match occurs if both match conditions are true.

4

match-condition-1  |  match-condition-2ormatch-condition-1  ,  match-condition-2

Logical OR—A match occurs if either match condition is true.

Matching on a Single Bit-Field Value or Text Alias

For the fragment-flags and tcp-flags bit-match conditions, you can specify firewall filter match conditions based on whether a particular bit in the packet field is set or not set.

  • Numeric value to specify a single bit—You can specify a single bit-field match condition by using a numeric value that has one bit set. Depending on the match condition, you can specify a decimal value, a binary value, or a hexadecimal value. To specify a binary value, specify the number with the prefix b. To specify a hexadecimal value, specify the number with the prefix 0x.

    In the following example, a match occurs if the RST bit in the TCP flags field is set:

  • Text alias to specify a single bit—You generally specify a single bit-field match condition by using a text alias enclosed in double-quotation marks (“ ”).

    In the following example, a match occurs if the RST bit in the TCP flags field is set:

Matching on Multiple Bit-Field Values or Text Aliases

You can specify a firewall filter match condition based on whether a particular set of bits in a packet field are set.

  • Numeric values to specify multiple set bits—When you specify a numeric value whose binary representation has more than one set bit, the value is treated as a logical AND of the set bits.

    In the following example, the two match conditions are the same. A match occurs if either bit 0x01 or 0x02 is not set:

  • Text aliases that specify common bit-field matches—You can use text aliases to specify some common bit-field matches. You specify these matches as a single keyword.

    In the following example, the tcp-established condition, which is an alias for “(ack | rst)”, specifies that a match occurs on TCP packets other than the first packet of a connection:

Matching on a Negated Bit-Field Value

To negate a match, precede the value with an exclamation point.

In the following example, a match occurs if the RST bit in the TCP flags field is  set:

Matching on the Logical OR of Two Bit-Field Values

You can use the (| or ,) to specify that a match occurs if a bit field matches either of two bit-field values specified.

In the following example, a match occurs if the packet is not the initial packet in a TCP session:

In a TCP session, the SYN flag is set only in the initial packet sent, while the ACK flag is set in all packets sent after the initial packet. In a packet that is not the initial packet in a TCP session, either the SYN flag is not set or the ACK flag is set.

Matching on the Logical AND of Two Bit-Field Values

You can use the (& or +) to specify that a match occurs if a bit field matches both of two bit-field values specified.

In the following example, a match occurs if the packet is the initial packet in a TCP session:

In a TCP session, the SYN flag is set only in the initial packet sent, while the ACK flag is set in all packets sent after the initial packet. In a packet that is an initial packet in a TCP session, the SYN flag is set and the ACK flag is not set.

Grouping Bit-Field Match Conditions

You can use the to specify that the complex match condition inside the parentheses is evaluated before any operators outside the parentheses are applied.

In the following example, a match occurs if the packet is a TCP reset or if the packet is not the initial packet in the TCP session:

In a TCP session, the SYN flag is set only in the initial packet sent, while the ACK flag is set in all packets sent after the initial packet. In a packet that is not the initial packet in a TCP session, the SYN flag is not set and the ACK field is set.