summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorNicolas Fort <nicolasfort1988@gmail.com>2024-09-17 11:52:54 -0300
committerNicolas Fort <nicolasfort1988@gmail.com>2024-09-20 08:29:57 -0300
commit4ed909c79153fde0cc7d3089f8f4a2faead8536c (patch)
tree8f3e64c9fea03d740b2214168d30248fc58d2633 /docs
parentb6b3662367920fb8975c9e14221c12a7569ef8db (diff)
downloadvyos-documentation-4ed909c79153fde0cc7d3089f8f4a2faead8536c.tar.gz
vyos-documentation-4ed909c79153fde0cc7d3089f8f4a2faead8536c.zip
Firewall: add <ethernet-type> matcher for documentation ; add configuration blueprints for bridge and firewall configuration
Diffstat (limited to 'docs')
-rw-r--r--docs/configexamples/firewall.rst3
-rw-r--r--docs/configexamples/fwall-and-bridge.rst497
-rw-r--r--docs/configuration/firewall/bridge.rst60
3 files changed, 557 insertions, 3 deletions
diff --git a/docs/configexamples/firewall.rst b/docs/configexamples/firewall.rst
index e0a4ca55..a1ad7e19 100644
--- a/docs/configexamples/firewall.rst
+++ b/docs/configexamples/firewall.rst
@@ -1,4 +1,4 @@
-:lastproofread: 2024-06-14
+:lastproofread: 2024-09-11
Firewall Examples
=================
@@ -9,4 +9,5 @@ This section contains examples of firewall configurations for various deployment
:maxdepth: 2
fwall-and-vrf
+ fwall-and-bridge
zone-policy
diff --git a/docs/configexamples/fwall-and-bridge.rst b/docs/configexamples/fwall-and-bridge.rst
new file mode 100644
index 00000000..32c53fa5
--- /dev/null
+++ b/docs/configexamples/fwall-and-bridge.rst
@@ -0,0 +1,497 @@
+:lastproofread: 2024-09-11
+
+Bridge and firewall example
+---------------------------
+
+Scenario and requirements
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+This example shows how to configure a VyOS router with bridge interfaces and
+firewall rules.
+
+Three non VLAN-aware bridges are going to be configured, and each one has its
+own requirements.
+
+* Bridge br0:
+ * Isolated layer 2 bridge.
+ * Accept only IPv6 communication whithin the bridge.
+
+* Bridge br1:
+ * Drop all DHCP discover packets.
+ * Accept all ARP packets.
+ * Within the bridge, accept only new IPv4 connections from host 10.1.1.102
+ * Drop all other IPv4 connections.
+ * Drop all IPv6 connections.
+ * Accept access to router itself.
+ * Allow connections to internet
+ * Drop connections to other LANs.
+
+* Bridge br2:
+ * Accept all DHCP discover packets.
+ * Accept only DHCP offers from valid server and|or trusted bridge port.
+ * Accept all ARP packets.
+ * Accept all IPv4 connections.
+ * Drop all IPv6 connections.
+ * Deny access to the router.
+ * Allow connections to internet.
+ * Allow connections to bridge br1.
+
+Configuration
+^^^^^^^^^^^^^
+
+Bridges and interfaces configuration
+""""""""""""""""""""""""""""""""""""
+
+First, we need to configure the interfaces and bridges:
+
+.. code-block:: none
+
+ # Brige br0
+ set interfaces bridge br0 description 'Isolated L2 bridge'
+ set interfaces bridge br0 member interface eth1
+ set interfaces bridge br0 member interface eth2
+ set interfaces ethernet eth1 description 'br0'
+ set interfaces ethernet eth2 description 'br0'
+
+ # Bridge br1:
+ set interfaces bridge br1 address '10.1.1.1/24'
+ set interfaces bridge br1 description 'L3 bridge br1'
+ set interfaces bridge br1 member interface eth3
+ set interfaces bridge br1 member interface eth4
+ set interfaces ethernet eth3 description 'br1'
+ set interfaces ethernet eth4 description 'br1'
+
+ # Bridge br2:
+ set interfaces bridge br2 address '10.2.2.1/24'
+ set interfaces bridge br2 description 'L3 bridge br2'
+ set interfaces bridge br2 member interface eth5
+ set interfaces bridge br2 member interface eth6
+ set interfaces bridge br2 member interface eth7
+ set interfaces ethernet eth5 description 'br2 - Host'
+ set interfaces ethernet eth6 description 'br2 - Trusted DHCP Server'
+ set interfaces ethernet eth7 description 'br2'
+
+Bridge firewall configuration
+"""""""""""""""""""""""""""""
+
+In this section, we are going to configure the firewall rules that will be used
+in bridge firewall, and will control the traffic within each bridge.
+
+We are going to use custom firewall rulesets, one for each bridge that will
+be used in ``prerouting``, and one for each bridge that will be used in the
+``forward`` chain.
+
+Also, we are going to use firewall interface groups in order to simplify the
+firewall configuration.
+
+So first, let's create the required firewall interface groups:
+
+.. code-block:: none
+
+ # Bridge br0 interface-group:
+ set firewall group interface-group br0-ifaces interface 'br0'
+ set firewall group interface-group br0-ifaces interface 'eth1'
+ set firewall group interface-group br0-ifaces interface 'eth2'
+
+ # Bridge br1 interface-group:
+ set firewall group interface-group br1-ifaces interface 'br1'
+ set firewall group interface-group br1-ifaces interface 'eth3'
+ set firewall group interface-group br1-ifaces interface 'eth4'
+
+ # Bridge br2 interface-group:
+ set firewall group interface-group br2-ifaces interface 'br2'
+ set firewall group interface-group br2-ifaces interface 'eth5'
+ set firewall group interface-group br2-ifaces interface 'eth6'
+ set firewall group interface-group br2-ifaces interface 'eth7'
+
+As said before, we are going to create custom firewall rulesets for each
+bridge, that will be used in the ``prerouting`` chain, in order to drop as much
+unwanted traffic as early as possible. So, custom rulesets used in
+``prerouting`` chain are going to be ``br0-pre``, ``br1-pre``, and ``br2-pre``:
+
+.. code-block:: none
+
+ # Prerouting - Catch all traffic for br0
+ set firewall bridge prerouting filter rule 10 action 'jump'
+ set firewall bridge prerouting filter rule 10 description 'br0 traffic'
+ set firewall bridge prerouting filter rule 10 inbound-interface group 'br0-ifaces'
+ set firewall bridge prerouting filter rule 10 jump-target 'br0-pre'
+
+ # Prerouting - Catch all traffic for br1
+ set firewall bridge prerouting filter rule 20 action 'jump'
+ set firewall bridge prerouting filter rule 20 description 'br1 traffic'
+ set firewall bridge prerouting filter rule 20 inbound-interface group 'br1-ifaces'
+ set firewall bridge prerouting filter rule 20 jump-target 'br1-pre'
+
+ # Prerouting - Catch all traffic for br2
+ set firewall bridge prerouting filter rule 30 action 'jump'
+ set firewall bridge prerouting filter rule 30 description 'br2 traffic'
+ set firewall bridge prerouting filter rule 30 inbound-interface group 'br2-ifaces'
+ set firewall bridge prerouting filter rule 30 jump-target 'br2-pre'
+
+And then create the custom rulesets:
+
+.. code-block:: none
+
+ ### br0 - br0-pre
+ # Requirements: accept only IPv6 communication within the bridge
+ set firewall bridge name br0-pre rule 10 description 'Accept IPv6 traffic'
+ set firewall bridge name br0-pre rule 10 action 'accept'
+ set firewall bridge name br0-pre rule 10 ethernet-type 'ipv6'
+ # And drop everything else
+ set firewall bridge name br0-pre default-action 'drop'
+
+ ### br1 - br1-pre
+ # Requirements: drop all DHCP discover packets
+ set firewall bridge name br1-pre rule 10 description 'Drop DHCP discover'
+ set firewall bridge name br1-pre rule 10 action 'drop'
+ set firewall bridge name br1-pre rule 10 protocol 'udp'
+ set firewall bridge name br1-pre rule 10 source port '68'
+ set firewall bridge name br1-pre rule 10 destination port '67'
+ set firewall bridge name br1-pre rule 10 destination mac-address 'ff:ff:ff:ff:ff:ff'
+ set firewall bridge name br1-pre rule 10 log
+ # Requirement: drop all IPv6 connections
+ set firewall bridge name br1-pre rule 20 description 'Drop IPv6 traffic'
+ set firewall bridge name br1-pre rule 20 action 'drop'
+ set firewall bridge name br1-pre rule 20 ethernet-type 'ipv6'
+ # Accept everything else so it can be parsed later
+ set firewall bridge name br1-pre default-action 'accept'
+
+ ### br2 - br2-pre
+ # Requirements: drop all IPv6 connections
+ set firewall bridge name br2-pre rule 10 description 'Drop IPv6 traffic'
+ set firewall bridge name br2-pre rule 10 action 'drop'
+ set firewall bridge name br2-pre rule 10 ethernet-type 'ipv6'
+ # Accept everything else so it can be parsed later
+ set firewall bridge name br2-pre default-action 'accept'
+
+Now, in the ``forward`` chain, we are going to define state policies, and
+custom rulesets for each bridge that would be used in the ``forward`` chain.
+These rulesets are ``br0-fwd``, ``br1-fwd``, and ``br2-fwd``:
+
+.. code-block:: none
+
+ # Forward - State policies if not defined globally
+ set firewall bridge forward filter rule 5 action 'accept'
+ set firewall bridge forward filter rule 5 state 'established'
+ set firewall bridge forward filter rule 5 state 'related'
+ set firewall bridge forward filter rule 10 action 'drop'
+ set firewall bridge forward filter rule 10 state 'invalid'
+
+ # Forward - Catch all traffic for br0
+ set firewall bridge forward filter rule 110 description 'br0 traffic'
+ set firewall bridge forward filter rule 110 action 'jump'
+ set firewall bridge forward filter rule 110 inbound-interface group 'br0-ifaces'
+ set firewall bridge forward filter rule 110 jump-target 'br0-fwd'
+
+ # Forward - Catch all traffic for br1
+ set firewall bridge forward filter rule 120 description 'br1 traffic'
+ set firewall bridge forward filter rule 120 action 'jump'
+ set firewall bridge forward filter rule 120 inbound-interface group 'br1-ifaces'
+ set firewall bridge forward filter rule 120 jump-target 'br1-fwd'
+
+ # Forward - Catch all traffic for br2
+ set firewall bridge forward filter rule 130 description 'br2 traffic'
+ set firewall bridge forward filter rule 130 action 'jump'
+ set firewall bridge forward filter rule 130 inbound-interface group 'br2-ifaces'
+ set firewall bridge forward filter rule 130 jump-target 'br2-fwd'
+
+ # Forward - Default action drop:
+ set firewall bridge forward filter default-action 'drop'
+
+And the content of the custom rulesets:
+
+.. code-block:: none
+
+ ### br0 - br0-fwd
+ # Accept everything that wasn't dropped in prerouting
+ set firewall bridge name br0-fwd default-action 'accept'
+
+ ### br1 - br1-fwd
+ # Requirement: Accept all ARP packets
+ set firewall bridge name br1-fwd rule 10 description 'Accept ARP'
+ set firewall bridge name br1-fwd rule 10 action 'accept'
+ set firewall bridge name br1-fwd rule 10 ethernet-type 'arp'
+ # Requirement: Accept only new IPv4 connections from host 10.1.1.102
+ set firewall bridge name br1-fwd rule 20 description 'Accept ipv4 from host'
+ set firewall bridge name br1-fwd rule 20 action 'accept'
+ set firewall bridge name br1-fwd rule 20 source address '10.1.1.102'
+ set firewall bridge name br1-fwd rule 20 state 'new'
+ # Drop everythin else within the bridge:
+ set firewall bridge name br1-fwd default-action 'drop'
+
+ ### br2 - br2-fwd
+ # Requirement: Accept all DHCP discover packets
+ set firewall bridge name br2-fwd rule 10 description 'Accept DHCP discover'
+ set firewall bridge name br2-fwd rule 10 action 'accept'
+ set firewall bridge name br2-fwd rule 10 protocol 'udp'
+ set firewall bridge name br2-fwd rule 10 source port '68'
+ set firewall bridge name br2-fwd rule 10 destination port '67'
+ set firewall bridge name br2-fwd rule 10 destination mac-address 'ff:ff:ff:ff:ff:ff'
+ # Requirement: Accept only DHCP offers from valid server on port eth6
+ set firewall bridge name br2-fwd rule 20 description 'Accept DHCP offers from trusted interface'
+ set firewall bridge name br2-fwd rule 20 action 'accept'
+ set firewall bridge name br2-fwd rule 20 protocol 'udp'
+ set firewall bridge name br2-fwd rule 20 source port '67'
+ set firewall bridge name br2-fwd rule 20 destination port '68'
+ set firewall bridge name br2-fwd rule 20 inbound-interface name 'eth6'
+ set firewall bridge name br2-fwd rule 22 description 'Drop all other DHCP offers'
+ set firewall bridge name br2-fwd rule 22 action 'drop'
+ set firewall bridge name br2-fwd rule 22 protocol 'udp'
+ set firewall bridge name br2-fwd rule 22 source port '67'
+ set firewall bridge name br2-fwd rule 22 destination port '68'
+ set firewall bridge name br2-fwd rule 22 log
+
+ # Accept all ARP packets
+ set firewall bridge name br2-fwd rule 30 description 'Accept ARP'
+ set firewall bridge name br2-fwd rule 30 action 'accept'
+ set firewall bridge name br2-fwd rule 30 ethernet-type 'arp'
+ # Accept all IPv4 connections
+ set firewall bridge name br2-fwd rule 40 description 'Accept ipv4'
+ set firewall bridge name br2-fwd rule 40 action 'accept'
+ set firewall bridge name br2-fwd rule 40 ethernet-type 'ipv4'
+ # Drop everything else
+ set firewall bridge name br2-fwd default-action 'drop'
+
+
+IP firewall configuration
+"""""""""""""""""""""""""
+
+Since some of the requirements listed above exceed the capabilities of the
+bridge firewall, we need to use the IP firewall to implement them.
+For bridge br1 and br2, we need to control the traffic that is going to the
+router itself, to other local networks, and to the Internet.
+
+As a reminder, here's a link to the :doc:`firewall documentation
+</configuration/firewall/index>`, where you can find more information about
+the packet flow for traffic that comes from bridge layer and should be analized
+by the IP firewall.
+
+Access to the router itself is controlled by the base chain ``input``, and
+rules to accomplish all the requirements are:
+
+.. code-block:: none
+
+ # First of all, if not using global state policies, we need to define them:
+ set firewall ipv4 input filter rule 10 state 'established'
+ set firewall ipv4 input filter rule 10 state 'related'
+ set firewall ipv4 input filter rule 10 action 'accept'
+ set firewall ipv4 input filter rule 20 state 'invalid'
+ set firewall ipv4 input filter rule 20 action 'drop'
+
+ # Input - br1 - Accept access to router itself
+ set firewall ipv4 input filter rule 110 description "Accept access from br1"
+ set firewall ipv4 input filter rule 110 action 'accept'
+ set firewall ipv4 input filter rule 110 inbound-interface group 'br1-ifaces'
+
+ # Input - br2 - Deny access to the router
+ set firewall ipv4 input filter rule 120 description "Deny access from br2"
+ set firewall ipv4 input filter rule 120 action 'drop'
+ set firewall ipv4 input filter rule 120 inbound-interface group 'br2-ifaces'
+
+And for traffic that is going to other local networks, and to he Internet, we
+need to use the base chain ``forward``. As in the bridge firewall, we are
+going to use custom rulesets for each bridge, that would be used in the
+``forward`` chain. Those rulesets are ``ip-br1-fwd`` and ``ip-br2-fwd``:
+
+.. code-block:: none
+
+ # First of all, if not using global state policies, we need to define them:
+ set firewall ipv4 forward filter rule 5 action 'accept'
+ set firewall ipv4 forward filter rule 5 state 'established'
+ set firewall ipv4 forward filter rule 5 state 'related'
+ set firewall ipv4 forward filter rule 10 action 'drop'
+ set firewall ipv4 forward filter rule 10 state 'invalid'
+
+ # Forward - Catch all traffic for br1
+ set firewall ipv4 forward filter rule 110 description 'br1 traffic'
+ set firewall ipv4 forward filter rule 110 action 'jump'
+ set firewall ipv4 forward filter rule 110 inbound-interface group 'br1-ifaces'
+ set firewall ipv4 forward filter rule 110 jump-target 'ip-br1-fwd'
+
+ # Forward - Catch all traffic for br2
+ set firewall ipv4 forward filter rule 120 description 'br2 traffic'
+ set firewall ipv4 forward filter rule 120 action 'jump'
+ set firewall ipv4 forward filter rule 120 inbound-interface group 'br2-ifaces'
+ set firewall ipv4 forward filter rule 120 jump-target 'ip-br2-fwd'
+
+ # Forward - Default action drop:
+ set firewall ipv4 forward filter default-action 'drop'
+
+And the content of the custom rulesets:
+
+.. code-block:: none
+
+ ### br1 - ip-br1-fwd
+ # Requirement: Allow connections to internet
+ set firewall ipv4 name ip-br1-fwd rule 10 description 'br1 - allow internet access'
+ set firewall ipv4 name ip-br1-fwd rule 10 action 'accept'
+ set firewall ipv4 name ip-br1-fwd rule 10 outbound-interface name 'eth0'
+ # Requirement: Drop all other connections
+ set firewall ipv4 name ip-br1-fwd default-action 'drop'
+
+ ### br2 - ip-br2-fwd
+ # Requirement: Allow connections to internet
+ set firewall ipv4 name ip-br2-fwd rule 10 description 'br2 - allow internet access'
+ set firewall ipv4 name ip-br2-fwd rule 10 action 'accept'
+ set firewall ipv4 name ip-br2-fwd rule 10 outbound-interface name 'eth0'
+ # Requirement: Allow connections to br1
+ set firewall ipv4 name ip-br2-fwd rule 20 description 'br2 - allow access to br1'
+ set firewall ipv4 name ip-br2-fwd rule 20 action 'accept'
+ set firewall ipv4 name ip-br2-fwd rule 20 outbound-interface group 'br1-ifaces'
+ # Requirement: Drop all other connections
+ set firewall ipv4 name ip-br2-fwd default-action 'drop'
+
+
+Validation
+^^^^^^^^^^
+
+While testing the configuration, we can check logs in order to ensure that
+we are accepting and/or blocking the correct traffic.
+
+For example, while a host tries to get an IP address from a DHCP server in
+br1 all DHCP discover are dropped, and in br2, we can see that DHCP offers from
+untrusted servers are dropped:
+
+.. code-block:: none
+
+ vyos@bridge:~$ show log firewall bridge
+ Sep 17 14:22:35 kernel: [bri-NAM-br2-fwd-22-D]IN=eth7 OUT=eth5 MAC=50:00:00:09:00:00:50:00:00:04:00:00:08:00 SRC=10.2.2.199 DST=10.2.2.92 LEN=322 TOS=0x10 PREC=0x00 TTL=128 ID=0 DF PROTO=UDP SPT=67 DPT=68 LEN=302
+ Sep 17 14:28:18 kernel: [bri-NAM-br1-pre-10-D]IN=eth3 OUT= MAC=ff:ff:ff:ff:ff:ff:00:50:79:66:68:0c:08:00 SRC=0.0.0.0 DST=255.255.255.255 LEN=392 TOS=0x10 PREC=0x00 TTL=16 ID=0 PROTO=UDP SPT=68 DPT=67 LEN=372
+ Sep 17 14:28:19 kernel: [bri-NAM-br1-pre-10-D]IN=eth3 OUT= MAC=ff:ff:ff:ff:ff:ff:00:50:79:66:68:0c:08:00 SRC=0.0.0.0 DST=255.255.255.255 LEN=392 TOS=0x10 PREC=0x00 TTL=16 ID=0 PROTO=UDP SPT=68 DPT=67 LEN=372
+
+
+And with operational mode commands, we can check rules matchers, actions, and
+counters.
+
+Bridge firewall rulset:
+
+.. code-block:: none
+
+ vyos@bri:~$ show firewall bridge
+ Rulesets bridge Information
+
+ ---------------------------------
+ bridge Firewall "forward filter"
+
+ Rule Action Protocol Packets Bytes Conditions
+ ------- -------- ---------- --------- ------- -----------------------------------------
+ 5 accept all 19 1916 ct state { established, related } accept
+ 10 drop all 0 0 ct state invalid
+ 110 jump all 2 208 iifname @I_br0-ifaces jump NAME_br0-fwd
+ 120 jump all 10 670 iifname @I_br1-ifaces jump NAME_br1-fwd
+ 130 jump all 12 3086 iifname @I_br2-ifaces jump NAME_br2-fwd
+ default drop all 0 0
+
+ ---------------------------------
+ bridge Firewall "name br0-fwd"
+
+ Rule Action Protocol Packets Bytes
+ ------- -------- ---------- --------- -------
+ default accept all 2 208
+
+ ---------------------------------
+ bridge Firewall "name br0-pre"
+
+ Rule Action Protocol Packets Bytes Conditions
+ ------- -------- ---------- --------- ------- ----------------------
+ 10 accept all 18 1872 ether type ip6 accept
+ default drop all 9 1476
+
+ ---------------------------------
+ bridge Firewall "name br1-fwd"
+
+ Rule Action Protocol Packets Bytes Conditions
+ ------- -------- ---------- --------- ------- ----------------------------------------
+ 10 accept all 5 250 ether type arp accept
+ 20 accept all 3 252 ct state new ip saddr 10.1.1.102 accept
+ default drop all 2 168
+
+ ---------------------------------
+ bridge Firewall "name br1-pre"
+
+ Rule Action Protocol Packets Bytes Conditions
+ ------- -------- ---------- --------- ------- ----------------------------------------------------------------------------------------
+ 10 drop udp 3 1176 ether daddr ff:ff:ff:ff:ff:ff udp sport 68 udp dport 67 prefix "[bri-NAM-br1-pre-10-D]"
+ 20 drop all 0 0 ether type ip6
+ default accept all 58 4430
+
+ ---------------------------------
+ bridge Firewall "name br2-fwd"
+
+ Rule Action Protocol Packets Bytes Conditions
+ ------- -------- ---------- --------- ------- ---------------------------------------------------------------
+ 10 accept udp 4 1312 ether daddr ff:ff:ff:ff:ff:ff udp sport 68 udp dport 67 accept
+ 20 accept udp 2 656 udp sport 67 udp dport 68 iifname "eth6" accept
+ 22 drop udp 1 322 udp sport 67 udp dport 68 prefix "[bri-NAM-br2-fwd-22-D]"
+ 30 accept all 2 92 ether type arp accept
+ 40 accept all 3 704 ether type ip accept
+ default drop all 0 0
+
+ ---------------------------------
+ bridge Firewall "name br2-pre"
+
+ Rule Action Protocol Packets Bytes Conditions
+ ------- -------- ---------- --------- ------- --------------
+ 10 drop all 7 728 ether type ip6
+ default accept all 77 7548
+
+ ---------------------------------
+ bridge Firewall "prerouting filter"
+
+ Rule Action Protocol Packets Bytes Conditions
+ ------- -------- ---------- --------- ------- ----------------------------------------
+ 10 jump all 27 3348 iifname @I_br0-ifaces jump NAME_br0-pre
+ 20 jump all 61 5606 iifname @I_br1-ifaces jump NAME_br1-pre
+ 30 jump all 84 8276 iifname @I_br2-ifaces jump NAME_br2-pre
+ default drop all 0 0
+
+ vyos@bridge:~$
+
+IPv4 firewall rulset:
+
+.. code-block:: none
+
+ vyos@bridge:~$ show firewall ipv4
+ Rulesets ipv4 Information
+
+ ---------------------------------
+ ipv4 Firewall "forward filter"
+
+ Rule Action Protocol Packets Bytes Conditions
+ ------- -------- ---------- --------- ------- -------------------------------------------
+ 5 accept all 76 6384 ct state { established, related } accept
+ 10 drop all 0 0 ct state invalid
+ 110 jump all 13 1092 iifname @I_br1-ifaces jump NAME_ip-br1-fwd
+ 120 jump all 3 252 iifname @I_br2-ifaces jump NAME_ip-br2-fwd
+ default drop all 0 0
+
+ ---------------------------------
+ ipv4 Firewall "input filter"
+
+ Rule Action Protocol Packets Bytes Conditions
+ ------- -------- ---------- --------- ------- -----------------------------------------
+ 10 accept all 0 0 ct state { established, related } accept
+ 20 drop all 0 0 ct state invalid
+ 110 accept all 10 720 iifname @I_br1-ifaces accept
+ 120 drop all 26 2672 iifname @I_br2-ifaces
+ default accept all 3037 991621
+
+ ---------------------------------
+ ipv4 Firewall "name ip-br1-fwd"
+
+ Rule Action Protocol Packets Bytes Conditions
+ ------- -------- ---------- --------- ------- ----------------------
+ 10 accept all 5 420 oifname "eth0" accept
+ default drop all 8 672
+
+ ---------------------------------
+ ipv4 Firewall "name ip-br2-fwd"
+
+ Rule Action Protocol Packets Bytes Conditions
+ ------- -------- ---------- --------- ------- -----------------------------
+ 10 accept all 1 84 oifname "eth0" accept
+ 20 accept all 2 168 oifname @I_br1-ifaces accept
+ default drop all 0 0
+
+ vyos@bridge:~$
diff --git a/docs/configuration/firewall/bridge.rst b/docs/configuration/firewall/bridge.rst
index 14b4e148..39956236 100644
--- a/docs/configuration/firewall/bridge.rst
+++ b/docs/configuration/firewall/bridge.rst
@@ -327,8 +327,64 @@ There are a lot of matching criteria against which the packet can be tested.
Please refer to :doc:`IPv4</configuration/firewall/ipv4>` and
:doc:`IPv6</configuration/firewall/ipv6>` matching criteria for more details.
-Since bridges operates at layer 2, both matchers for IPv4 and IPv6 are
-supported in bridge firewall configuration. Same applies for firewall groups.
+Since bridges operats at layer 2, both matchers for IPv4 and IPv6 are
+supported in bridge firewall configuration. Same applies to firewall groups.
+
+Same specific matching criteria that can be used in bridge firewall are
+described in this section:
+
+.. cfgcmd:: set firewall bridge forward filter rule <1-999999> ethernet-type
+ [802.1q | 802.1ad | arp | ipv4 | ipv6]
+.. cfgcmd:: set firewall bridge input filter rule <1-999999> ethernet-type
+ [802.1q | 802.1ad | arp | ipv4 | ipv6]
+.. cfgcmd:: set firewall bridge output filter rule <1-999999> ethernet-type
+ [802.1q | 802.1ad | arp | ipv4 | ipv6]
+.. cfgcmd:: set firewall bridge prerouting filter rule <1-999999> ethernet-type
+ [802.1q | 802.1ad | arp | ipv4 | ipv6]
+.. cfgcmd:: set firewall bridge name <name> rule <1-999999> ethernet-type
+ [802.1q | 802.1ad | arp | ipv4 | ipv6]
+
+ Match based on the Ethernet type of the packet.
+
+.. cfgcmd:: set firewall bridge forward filter rule <1-999999> vlan
+ ethernet-type [802.1q | 802.1ad | arp | ipv4 | ipv6]
+.. cfgcmd:: set firewall bridge input filter rule <1-999999> vlan
+ ethernet-type [802.1q | 802.1ad | arp | ipv4 | ipv6]
+.. cfgcmd:: set firewall bridge output filter rule <1-999999> vlan
+ ethernet-type [802.1q | 802.1ad | arp | ipv4 | ipv6]
+.. cfgcmd:: set firewall bridge prerouting filter rule <1-999999> vlan
+ ethernet-type [802.1q | 802.1ad | arp | ipv4 | ipv6]
+.. cfgcmd:: set firewall bridge name <name> rule <1-999999> vlan
+ ethernet-type [802.1q | 802.1ad | arp | ipv4 | ipv6]
+
+ Match based on the Ethernet type of the packet when it is VLAN tagged.
+
+.. cfgcmd:: set firewall bridge forward filter rule <1-999999> vlan id
+ <0-4096>
+.. cfgcmd:: set firewall bridge input filter rule <1-999999> vlan id
+ <0-4096>
+.. cfgcmd:: set firewall bridge output filter rule <1-999999> vlan id
+ <0-4096>
+.. cfgcmd:: set firewall bridge prerouting filter rule <1-999999> vlan id
+ <0-4096>
+.. cfgcmd:: set firewall bridge name <name> rule <1-999999> vlan id
+ <0-4096>
+
+ Match based on VLAN identifier. Range is also supported.
+
+.. cfgcmd:: set firewall bridge forward filter rule <1-999999> vlan priority
+ <0-7>
+.. cfgcmd:: set firewall bridge input filter rule <1-999999> vlan priority
+ <0-7>
+.. cfgcmd:: set firewall bridge output filter rule <1-999999> vlan priority
+ <0-7>
+.. cfgcmd:: set firewall bridge prerouting filter rule <1-999999> vlan priority
+ <0-7>
+.. cfgcmd:: set firewall bridge name <name> rule <1-999999> vlan priority
+ <0-7>
+
+ Match based on VLAN priority (Priority Code Point - PCP). Range is also
+ supported.
Use IP firewall
===============