Policies are evaluated top to bottom, and the first match decides the outcome. Order therefore matters as much as what each policy says.
Within any zone pair, the gateway evaluates your custom policies before it falls back to the predefined defaults. In practice, a custom allow placed above a custom block carves out an exception, while the same allow placed below the block never fires.
The Network application lets you reorder custom policies within a zone pair. Remember that the predefined defaults act as the floor — whatever your custom policies do not match falls through to the matrix posture for that pair.
The three actions behave differently, and choosing the right one saves troubleshooting time later:
- Allow. Permits matching traffic. It can also permit the matching return traffic automatically, which is covered in the next section.
- Block. Drops matching packets silently. The sender receives no response and eventually times out.
- Reject. Drops matching packets but sends back a refusal, such as a TCP reset or an ICMP unreachable message. The client fails fast instead of waiting.
For traffic between internal zones, Reject is usually the more practical choice. After all, a smart hub that gets an immediate refusal logs a clear error, while one that gets silence may retry for minutes and appear broken for unrelated reasons.
For traffic arriving from External, Block remains the better default. There is no reason to confirm to an unsolicited scanner that anything is listening.
The ordering principle we follow is narrow-to-broad. Here's the sequence we use on a typical zone pair:
- Specific allows first. For example, allow the Home Assistant host to reach the IoT zone on the ports its integrations need.
- Specific blocks next. For instance, block a particular camera from reaching External if it should never phone home.
- Broad block last. Block everything else from the source zone to the destination zone, if the matrix default does not already do so.
Following this sequence keeps exceptions at the top of the list, where the next person troubleshooting will look first. What's more, it makes each policy's purpose obvious from its position, which matters once a zone pair holds more than a handful of entries.
Reusable port and IP groups help here as well. Rather than repeating the same five ports across three policies, define the group once and reference it, so a later change happens in one place.