diff options
| author | Yuriy Andamasov <yuriy@vyos.io> | 2026-05-10 17:27:05 +0300 |
|---|---|---|
| committer | Yuriy Andamasov <yuriy@vyos.io> | 2026-05-10 17:27:05 +0300 |
| commit | e7a0bebdb5dc4b436b8b610bcb4f01afc33152e0 (patch) | |
| tree | d9ad6bc834c8e5240c300dff6d47841c2787ce61 /docs/configuration/firewall | |
| parent | 15855844e1fe5b0bd39b020639f4c08c69d24864 (diff) | |
| download | vyos-documentation-e7a0bebdb5dc4b436b8b610bcb4f01afc33152e0.tar.gz vyos-documentation-e7a0bebdb5dc4b436b8b610bcb4f01afc33152e0.zip | |
chore: remove RST swap mechanism, archive rst-*.rst under docs/_rst_legacy/
The swap mechanism (RST-as-fallback for migrated MD pages) is dormant —
docs/_rst_overrides.txt has been empty since the MyST flip trio
landed. The mechanism's surface area is dead weight and the rst-*.rst
shadows scattered across the source tree cause Context7's parser to
misclassify the project as RST.
Sibling PRs:
- yuriy/remove-rst-swap-mechanism (rolling)
- yuriy/remove-rst-swap-mechanism-circinus
Changes:
- Move 210 rst-*.rst shadow files into docs/_rst_legacy/ preserving
subdirectory structure. They remain in the repo for reference; Sphinx
excludes the folder via exclude_patterns.
- Strip swap_sources.py invocation from docs/Makefile.
- Strip rst-*.rst exclude entry and the _md_exclude.txt loader from
docs/conf.py; replace with a single _rst_legacy exclude.
- Delete scripts/swap_sources.py, tests/test_swap_sources.py,
docs/_rst_overrides.txt.
- Update AGENTS.md: drop the "RST override mechanism" section and the
test-runner snippet for the deleted test.
Note: .readthedocs.yml on sagitta has no jobs: block to remove (the
swap was wired only at build-time via the Makefile chain on this branch).
Verified: sphinx-build -b html with --keep-going produces identical
warning set (409 unique — pre-existing cli.rst/aws.rst title-level
warnings on this branch), identical sitemap entry count (215),
identical llms.txt entry count (23), zero rst-* URLs in any artifact.
🤖 Generated by [robots](https://vyos.io)
Diffstat (limited to 'docs/configuration/firewall')
| -rw-r--r-- | docs/configuration/firewall/rst-bridge.rst | 401 | ||||
| -rw-r--r-- | docs/configuration/firewall/rst-flowtables.rst | 189 | ||||
| -rw-r--r-- | docs/configuration/firewall/rst-global-options.rst | 147 | ||||
| -rw-r--r-- | docs/configuration/firewall/rst-groups.rst | 429 | ||||
| -rw-r--r-- | docs/configuration/firewall/rst-index.rst | 180 | ||||
| -rw-r--r-- | docs/configuration/firewall/rst-ipv4.rst | 1237 | ||||
| -rw-r--r-- | docs/configuration/firewall/rst-ipv6.rst | 1233 | ||||
| -rw-r--r-- | docs/configuration/firewall/rst-zone.rst | 163 |
8 files changed, 0 insertions, 3979 deletions
diff --git a/docs/configuration/firewall/rst-bridge.rst b/docs/configuration/firewall/rst-bridge.rst deleted file mode 100644 index bba9e56f..00000000 --- a/docs/configuration/firewall/rst-bridge.rst +++ /dev/null @@ -1,401 +0,0 @@ -:lastproofread: 2023-11-08 - -.. _firewall-configuration: - -############################# -Bridge Firewall Configuration -############################# - -.. note:: **Documentation under development** - -******** -Overview -******** - -In this section there's useful information of all firewall configuration that -can be done regarding bridge, and appropiate op-mode commands. -Configuration commands covered in this section: - -.. cfgcmd:: set firewall bridge ... - -From main structure defined in :doc:`Firewall Overview</configuration/firewall/index>` -in this section you can find detailed information only for the next part -of the general structure: - -.. code-block:: none - - - set firewall - * bridge - - forward - + filter - - name - + custom_name - -Traffic which is received by the router on an interface which is member of a -bridge is processed on the **Bridge Layer**. A simplified packet flow diagram -for this layer is shown next: - -.. figure:: /_static/images/firewall-bridge-packet-flow.png - -For traffic that needs to be forwared internally by the bridge, base chain is -is **forward**, and it's base command for filtering is ``set firewall bridge -forward filter ...``, which happens in stage 4, highlightened with red color. - -Custom bridge firewall chains can be create with command ``set firewall bridge -name <name> ...``. In order to use such custom chain, a rule with action jump, -and the appropiate target should be defined in a base chain. - -.. note:: **Layer 3 bridge**: - When an IP address is assigned to the bridge interface, and if traffic - is sent to the router to this IP (for example using such IP as - default gateway), then rules defined for **bridge firewall** won't - match, and firewall analysis continues at **IP layer**. - -************ -Bridge Rules -************ - -For firewall filtering, firewall rules needs to be created. Each rule is -numbered, has an action to apply if the rule is matched, and the ability -to specify multiple criteria matchers. Data packets go through the rules -from 1 - 999999, so order is crucial. At the first match the action of the -rule will be executed. - -Actions -======= - -If a rule is defined, then an action must be defined for it. This tells the -firewall what to do if all criteria matchers defined for such rule do match. - -In firewall bridge rules, the action can be: - - * ``accept``: accept the packet. - - * ``continue``: continue parsing next rule. - - * ``drop``: drop the packet. - - * ``jump``: jump to another custom chain. - - * ``return``: Return from the current chain and continue at the next rule - of the last chain. - - * ``queue``: Enqueue packet to userspace. - -.. cfgcmd:: set firewall bridge forward filter rule <1-999999> action - [accept | continue | drop | jump | queue | return] -.. cfgcmd:: set firewall bridge name <name> rule <1-999999> action - [accept | continue | drop | jump | queue | return] - - This required setting defines the action of the current rule. If action is - set to jump, then jump-target is also needed. - -.. cfgcmd:: set firewall bridge forward filter rule <1-999999> - jump-target <text> -.. cfgcmd:: set firewall bridge name <name> rule <1-999999> - jump-target <text> - -.. cfgcmd:: set firewall bridge forward filter rule <1-999999> - queue <0-65535> -.. cfgcmd:: set firewall bridge name <name> rule <1-999999> - queue <0-65535> - - To be used only when action is set to ``queue``. Use this command to specify - queue target to use. Queue range is also supported. - -.. cfgcmd:: set firewall bridge forward filter rule <1-999999> - queue-options bypass -.. cfgcmd:: set firewall bridge name <name> rule <1-999999> - queue-options bypass - - To be used only when action is set to ``queue``. Use this command to let - packet go through firewall when no userspace software is connected to the - queue. - -.. cfgcmd:: set firewall bridge forward filter rule <1-999999> - queue-options fanout -.. cfgcmd:: set firewall bridge name <name> rule <1-999999> - queue-options fanout - - To be used only when action is set to ``queue``. Use this command to - distribute packets between several queues. - -Also, **default-action** is an action that takes place whenever a packet does -not match any rule in it's chain. For base chains, possible options for -**default-action** are **accept** or **drop**. - -.. cfgcmd:: set firewall bridge forward filter default-action - [accept | drop] -.. cfgcmd:: set firewall bridge name <name> default-action - [accept | continue | drop | jump | queue | return] - - This set the default action of the rule-set if no rule matched a packet - criteria. If default-action is set to ``jump``, then - ``default-jump-target`` is also needed. Note that for base chains, default - action can only be set to ``accept`` or ``drop``, while on custom chain, - more actions are available. - -.. cfgcmd:: set firewall bridge name <name> default-jump-target <text> - - To be used only when ``defult-action`` is set to ``jump``. Use this - command to specify jump target for default rule. - -.. note:: **Important note about default-actions:** - If default action for any base chain is not defined, then the default - action is set to **accept** for that chain. For custom chains, if default - action is not defined, then the default-action is set to **drop**. - -Firewall Logs -============= - -Logging can be enable for every single firewall rule. If enabled, other -log options can be defined. - -.. cfgcmd:: set firewall bridge forward filter rule <1-999999> log -.. cfgcmd:: set firewall bridge name <name> rule <1-999999> log - - Enable logging for the matched packet. If this configuration command is not - present, then log is not enabled. - -.. cfgcmd:: set firewall bridge forward filter default-log -.. cfgcmd:: set firewall bridge name <name> default-log - - Use this command to enable the logging of the default action on - the specified chain. - -.. cfgcmd:: set firewall bridge forward filter rule <1-999999> - log-options level [emerg | alert | crit | err | warn | notice - | info | debug] -.. cfgcmd:: set firewall bridge name <name> rule <1-999999> - log-options level [emerg | alert | crit | err | warn | notice - | info | debug] - - Define log-level. Only applicable if rule log is enable. - -.. cfgcmd:: set firewall bridge forward filter rule <1-999999> - log-options group <0-65535> -.. cfgcmd:: set firewall bridge name <name> rule <1-999999> - log-options group <0-65535> - - Define log group to send message to. Only applicable if rule log is enable. - -.. cfgcmd:: set firewall bridge forward filter rule <1-999999> - log-options snapshot-length <0-9000> -.. cfgcmd:: set firewall bridge name <name> rule <1-999999> - log-options snapshot-length <0-9000> - - Define length of packet payload to include in netlink message. Only - applicable if rule log is enable and log group is defined. - -.. cfgcmd:: set firewall bridge forward filter rule <1-999999> - log-options queue-threshold <0-65535> -.. cfgcmd:: set firewall bridge name <name> rule <1-999999> - log-options queue-threshold <0-65535> - - Define number of packets to queue inside the kernel before sending them to - userspace. Only applicable if rule log is enable and log group is defined. - -Firewall Description -==================== - -For reference, a description can be defined for every defined custom chain. - -.. cfgcmd:: set firewall bridge name <name> description <text> - - Provide a rule-set description to a custom firewall chain. - -Rule Status -=========== - -When defining a rule, it is enable by default. In some cases, it is useful to -just disable the rule, rather than removing it. - -.. cfgcmd:: set firewall bridge forward filter rule <1-999999> disable -.. cfgcmd:: set firewall bridge name <name> rule <1-999999> disable - - Command for disabling a rule but keep it in the configuration. - -Matching criteria -================= - -There are a lot of matching criteria against which the packet can be tested. - -.. cfgcmd:: set firewall bridge forward filter rule <1-999999> - destination mac-address <mac-address> -.. cfgcmd:: set firewall bridge name <name> rule <1-999999> - destination mac-address <mac-address> -.. cfgcmd:: set firewall bridge forward filter rule <1-999999> - source mac-address <mac-address> -.. cfgcmd:: set firewall bridge name <name> rule <1-999999> - source mac-address <mac-address> - - Match criteria based on source and/or destination mac-address. - -.. cfgcmd:: set firewall bridge forward filter rule <1-999999> - inbound-interface name <iface> -.. cfgcmd:: set firewall bridge name <name> rule <1-999999> - inbound-interface name <iface> - - Match based on inbound interface. Wilcard ``*`` can be used. - For example: ``eth2*``. Prepending character ``!`` for inverted matching - criteria is also supportd. For example ``!eth2`` - -.. cfgcmd:: set firewall bridge forward filter rule <1-999999> - inbound-interface group <iface_group> -.. cfgcmd:: set firewall bridge name <name> rule <1-999999> - inbound-interface group <iface_group> - - Match based on inbound interface group. Prepending character ``!`` for - inverted matching criteria is also supportd. For example ``!IFACE_GROUP`` - -.. cfgcmd:: set firewall bridge forward filter rule <1-999999> - outbound-interface name <iface> -.. cfgcmd:: set firewall bridge name <name> rule <1-999999> - outbound-interface name <iface> - - Match based on outbound interface. Wilcard ``*`` can be used. - For example: ``eth2*``. Prepending character ``!`` for inverted matching - criteria is also supportd. For example ``!eth2`` - -.. cfgcmd:: set firewall bridge forward filter rule <1-999999> - outbound-interface group <iface_group> -.. cfgcmd:: set firewall bridge name <name> rule <1-999999> - outbound-interface group <iface_group> - - Match based on outbound interface group. Prepending character ``!`` for - inverted matching criteria is also supportd. For example ``!IFACE_GROUP`` - -.. cfgcmd:: set firewall bridge forward 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 ID. Range is also supported. - -.. cfgcmd:: set firewall bridge forward 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(pcp). Range is also supported. - -*********************** -Operation-mode Firewall -*********************** - -Rule-set overview -================= - -In this section you can find all useful firewall op-mode commands. - -General commands for firewall configuration, counter and statiscits: - -.. opcmd:: show firewall -.. opcmd:: show firewall summary -.. opcmd:: show firewall statistics - -And, to print only bridge firewall information: - -.. opcmd:: show firewall bridge -.. opcmd:: show firewall bridge forward filter -.. opcmd:: show firewall bridge forward filter rule <rule> -.. opcmd:: show firewall bridge name <name> -.. opcmd:: show firewall bridge name <name> rule <rule> - -Show Firewall log -================= - -.. opcmd:: show log firewall -.. opcmd:: show log firewall bridge -.. opcmd:: show log firewall bridge forward -.. opcmd:: show log firewall bridge forward filter -.. opcmd:: show log firewall bridge name <name> -.. opcmd:: show log firewall bridge forward filter rule <rule> -.. opcmd:: show log firewall bridge name <name> rule <rule> - - Show the logs of all firewall; show all bridge firewall logs; show all logs - for forward hook; show all logs for forward hook and priority filter; show - all logs for particular custom chain; show logs for specific Rule-Set. - -Example -======= - -Configuration example: - -.. code-block:: none - - set firewall bridge forward filter default-action 'drop' - set firewall bridge forward filter default-log - set firewall bridge forward filter rule 10 action 'continue' - set firewall bridge forward filter rule 10 inbound-interface name 'eth2' - set firewall bridge forward filter rule 10 vlan id '22' - set firewall bridge forward filter rule 20 action 'drop' - set firewall bridge forward filter rule 20 inbound-interface group 'TRUNK-RIGHT' - set firewall bridge forward filter rule 20 vlan id '60' - set firewall bridge forward filter rule 30 action 'jump' - set firewall bridge forward filter rule 30 jump-target 'TEST' - set firewall bridge forward filter rule 30 outbound-interface name '!eth1' - set firewall bridge forward filter rule 35 action 'accept' - set firewall bridge forward filter rule 35 vlan id '11' - set firewall bridge forward filter rule 40 action 'continue' - set firewall bridge forward filter rule 40 destination mac-address '66:55:44:33:22:11' - set firewall bridge forward filter rule 40 source mac-address '11:22:33:44:55:66' - set firewall bridge name TEST default-action 'accept' - set firewall bridge name TEST default-log - set firewall bridge name TEST rule 10 action 'continue' - set firewall bridge name TEST rule 10 log - set firewall bridge name TEST rule 10 vlan priority '0' - -And op-mode commands: - -.. code-block:: none - - vyos@BRI:~$ show firewall bridge - Rulesets bridge Information - - --------------------------------- - bridge Firewall "forward filter" - - Rule Action Protocol Packets Bytes Conditions - ------- -------- ---------- --------- ------- --------------------------------------------------------------------- - 10 continue all 0 0 iifname "eth2" vlan id 22 continue - 20 drop all 0 0 iifname @I_TRUNK-RIGHT vlan id 60 - 30 jump all 2130 170688 oifname != "eth1" jump NAME_TEST - 35 accept all 2080 168616 vlan id 11 accept - 40 continue all 0 0 ether daddr 66:55:44:33:22:11 ether saddr 11:22:33:44:55:66 continue - default drop all 0 0 - - --------------------------------- - bridge Firewall "name TEST" - - Rule Action Protocol Packets Bytes Conditions - ------- -------- ---------- --------- ------- -------------------------------------------------- - 10 continue all 2130 170688 vlan pcp 0 prefix "[bri-NAM-TEST-10-C]" continue - default accept all 2130 170688 - - vyos@BRI:~$ - vyos@BRI:~$ show firewall bridge name TEST - Ruleset Information - - --------------------------------- - bridge Firewall "name TEST" - - Rule Action Protocol Packets Bytes Conditions - ------- -------- ---------- --------- ------- -------------------------------------------------- - 10 continue all 2130 170688 vlan pcp 0 prefix "[bri-NAM-TEST-10-C]" continue - default accept all 2130 170688 - - vyos@BRI:~$ - -Inspect logs: - -.. code-block:: none - - vyos@BRI:~$ show log firewall bridge - Dec 05 14:37:47 kernel: [bri-NAM-TEST-10-C]IN=eth1 OUT=eth2 ARP HTYPE=1 PTYPE=0x0800 OPCODE=1 MACSRC=50:00:00:04:00:00 IPSRC=10.11.11.101 MACDST=00:00:00:00:00:00 IPDST=10.11.11.102 - Dec 05 14:37:48 kernel: [bri-NAM-TEST-10-C]IN=eth1 OUT=eth2 ARP HTYPE=1 PTYPE=0x0800 OPCODE=1 MACSRC=50:00:00:04:00:00 IPSRC=10.11.11.101 MACDST=00:00:00:00:00:00 IPDST=10.11.11.102 - Dec 05 14:37:49 kernel: [bri-NAM-TEST-10-C]IN=eth1 OUT=eth2 ARP HTYPE=1 PTYPE=0x0800 OPCODE=1 MACSRC=50:00:00:04:00:00 IPSRC=10.11.11.101 MACDST=00:00:00:00:00:00 IPDST=10.11.11.102 - ... - vyos@BRI:~$ show log firewall bridge forward filter - Dec 05 14:42:22 kernel: [bri-FWD-filter-default-D]IN=eth2 OUT=eth1 MAC=33:33:00:00:00:16:50:00:00:06:00:00:86:dd SRC=0000:0000:0000:0000:0000:0000:0000:0000 DST=ff02:0000:0000:0000:0000:0000:0000:0016 LEN=96 TC=0 HOPLIMIT=1 FLOWLBL=0 PROTO=ICMPv6 TYPE=143 CODE=0 - Dec 05 14:42:22 kernel: [bri-FWD-filter-default-D]IN=eth2 OUT=eth1 MAC=33:33:00:00:00:16:50:00:00:06:00:00:86:dd SRC=0000:0000:0000:0000:0000:0000:0000:0000 DST=ff02:0000:0000:0000:0000:0000:0000:0016 LEN=96 TC=0 HOPLIMIT=1 FLOWLBL=0 PROTO=ICMPv6 TYPE=143 CODE=0 diff --git a/docs/configuration/firewall/rst-flowtables.rst b/docs/configuration/firewall/rst-flowtables.rst deleted file mode 100644 index 917e74cc..00000000 --- a/docs/configuration/firewall/rst-flowtables.rst +++ /dev/null @@ -1,189 +0,0 @@ -:lastproofread: 2024-06-20 - -.. _firewall-flowtables-configuration: - -################################# -Flowtables Firewall Configuration -################################# - -.. note:: **Documentation under development** - -******** -Overview -******** - -In this section there's useful information of all firewall configuration that -can be done regarding flowtables. - -.. cfgcmd:: set firewall flowtables ... - -From main structure defined in -:doc:`Firewall Overview</configuration/firewall/index>` -in this section you can find detailed information only for the next part -of the general structure: - -.. code-block:: none - - - set firewall - * flowtable - - custom_flow_table - + ... - - -Flowtables allows you to define a fastpath through the flowtable datapath. -The flowtable supports for the layer 3 IPv4 and IPv6 and the layer 4 TCP -and UDP protocols. - -.. figure:: /_static/images/firewall-flowtable-packet-flow.png - -Once the first packet of the flow successfully goes through the IP forwarding -path (black circles path), from the second packet on, you might decide to -offload the flow to the flowtable through your ruleset. The flowtable -infrastructure provides a rule action that allows you to specify when to add -a flow to the flowtable (On forward filtering, red circle number 6) - -A packet that finds a matching entry in the flowtable (flowtable hit) is -transmitted to the output netdevice, hence, packets bypass the classic IP -forwarding path and uses the **Fast Path** (orange circles path). The visible -effect is that you do not see these packets from any of the Netfilter -hooks coming after ingress. In case that there is no matching entry in the -flowtable (flowtable miss), the packet follows the classic IP forwarding path. - -.. note:: **Flowtable Reference:** - https://docs.kernel.org/networking/nf_flowtable.html - - -*********************** -Flowtable Configuration -*********************** - -In order to use flowtables, the minimal configuration needed includes: - - * Create flowtable: create flowtable, which includes the interfaces - that are going to be used by the flowtable. - - * Create firewall rule: create a firewall rule, setting action to - ``offload`` and using desired flowtable for ``offload-target``. - -Creating a flow table: - -.. cfgcmd:: set firewall flowtable <flow_table_name> interface <iface> - - Define interfaces to be used in the flowtable. - -.. cfgcmd:: set firewall flowtable <flow_table_name> description <text> - -Provide a description to the flow table. - -.. cfgcmd:: set firewall flowtable <flow_table_name> offload - <hardware | software> - - Define type of offload to be used by the flowtable: ``hardware`` or - ``software``. By default, ``software`` offload is used. - -.. note:: **Hardware offload:** should be supported by the NICs used. - -Creating rules for using flow tables: - -.. cfgcmd:: set firewall [ipv4 | ipv6] forward filter rule <1-999999> - action offload - - Create firewall rule in forward chain, and set action to ``offload``. - -.. cfgcmd:: set firewall [ipv4 | ipv6] forward filter rule <1-999999> - offload-target <flowtable> - - Create firewall rule in forward chain, and define which flowtbale - should be used. Only applicable if action is ``offload``. - -********************* -Configuration Example -********************* - -Things to be considred in this setup: - - * Two interfaces are going to be used in the flowtables: eth0 and eth1 - - * Minumum firewall ruleset is provided, which includes some filtering rules, - and appropiate rules for using flowtable offload capabilities. - -As described, first packet will be evaluated by all the firewall path, so -desired connection should be explicitely accepted. Same thing should be taken -into account for traffic in reverse order. In most cases state policies are -used in order to accept connection in reverse patch. - -We will only accept traffic comming from interface eth0, protocol tcp and -destination port 1122. All other traffic traspassing the router should be -blocked. - -Commands --------- - -.. code-block:: none - - set firewall flowtable FT01 interface 'eth0' - set firewall flowtable FT01 interface 'eth1' - set firewall ipv4 forward filter default-action 'drop' - set firewall ipv4 forward filter rule 10 action 'offload' - set firewall ipv4 forward filter rule 10 offload-target 'FT01' - set firewall ipv4 forward filter rule 10 state 'established' - set firewall ipv4 forward filter rule 10 state 'related' - set firewall ipv4 forward filter rule 20 action 'accept' - set firewall ipv4 forward filter rule 20 state 'established' - set firewall ipv4 forward filter rule 20 state 'related' - set firewall ipv4 forward filter rule 110 action 'accept' - set firewall ipv4 forward filter rule 110 destination address '192.0.2.100' - set firewall ipv4 forward filter rule 110 destination port '1122' - set firewall ipv4 forward filter rule 110 inbound-interface name 'eth0' - set firewall ipv4 forward filter rule 110 protocol 'tcp' - -Explanation ------------ - -Analysis on what happens for desired connection: - - 1. First packet is received on eth0, with destination address 192.0.2.100, - protocol tcp and destination port 1122. Assume such destination address is - reachable through interface eth1. - - 2. Since this is the first packet, connection status of this connection, - so far is **new**. So neither rule 10 nor 20 are valid. - - 3. Rule 110 is hit, so connection is accepted. - - 4. Once answer from server 192.0.2.100 is seen in opposite direction, - connection state will be triggered to **established**, so this reply is - accepted in rule 20. - - 5. Second packet for this connection is received by the router. Since - connection state is **established**, then rule 10 is hit, and a new entry - in the flowtable FT01 is added for this connection. - - 6. All the following packets will skip traditional path, and will be offloaded - and will use the **Fast Path**. - -Checks ------- - -It's time to check conntrack table, to see if any connection was accepted, -and if was properly offloaded - -.. code-block:: none - - vyos@FlowTables:~$ show firewall ipv4 forward filter - Ruleset Information - - --------------------------------- - ipv4 Firewall "forward filter" - - Rule Action Protocol Packets Bytes Conditions - ------- -------- ---------- --------- ------- ---------------------------------------------------------------- - 10 offload all 8 468 ct state { established, related } flow add @VYOS_FLOWTABLE_FT01 - 20 accept all 8 468 ct state { established, related } accept - 110 accept tcp 2 120 ip daddr 192.0.2.100 tcp dport 1122 iifname "eth0" accept - default drop all 7 420 - - vyos@FlowTables:~$ sudo conntrack -L | grep tcp - conntrack v1.4.6 (conntrack-tools): 5 flow entries have been shown. - tcp 6 src=198.51.100.100 dst=192.0.2.100 sport=41676 dport=1122 src=192.0.2.100 dst=198.51.100.100 sport=1122 dport=41676 [OFFLOAD] mark=0 use=2 - vyos@FlowTables:~$ diff --git a/docs/configuration/firewall/rst-global-options.rst b/docs/configuration/firewall/rst-global-options.rst deleted file mode 100644 index b3f311aa..00000000 --- a/docs/configuration/firewall/rst-global-options.rst +++ /dev/null @@ -1,147 +0,0 @@ -:lastproofread: 2023-12-26 - -.. _firewall-global-options-configuration: - -##################################### -Global Options Firewall Configuration -##################################### - -******** -Overview -******** - -Some firewall settings are global and have an affect on the whole system. -In this section there's useful information about these global-options that can -be configured using vyos cli. - -Configuration commands covered in this section: - -.. cfgcmd:: set firewall global-options ... - -************* -Configuration -************* - -.. cfgcmd:: set firewall global-options all-ping [enable | disable] - - By default, when VyOS receives an ICMP echo request packet destined for - itself, it will answer with an ICMP echo reply, unless you avoid it - through its firewall. - - With the firewall you can set rules to accept, drop or reject ICMP in, - out or local traffic. You can also use the general **firewall all-ping** - command. This command affects only to LOCAL (packets destined for your - VyOS system), not to IN or OUT traffic. - - .. note:: **firewall global-options all-ping** affects only to LOCAL - and it always behaves in the most restrictive way - - .. code-block:: none - - set firewall global-options all-ping enable - - When the command above is set, VyOS will answer every ICMP echo request - addressed to itself, but that will only happen if no other rule is - applied dropping or rejecting local echo requests. In case of conflict, - VyOS will not answer ICMP echo requests. - - .. code-block:: none - - set firewall global-options all-ping disable - - When the command above is set, VyOS will answer no ICMP echo request - addressed to itself at all, no matter where it comes from or whether - more specific rules are being applied to accept them. - -.. cfgcmd:: set firewall global-options broadcast-ping [enable | disable] - - This setting enable or disable the response of icmp broadcast - messages. The following system parameter will be altered: - - * ``net.ipv4.icmp_echo_ignore_broadcasts`` - -.. cfgcmd:: set firewall global-options ip-src-route [enable | disable] -.. cfgcmd:: set firewall global-options ipv6-src-route [enable | disable] - - This setting handle if VyOS accept packets with a source route - option. The following system parameter will be altered: - - * ``net.ipv4.conf.all.accept_source_route`` - * ``net.ipv6.conf.all.accept_source_route`` - -.. cfgcmd:: set firewall global-options receive-redirects [enable | disable] -.. cfgcmd:: set firewall global-options ipv6-receive-redirects - [enable | disable] - - enable or disable of ICMPv4 or ICMPv6 redirect messages accepted - by VyOS. The following system parameter will be altered: - - * ``net.ipv4.conf.all.accept_redirects`` - * ``net.ipv6.conf.all.accept_redirects`` - -.. cfgcmd:: set firewall global-options send-redirects [enable | disable] - - enable or disable ICMPv4 redirect messages send by VyOS - The following system parameter will be altered: - - * ``net.ipv4.conf.all.send_redirects`` - -.. cfgcmd:: set firewall global-options log-martians [enable | disable] - - enable or disable the logging of martian IPv4 packets. - The following system parameter will be altered: - - * ``net.ipv4.conf.all.log_martians`` - -.. cfgcmd:: set firewall global-options source-validation - [strict | loose | disable] - - Set the IPv4 source validation mode. - The following system parameter will be altered: - - * ``net.ipv4.conf.all.rp_filter`` - -.. cfgcmd:: set firewall global-options syn-cookies [enable | disable] - - Enable or Disable if VyOS use IPv4 TCP SYN Cookies. - The following system parameter will be altered: - - * ``net.ipv4.tcp_syncookies`` - -.. cfgcmd:: set firewall global-options twa-hazards-protection - [enable | disable] - - Enable or Disable VyOS to be :rfc:`1337` conform. - The following system parameter will be altered: - - * ``net.ipv4.tcp_rfc1337`` - -.. cfgcmd:: set firewall global-options state-policy established action - [accept | drop | reject] - -.. cfgcmd:: set firewall global-options state-policy established log - -.. cfgcmd:: set firewall global-options state-policy established log-level - [emerg | alert | crit | err | warn | notice | info | debug] - - Set the global setting for an established connection. - -.. cfgcmd:: set firewall global-options state-policy invalid action - [accept | drop | reject] - -.. cfgcmd:: set firewall global-options state-policy invalid log - -.. cfgcmd:: set firewall global-options state-policy invalid log-level - [emerg | alert | crit | err | warn | notice | info | debug] - - Set the global setting for invalid packets. - -.. cfgcmd:: set firewall global-options state-policy related action - [accept | drop | reject] - -.. cfgcmd:: set firewall global-options state-policy related log - -.. cfgcmd:: set firewall global-options state-policy related log-level - [emerg | alert | crit | err | warn | notice | info | debug] - - Set the global setting for related connections. diff --git a/docs/configuration/firewall/rst-groups.rst b/docs/configuration/firewall/rst-groups.rst deleted file mode 100644 index 6111650a..00000000 --- a/docs/configuration/firewall/rst-groups.rst +++ /dev/null @@ -1,429 +0,0 @@ -:lastproofread: 2023-11-08 - -.. _firewall-groups-configuration: - -############### -Firewall groups -############### - -************* -Configuration -************* - -Firewall groups represent collections of IP addresses, networks, ports, -mac addresses, domains or interfaces. Once created, a group can be referenced -by firewall, nat and policy route rules as either a source or destination -matcher, and/or as inbound/outbound in the case of interface group. - -Address Groups -============== - -In an **address group** a single IP address or IP address ranges are -defined. - -.. cfgcmd:: set firewall group address-group <name> address [address | - address range] -.. cfgcmd:: set firewall group ipv6-address-group <name> address <address> - - Define a IPv4 or a IPv6 address group - - .. code-block:: none - - set firewall group address-group ADR-INSIDE-v4 address 192.168.0.1 - set firewall group address-group ADR-INSIDE-v4 address 10.0.0.1-10.0.0.8 - set firewall group ipv6-address-group ADR-INSIDE-v6 address 2001:db8::1 - -.. cfgcmd:: set firewall group address-group <name> description <text> -.. cfgcmd:: set firewall group ipv6-address-group <name> description <text> - - Provide a IPv4 or IPv6 address group description - -Network Groups -============== - -While **network groups** accept IP networks in CIDR notation, specific -IP addresses can be added as a 32-bit prefix. If you foresee the need -to add a mix of addresses and networks, the network group is -recommended. - -.. cfgcmd:: set firewall group network-group <name> network <CIDR> -.. cfgcmd:: set firewall group ipv6-network-group <name> network <CIDR> - - Define a IPv4 or IPv6 Network group. - - .. code-block:: none - - set firewall group network-group NET-INSIDE-v4 network 192.168.0.0/24 - set firewall group network-group NET-INSIDE-v4 network 192.168.1.0/24 - set firewall group ipv6-network-group NET-INSIDE-v6 network 2001:db8::/64 - -.. cfgcmd:: set firewall group network-group <name> description <text> -.. cfgcmd:: set firewall group ipv6-network-group <name> description <text> - - Provide an IPv4 or IPv6 network group description. - -Interface Groups -================ - -An **interface group** represents a collection of interfaces. - -.. cfgcmd:: set firewall group interface-group <name> interface <text> - - Define an interface group. Wildcard are accepted too. - -.. code-block:: none - - set firewall group interface-group LAN interface bond1001 - set firewall group interface-group LAN interface eth3* - -.. cfgcmd:: set firewall group interface-group <name> description <text> - - Provide an interface group description - -Port Groups -=========== - -A **port group** represents only port numbers, not the protocol. Port -groups can be referenced for either TCP or UDP. It is recommended that -TCP and UDP groups are created separately to avoid accidentally -filtering unnecessary ports. Ranges of ports can be specified by using -`-`. - -.. cfgcmd:: set firewall group port-group <name> port - [portname | portnumber | startport-endport] - - Define a port group. A port name can be any name defined in - /etc/services. e.g.: http - - .. code-block:: none - - set firewall group port-group PORT-TCP-SERVER1 port http - set firewall group port-group PORT-TCP-SERVER1 port 443 - set firewall group port-group PORT-TCP-SERVER1 port 5000-5010 - -.. cfgcmd:: set firewall group port-group <name> description <text> - - Provide a port group description. - -MAC Groups -========== - -A **mac group** represents a collection of mac addresses. - -.. cfgcmd:: set firewall group mac-group <name> mac-address <mac-address> - - Define a mac group. - -.. code-block:: none - - set firewall group mac-group MAC-G01 mac-address 88:a4:c2:15:b6:4f - set firewall group mac-group MAC-G01 mac-address 4c:d5:77:c0:19:81 - -.. cfgcmd:: set firewall group mac-group <name> description <text> - - Provide a mac group description. - -Domain Groups -============= - -A **domain group** represents a collection of domains. - -.. cfgcmd:: set firewall group domain-group <name> address <domain> - - Define a domain group. - -.. code-block:: none - - set firewall group domain-group DOM address example.com - -.. cfgcmd:: set firewall group domain-group <name> description <text> - - Provide a domain group description. - -Dynamic Groups -============== - -Firewall dynamic groups are different from all the groups defined previously -because, not only they can be used as source/destination in firewall rules, -but members of these groups are not defined statically using vyos -configuration. - -Instead, members of these groups are added dynamically using firewall -rules. - -Defining Dynamic Address Groups -------------------------------- - -Dynamic address group is supported by both IPv4 and IPv6 families. -Commands used to define dynamic IPv4|IPv6 address groups are: - -.. cfgcmd:: set firewall group dynamic-group address-group <name> -.. cfgcmd:: set firewall group dynamic-group ipv6-address-group <name> - -Add description to firewall groups: - -.. cfgcmd:: set firewall group dynamic-group address-group <name> - description <text> -.. cfgcmd:: set firewall group dynamic-group ipv6-address-group <name> - description <text> - -Adding elements to Dynamic Firewall Groups ------------------------------------------- - -Once dynamic firewall groups are defined, they should be used in firewall -rules in order to dynamically add elements to it. - -Commands used for this task are: - -* Add destination IP address of the connection to a dynamic address group: - -.. cfgcmd:: set firewall ipv4 [forward | input | output] filter rule - <1-999999> add-address-to-group destination-address address-group <name> -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> add-address-to-group - destination-address address-group <name> -.. cfgcmd:: set firewall ipv6 [forward | input | output] filter rule - <1-999999> add-address-to-group destination-address address-group <name> -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> add-address-to-group - destination-address address-group <name> - -* Add source IP address of the connection to a dynamic address group: - -.. cfgcmd:: set firewall ipv4 [forward | input | output] filter rule - <1-999999> add-address-to-group source-address address-group <name> -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> add-address-to-group - source-address address-group <name> -.. cfgcmd:: set firewall ipv6 [forward | input | output] filter rule - <1-999999> add-address-to-group source-address address-group <name> -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> add-address-to-group - source-address address-group <name> - -Also, specific timeout can be defined per rule. In case rule gets a hit, -source or destinatination address will be added to the group, and this -element will remain in the group until timeout expires. If no timeout -is defined, then the element will remain in the group until next reboot, -or until a new commit that changes firewall configuration is done. - -.. cfgcmd:: set firewall ipv4 [forward | input | output] filter rule - <1-999999> add-address-to-group [destination-address | source-address] - timeout <timeout> -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> add-address-to-group - [destination-address | source-address] timeout <timeout> -.. cfgcmd:: set firewall ipv6 [forward | input | output] filter rule - <1-999999> add-address-to-group [destination-address | source-address] - timeout <timeout> -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> add-address-to-group - [destination-address | source-address] timeout <timeout> - -Timeout can be defined using seconds, minutes, hours or days: - -.. code-block:: none - - set firewall ipv6 name FOO rule 10 add-address-to-group source-address timeout - Possible completions: - <number>s Timeout value in seconds - <number>m Timeout value in minutes - <number>h Timeout value in hours - <number>d Timeout value in days - -Using Dynamic Firewall Groups ------------------------------ - -As any other firewall group, dynamic firewall groups can be used in firewall -rules as matching options. For example: - -.. code-block:: none - set firewall ipv4 input filter rule 10 source group dynamic-address-group FOO - set firewall ipv4 input filter rule 10 destination group dynamic-address-group BAR - -******** -Examples -******** - -General example -=============== - -As said before, once firewall groups are created, they can be referenced -either in firewall, nat, nat66 and/or policy-route rules. - -Here is an example were multiple groups are created: - - .. code-block:: none - - set firewall group address-group SERVERS address 198.51.100.101 - set firewall group address-group SERVERS address 198.51.100.102 - set firewall group network-group TRUSTEDv4 network 192.0.2.0/30 - set firewall group network-group TRUSTEDv4 network 203.0.113.128/25 - set firewall group ipv6-network-group TRUSTEDv6 network 2001:db8::/64 - set firewall group interface-group LAN interface eth2.2001 - set firewall group interface-group LAN interface bon0 - set firewall group port-group PORT-SERVERS port http - set firewall group port-group PORT-SERVERS port 443 - set firewall group port-group PORT-SERVERS port 5000-5010 - -And next, some configuration example where groups are used: - - .. code-block:: none - - set firewall ipv4 output filter rule 10 action accept - set firewall ipv4 output filter rule 10 outbound-interface group !LAN - set firewall ipv4 forward filter rule 20 action accept - set firewall ipv4 forward filter rule 20 source group network-group TRUSTEDv4 - set firewall ipv6 input filter rule 10 action accept - set firewall ipv6 input filter rule 10 source group network-group TRUSTEDv6 - set nat destination rule 101 inbound-interface group LAN - set nat destination rule 101 destination group address-group SERVERS - set nat destination rule 101 protocol tcp - set nat destination rule 101 destination group port-group PORT-SERVERS - set nat destination rule 101 translation address 203.0.113.250 - set policy route PBR rule 201 destination group port-group PORT-SERVERS - set policy route PBR rule 201 protocol tcp - set policy route PBR rule 201 set table 15 - -Port knocking example -===================== - -Using dynamic firewall groups, we can secure access to the router, or any other -device if needed, by using the technique of port knocking. - -A 4 step port knocking example is shown next: - - .. code-block:: none - - set firewall global-options state-policy established action 'accept' - set firewall global-options state-policy invalid action 'drop' - set firewall global-options state-policy related action 'accept' - set firewall group dynamic-group address-group ALLOWED - set firewall group dynamic-group address-group PN_01 - set firewall group dynamic-group address-group PN_02 - set firewall ipv4 input filter default-action 'drop' - set firewall ipv4 input filter rule 5 action 'accept' - set firewall ipv4 input filter rule 5 protocol 'icmp' - set firewall ipv4 input filter rule 10 action 'drop' - set firewall ipv4 input filter rule 10 add-address-to-group source-address address-group 'PN_01' - set firewall ipv4 input filter rule 10 add-address-to-group source-address timeout '2m' - set firewall ipv4 input filter rule 10 description 'Port_nock 01' - set firewall ipv4 input filter rule 10 destination port '9990' - set firewall ipv4 input filter rule 10 protocol 'tcp' - set firewall ipv4 input filter rule 20 action 'drop' - set firewall ipv4 input filter rule 20 add-address-to-group source-address address-group 'PN_02' - set firewall ipv4 input filter rule 20 add-address-to-group source-address timeout '3m' - set firewall ipv4 input filter rule 20 description 'Port_nock 02' - set firewall ipv4 input filter rule 20 destination port '9991' - set firewall ipv4 input filter rule 20 protocol 'tcp' - set firewall ipv4 input filter rule 20 source group dynamic-address-group 'PN_01' - set firewall ipv4 input filter rule 30 action 'drop' - set firewall ipv4 input filter rule 30 add-address-to-group source-address address-group 'ALLOWED' - set firewall ipv4 input filter rule 30 add-address-to-group source-address timeout '2h' - set firewall ipv4 input filter rule 30 description 'Port_nock 03' - set firewall ipv4 input filter rule 30 destination port '9992' - set firewall ipv4 input filter rule 30 protocol 'tcp' - set firewall ipv4 input filter rule 30 source group dynamic-address-group 'PN_02' - set firewall ipv4 input filter rule 99 action 'accept' - set firewall ipv4 input filter rule 99 description 'Port_nock 04 - Allow ssh' - set firewall ipv4 input filter rule 99 destination port '22' - set firewall ipv4 input filter rule 99 protocol 'tcp' - set firewall ipv4 input filter rule 99 source group dynamic-address-group 'ALLOWED' - -Before testing, we can check members of firewall groups: - - .. code-block:: none - - vyos@vyos# run show firewall group - Firewall Groups - - Name Type References Members Timeout Expires - ------- ---------------------- -------------------- ------------- --------- --------- - ALLOWED address_group(dynamic) ipv4-input-filter-30 N/D N/D N/D - PN_01 address_group(dynamic) ipv4-input-filter-10 N/D N/D N/D - PN_02 address_group(dynamic) ipv4-input-filter-20 N/D N/D N/D - [edit] - vyos@vyos# - -With this configuration, in order to get ssh access to the router, user -needs to: - -1. Generate a new TCP connection with destination port 9990. As shown next, -a new entry was added to dynamic firewall group **PN_01** - - .. code-block:: none - - vyos@vyos# run show firewall group - Firewall Groups - - Name Type References Members Timeout Expires - ------- ---------------------- -------------------- ------------- --------- --------- - ALLOWED address_group(dynamic) ipv4-input-filter-30 N/D N/D N/D - PN_01 address_group(dynamic) ipv4-input-filter-10 192.168.89.31 120 119 - PN_02 address_group(dynamic) ipv4-input-filter-20 N/D N/D N/D - [edit] - vyos@vyos# - -2. Generate a new TCP connection with destination port 9991. As shown next, -a new entry was added to dynamic firewall group **PN_02** - - .. code-block:: none - - vyos@vyos# run show firewall group - Firewall Groups - - Name Type References Members Timeout Expires - ------- ---------------------- -------------------- ------------- --------- --------- - ALLOWED address_group(dynamic) ipv4-input-filter-30 N/D N/D N/D - PN_01 address_group(dynamic) ipv4-input-filter-10 192.168.89.31 120 106 - PN_02 address_group(dynamic) ipv4-input-filter-20 192.168.89.31 180 179 - [edit] - vyos@vyos# - -3. Generate a new TCP connection with destination port 9992. As shown next, -a new entry was added to dynamic firewall group **ALLOWED** - - .. code-block:: none - - vyos@vyos# run show firewall group - Firewall Groups - - Name Type References Members Timeout Expires - ------- ---------------------- -------------------- ------------- --------- --------- - ALLOWED address_group(dynamic) ipv4-input-filter-30 192.168.89.31 7200 7199 - PN_01 address_group(dynamic) ipv4-input-filter-10 192.168.89.31 120 89 - PN_02 address_group(dynamic) ipv4-input-filter-20 192.168.89.31 180 170 - [edit] - vyos@vyos# - -4. Now user can connect through ssh to the router (assuming ssh is configured). - -************** -Operation-mode -************** - -.. opcmd:: show firewall group -.. opcmd:: show firewall group <name> - - Overview of defined groups. You see the firewall group name, type, - references (where the group is used), members, timeout and expiration (last - two only present in dynamic firewall groups). - -Here is an example of such command: - - .. code-block:: none - - vyos@vyos:~$ show firewall group - Firewall Groups - - Name Type References Members Timeout Expires - ------------ ---------------------- ---------------------- ---------------- --------- --------- - SERVERS address_group nat-destination-101 198.51.100.101 - 198.51.100.102 - ALLOWED address_group(dynamic) ipv4-input-filter-30 192.168.77.39 7200 7174 - PN_01 address_group(dynamic) ipv4-input-filter-10 192.168.0.245 120 112 - 192.168.77.39 120 85 - PN_02 address_group(dynamic) ipv4-input-filter-20 192.168.77.39 180 151 - LAN interface_group ipv4-output-filter-10 bon0 - nat-destination-101 eth2.2001 - TRUSTEDv6 ipv6_network_group ipv6-input-filter-10 2001:db8::/64 - TRUSTEDv4 network_group ipv4-forward-filter-20 192.0.2.0/30 - 203.0.113.128/25 - PORT-SERVERS port_group route-PBR-201 443 - route-PBR-201 5000-5010 - nat-destination-101 http - vyos@vyos:~$
\ No newline at end of file diff --git a/docs/configuration/firewall/rst-index.rst b/docs/configuration/firewall/rst-index.rst deleted file mode 100644 index 44e0cd20..00000000 --- a/docs/configuration/firewall/rst-index.rst +++ /dev/null @@ -1,180 +0,0 @@ -:lastproofread: 2023-11-23 - -######## -Firewall -######## - -As VyOS is based on Linux it leverages its firewall. The Netfilter project -created iptables and its successor nftables for the Linux kernel to -work directly on packet data flows. This now extends the concept of -zone-based security to allow for manipulating the data at multiple stages once -accepted by the network interface and the driver before being handed off to -the destination (e.g., a web server OR another device). - -A simplified traffic flow diagram, based on Netfilter packet flow, is shown -next, in order to have a full view and understanding of how packets are -processed, and what possible paths traffic can take. - -.. figure:: /_static/images/firewall-gral-packet-flow.png - -The main points regarding this packet flow and terminology used in VyOS -firewall are covered below: - - * **Bridge Port?**: choose appropriate path based on whether interface - where the packet was received is part of a bridge, or not. - -If the interface where the packet was received isn't part of a bridge, then -packetis processed at the **IP Layer**: - - * **Prerouting**: several actions can be done in this stage, and currently - these actions are defined in different parts in VyOS configuration. Order - is important, and all these actions are performed before any actions - defined under ``firewall`` section. Relevant configuration that acts in - this stage are: - - * **Conntrack Ignore**: rules defined under ``set system conntrack ignore - [ipv4 | ipv6] ...``. - - * **Policy Route**: rules defined under ``set policy [route | route6] - ...``. - - * **Destination NAT**: rules defined under ``set [nat | nat66] - destination...``. - - * **Destination is the router?**: choose appropriate path based on - destination IP address. Transit forward continues to **forward**, - while traffic that destination IP address is configured on the router - continues to **input**. - - * **Input**: stage where traffic destined for the router itself can be - filtered and controlled. This is where all rules for securing the router - should take place. This includes ipv4 and ipv6 filtering rules, defined - in: - - * ``set firewall ipv4 input filter ...``. - - * ``set firewall ipv6 input filter ...``. - - * **Forward**: stage where transit traffic can be filtered and controlled. - This includes ipv4 and ipv6 filtering rules, defined in: - - * ``set firewall ipv4 forward filter ...``. - - * ``set firewall ipv6 forward filter ...``. - - * **Output**: stage where traffic that originates from the router itself - can be filtered and controlled. Bear in mind that this traffic can be a - new connection originated by a internal process running on VyOS router, - such as NTP, or a response to traffic received externaly through - **input** (for example response to an ssh login attempt to the router). - This includes ipv4 and ipv6 filtering rules, defined in: - - * ``set firewall ipv4 output filter ...``. - - * ``set firewall ipv6 output filter ...``. - - * **Postrouting**: as in **Prerouting**, several actions defined in - different parts of VyOS configuration are performed in this - stage. This includes: - - * **Source NAT**: rules defined under ``set [nat | nat66] - destination...``. - -If the interface where the packet was received is part of a bridge, then -the packet is processed at the **Bridge Layer**, which contains a basic setup for -bridge filtering: - - * **Forward (Bridge)**: stage where traffic that is trespasing through the - bridge is filtered and controlled: - - * ``set firewall bridge forward filter ...``. - -The main structure of the VyOS firewall CLI is shown next: - -.. code-block:: none - - - set firewall - * bridge - - forward - + filter - * flowtable - - custom_flow_table - + ... - * global-options - + all-ping - + broadcast-ping - + ... - * group - - address-group - - ipv6-address-group - - network-group - - ipv6-network-group - - interface-group - - mac-group - - port-group - - domain-group - * ipv4 - - forward - + filter - - input - + filter - - output - + filter - - name - + custom_name - * ipv6 - - forward - + filter - - input - + filter - - output - + filter - - ipv6-name - + custom_name - * zone - - custom_zone_name - + ... - -Please, refer to appropriate section for more information about firewall -configuration: - -.. toctree:: - :maxdepth: 1 - :includehidden: - - global-options - groups - bridge - ipv4 - ipv6 - flowtables - -.. note:: **For more information** - of Netfilter hooks and Linux networking packet flows can be - found in `Netfilter-Hooks - <https://wiki.nftables.org/wiki-nftables/index.php/Netfilter_hooks>`_ - - -Zone-based firewall -^^^^^^^^^^^^^^^^^^^ -.. toctree:: - :maxdepth: 1 - :includehidden: - - zone - -With zone-based firewalls a new concept was implemented, in addition to the -standard in and out traffic flows, a local flow was added. This local was for -traffic originating and destined to the router itself. Which means additional -rules were required to secure the firewall itself from the network, in -addition to the existing inbound and outbound rules from the traditional -concept above. - -To configure VyOS with the -:doc:`zone-based firewall configuration </configuration/firewall/zone>` - -As the example image below shows, the device now needs rules to allow/block -traffic to or from the services running on the device that have open -connections on that interface. - -.. figure:: /_static/images/firewall-zonebased.png diff --git a/docs/configuration/firewall/rst-ipv4.rst b/docs/configuration/firewall/rst-ipv4.rst deleted file mode 100644 index 2a654fd7..00000000 --- a/docs/configuration/firewall/rst-ipv4.rst +++ /dev/null @@ -1,1237 +0,0 @@ -:lastproofread: 2023-11-08 - -.. _firewall-ipv4-configuration: - -########################### -IPv4 Firewall Configuration -########################### - -******** -Overview -******** - -In this section there's useful information of all firewall configuration that -can be done regarding IPv4, and appropiate op-mode commands. -Configuration commands covered in this section: - -.. cfgcmd:: set firewall ipv4 ... - -From main structure defined in -:doc:`Firewall Overview</configuration/firewall/index>` -in this section you can find detailed information only for the next part -of the general structure: - -.. code-block:: none - - - set firewall - * ipv4 - - forward - + filter - - input - + filter - - output - + filter - - name - + custom_name - -For transit traffic, which is received by the router and forwarded, base chain -is **forward**. A simplified packet flow diagram for transit traffic is shown -next: - -.. figure:: /_static/images/firewall-fwd-packet-flow.png - -Where firewall base chain to configure firewall filtering rules for transit -traffic is ``set firewall ipv4 forward filter ...``, which happens in stage 5, -highlightened with red color. - -For traffic towards the router itself, base chain is **input**, while traffic -originated by the router, base chain is **output**. -A new simplified packet flow diagram is shown next, which shows the path -for traffic destinated to the router itself, and traffic generated by the -router (starting from circle number 6): - -.. figure:: /_static/images/firewall-input-packet-flow.png - -Base chain is for traffic toward the router is ``set firewall ipv4 input -filter ...`` - -And base chain for traffic generated by the router is ``set firewall ipv4 -output filter ...`` - -.. note:: **Important note about default-actions:** - If default action for any base chain is not defined, then the default - action is set to **accept** for that chain. For custom chains, if default - action is not defined, then the default-action is set to **drop** - -Custom firewall chains can be created, with commands -``set firewall ipv4 name <name> ...``. In order to use -such custom chain, a rule with **action jump**, and the appropiate **target** -should be defined in a base chain. - -********************* -Firewall - IPv4 Rules -********************* - -For firewall filtering, firewall rules needs to be created. Each rule is -numbered, has an action to apply if the rule is matched, and the ability -to specify multiple criteria matchers. Data packets go through the rules -from 1 - 999999, so order is crucial. At the first match the action of the -rule will be executed. - -Actions -======= - -If a rule is defined, then an action must be defined for it. This tells the -firewall what to do if all criteria matchers defined for such rule do match. - -The action can be : - - * ``accept``: accept the packet. - - * ``continue``: continue parsing next rule. - - * ``drop``: drop the packet. - - * ``reject``: reject the packet. - - * ``jump``: jump to another custom chain. - - * ``return``: Return from the current chain and continue at the next rule - of the last chain. - - * ``queue``: Enqueue packet to userspace. - - * ``synproxy``: synproxy the packet. - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> action - [accept | continue | drop | jump | queue | reject | return | synproxy] -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> action - [accept | continue | drop | jump | queue | reject | return | synproxy] -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> action - [accept | continue | drop | jump | queue | reject | return] -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> action - [accept | continue | drop | jump | queue | reject | return] - - This required setting defines the action of the current rule. If action is - set to jump, then jump-target is also needed. - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - jump-target <text> -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - jump-target <text> -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - jump-target <text> -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - jump-target <text> - - To be used only when action is set to ``jump``. Use this command to specify - jump target. - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - queue <0-65535> -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - queue <0-65535> -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - queue <0-65535> -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - queue <0-65535> - - To be used only when action is set to ``queue``. Use this command to specify - queue target to use. Queue range is also supported. - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - queue-options bypass -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - queue-options bypass -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - queue-options bypass -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - queue-options bypass - - To be used only when action is set to ``queue``. Use this command to let - packet go through firewall when no userspace software is connected to the - queue. - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - queue-options fanout -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - queue-options fanout -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - queue-options fanout -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - queue-options fanout - - To be used only when action is set to ``queue``. Use this command to - distribute packets between several queues. - -Also, **default-action** is an action that takes place whenever a packet does -not match any rule in it's chain. For base chains, possible options for -**default-action** are **accept** or **drop**. - -.. cfgcmd:: set firewall ipv4 forward filter default-action - [accept | drop] -.. cfgcmd:: set firewall ipv4 input filter default-action - [accept | drop] -.. cfgcmd:: set firewall ipv4 output filter default-action - [accept | drop] -.. cfgcmd:: set firewall ipv4 name <name> default-action - [accept | drop | jump | queue | reject | return] - - This set the default action of the rule-set if no rule matched a packet - criteria. If default-action is set to ``jump``, then - ``default-jump-target`` is also needed. Note that for base chains, default - action can only be set to ``accept`` or ``drop``, while on custom chain, - more actions are available. - -.. cfgcmd:: set firewall ipv4 name <name> default-jump-target <text> - - To be used only when ``defult-action`` is set to ``jump``. Use this - command to specify jump target for default rule. - -.. note:: **Important note about default-actions:** - If default action for any base chain is not defined, then the default - action is set to **accept** for that chain. For custom chains, if default - action is not defined, then the default-action is set to **drop**. - -Firewall Logs -============= - -Logging can be enable for every single firewall rule. If enabled, other -log options can be defined. - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> log -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> log -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> log -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> log - - Enable logging for the matched packet. If this configuration command is not - present, then log is not enabled. - -.. cfgcmd:: set firewall ipv4 forward filter default-log -.. cfgcmd:: set firewall ipv4 input filter default-log -.. cfgcmd:: set firewall ipv4 output filter default-log -.. cfgcmd:: set firewall ipv4 name <name> default-log - - Use this command to enable the logging of the default action on - the specified chain. - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - log-options level [emerg | alert | crit | err | warn | notice - | info | debug] -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - log-options level [emerg | alert | crit | err | warn | notice - | info | debug] -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - log-options level [emerg | alert | crit | err | warn | notice - | info | debug] -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - log-options level [emerg | alert | crit | err | warn | notice - | info | debug] - - Define log-level. Only applicable if rule log is enable. - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - log-options group <0-65535> -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - log-options group <0-65535> -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - log-options group <0-65535> -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - log-options group <0-65535> - - Define log group to send message to. Only applicable if rule log is enable. - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - log-options snapshot-length <0-9000> -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - log-options snapshot-length <0-9000> -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - log-options snapshot-length <0-9000> -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - log-options snapshot-length <0-9000> - - Define length of packet payload to include in netlink message. Only - applicable if rule log is enable and log group is defined. - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - log-options queue-threshold <0-65535> -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - log-options queue-threshold <0-65535> -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - log-options queue-threshold <0-65535> -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - log-options queue-threshold <0-65535> - - Define number of packets to queue inside the kernel before sending them to - userspace. Only applicable if rule log is enable and log group is defined. - -Firewall Description -==================== - -For reference, a description can be defined for every single rule, and for -every defined custom chain. - -.. cfgcmd:: set firewall ipv4 name <name> description <text> - - Provide a rule-set description to a custom firewall chain. - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - description <text> -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - description <text> -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - description <text> -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> description <text> - - Provide a description for each rule. - -Rule Status -=========== - -When defining a rule, it is enable by default. In some cases, it is useful to -just disable the rule, rather than removing it. - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> disable -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> disable -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> disable -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> disable - - Command for disabling a rule but keep it in the configuration. - -Matching criteria -================= - -There are a lot of matching criteria against which the packet can be tested. - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - connection-status nat [destination | source] -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - connection-status nat [destination | source] -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - connection-status nat [destination | source] -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - connection-status nat [destination | source] - - Match criteria based on nat connection status. - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - connection-mark <1-2147483647> -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - connection-mark <1-2147483647> -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - connection-mark <1-2147483647> -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - connection-mark <1-2147483647> - - Match criteria based on connection mark. - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - source address [address | addressrange | CIDR] -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - source address [address | addressrange | CIDR] -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - source address [address | addressrange | CIDR] -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - source address [address | addressrange | CIDR] - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - destination address [address | addressrange | CIDR] -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - destination address [address | addressrange | CIDR] -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - destination address [address | addressrange | CIDR] -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - destination address [address | addressrange | CIDR] - - Match criteria based on source and/or destination address. This is similar - to the network groups part, but here you are able to negate the matching - addresses. - - .. code-block:: none - - set firewall ipv4 name FOO rule 50 source address 192.0.2.10-192.0.2.11 - # with a '!' the rule match everything except the specified subnet - set firewall ipv4 input filter FOO rule 51 source address !203.0.113.0/24 - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - source address-mask [address] -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - source address-mask [address] -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - source address-mask [address] -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - source address-mask [address] - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - destination address-mask [address] -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - destination address-mask [address] -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - destination address-mask [address] -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - destination address-mask [address] - - An arbitrary netmask can be applied to mask addresses to only match against - a specific portion. - - This functions for both individual addresses and address groups. - - .. code-block:: none - - # Match any IPv4 address with `11` as the 2nd octet and `13` as the forth octet - set firewall ipv4 name FOO rule 100 destination address 0.11.0.13 - set firewall ipv4 name FOO rule 100 destination address-mask 0.255.0.255 - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - source fqdn <fqdn> -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - source fqdn <fqdn> -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - source fqdn <fqdn> -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - source fqdn <fqdn> -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - destination fqdn <fqdn> -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - destination fqdn <fqdn> -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - destination fqdn <fqdn> -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - destination fqdn <fqdn> - - Specify a Fully Qualified Domain Name as source/destination matcher. Ensure - router is able to resolve such dns query. - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - source geoip country-code <country> -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - source geoip country-code <country> -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - source geoip country-code <country> -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - source geoip country-code <country> - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - destination geoip country-code <country> -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - destination geoip country-code <country> -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - destination geoip country-code <country> -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - destination geoip country-code <country> - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - source geoip inverse-match -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - source geoip inverse-match -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - source geoip inverse-match -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - source geoip inverse-match - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - destination geoip inverse-match -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - destination geoip inverse-match -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - destination geoip inverse-match -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - destination geoip inverse-match - - Match IP addresses based on its geolocation. More info: `geoip matching - <https://wiki.nftables.org/wiki-nftables/index.php/GeoIP_matching>`_. - Use inverse-match to match anything except the given country-codes. - -Data is provided by DB-IP.com under CC-BY-4.0 license. Attribution required, -permits redistribution so we can include a database in images(~3MB -compressed). Includes cron script (manually callable by op-mode update -geoip) to keep database and rules updated. - - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - source mac-address <mac-address> -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - source mac-address <mac-address> -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - source mac-address <mac-address> -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - source mac-address <mac-address> - - Only in the source criteria, you can specify a mac-address. - - .. code-block:: none - - set firewall ipv4 input filter rule 100 source mac-address 00:53:00:11:22:33 - set firewall ipv4 input filter rule 101 source mac-address !00:53:00:aa:12:34 - - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - source port [1-65535 | portname | start-end] -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - source port [1-65535 | portname | start-end] -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - source port [1-65535 | portname | start-end] -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - source port [1-65535 | portname | start-end] - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - destination port [1-65535 | portname | start-end] -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - destination port [1-65535 | portname | start-end] -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - destination port [1-65535 | portname | start-end] -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - destination port [1-65535 | portname | start-end] - - A port can be set with a port number or a name which is here - defined: ``/etc/services``. - - .. code-block:: none - - set firewall ipv4 forward filter rule 10 source port '22' - set firewall ipv4 forward filter rule 11 source port '!http' - set firewall ipv4 forward filter rule 12 source port 'https' - - Multiple source ports can be specified as a comma-separated list. - The whole list can also be "negated" using ``!``. For example: - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - source group address-group <name | !name> -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - source group address-group <name | !name> -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - source group address-group <name | !name> -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - source group address-group <name | !name> - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - destination group address-group <name | !name> -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - destination group address-group <name | !name> -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - destination group address-group <name | !name> -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - destination group address-group <name | !name> - - Use a specific address-group. Prepend character ``!`` for inverted matching - criteria. - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - source group dynamic-address-group <name | !name> -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - source group dynamic-address-group <name | !name> -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - source group dynamic-address-group <name | !name> -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - source group dynamic-address-group <name | !name> - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - destination group dynamic-address-group <name | !name> -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - destination group dynamic-address-group <name | !name> -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - destination group dynamic-address-group <name | !name> -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - destination group dynamic-address-group <name | !name> - - Use a specific dynamic-address-group. Prepend character ``!`` for inverted - matching criteria. - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - source group network-group <name | !name> -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - source group network-group <name | !name> -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - source group network-group <name | !name> -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - source group network-group <name | !name> - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - destination group network-group <name | !name> -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - destination group network-group <name | !name> -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - destination group network-group <name | !name> -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - destination group network-group <name | !name> - - Use a specific network-group. Prepend character ``!`` for inverted matching - criteria. - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - source group port-group <name | !name> -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - source group port-group <name | !name> -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - source group port-group <name | !name> -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - source group port-group <name | !name> - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - destination group port-group <name | !name> -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - destination group port-group <name | !name> -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - destination group port-group <name | !name> -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - destination group port-group <name | !name> - - Use a specific port-group. Prepend character ``!`` for inverted matching - criteria. - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - source group domain-group <name | !name> -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - source group domain-group <name | !name> -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - source group domain-group <name | !name> -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - source group domain-group <name | !name> - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - destination group domain-group <name | !name> -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - destination group domain-group <name | !name> -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - destination group domain-group <name | !name> -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - destination group domain-group <name | !name> - - Use a specific domain-group. Prepend character ``!`` for inverted matching - criteria. - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - source group mac-group <name | !name> -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - source group mac-group <name | !name> -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - source group mac-group <name | !name> -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - source group mac-group <name | !name> - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - destination group mac-group <name | !name> -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - destination group mac-group <name | !name> -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - destination group mac-group <name | !name> -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - destination group mac-group <name | !name> - - Use a specific mac-group. Prepend character ``!`` for inverted matching - criteria. - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - dscp [0-63 | start-end] -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - dscp [0-63 | start-end] -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - dscp [0-63 | start-end] -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - dscp [0-63 | start-end] - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - dscp-exclude [0-63 | start-end] -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - dscp-exclude [0-63 | start-end] -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - dscp-exclude [0-63 | start-end] -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - dscp-exclude [0-63 | start-end] - - Match based on dscp value. - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - fragment [match-frag | match-non-frag] -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - fragment [match-frag | match-non-frag] -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - fragment [match-frag | match-non-frag] -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - fragment [match-frag | match-non-frag] - - Match based on fragment criteria. - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - icmp [code | type] <0-255> -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - icmp [code | type] <0-255> -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - icmp [code | type] <0-255> -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - icmp [code | type] <0-255> - - Match based on icmp code and type. - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - icmp type-name <text> -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - icmp type-name <text> -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - icmp type-name <text> -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - icmp type-name <text> - - Match based on icmp type-name criteria. Use tab for information - about what **type-name** criteria are supported. - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - inbound-interface name <iface> -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - inbound-interface name <iface> -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - inbound-interface name <iface> - - Match based on inbound interface. Wilcard ``*`` can be used. - For example: ``eth2*``. Prepending character ``!`` for inverted matching - criteria is also supportd. For example ``!eth2`` - -.. note:: If an interface is attached to a non-default vrf, when using - **inbound-interface**, vrf name must be used. For example ``set firewall - ipv4 forward filter rule 10 inbound-interface name MGMT`` - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - inbound-interface group <iface_group> -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - inbound-interface group <iface_group> -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - inbound-interface group <iface_group> - - Match based on inbound interface group. Prepending character ``!`` for - inverted matching criteria is also supportd. For example ``!IFACE_GROUP`` - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - outbound-interface name <iface> -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - outbound-interface name <iface> -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - outbound-interface name <iface> - - Match based on outbound interface. Wilcard ``*`` can be used. - For example: ``eth2*``. Prepending character ``!`` for inverted matching - criteria is also supportd. For example ``!eth2`` - -.. note:: If an interface is attached to a non-default vrf, when using - **outbound-interface**, real interface name must be used. For example - ``set firewall ipv4 forward filter rule 10 outbound-interface name eth0`` - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - outbound-interface group <iface_group> -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - outbound-interface group <iface_group> -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - outbound-interface group <iface_group> - - Match based on outbound interface group. Prepending character ``!`` for - inverted matching criteria is also supportd. For example ``!IFACE_GROUP`` - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - ipsec [match-ipsec | match-none] -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - ipsec [match-ipsec | match-none] -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - ipsec [match-ipsec | match-none] -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - ipsec [match-ipsec | match-none] - - Match based on ipsec criteria. - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - limit burst <0-4294967295> -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - limit burst <0-4294967295> -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - limit burst <0-4294967295> -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - limit burst <0-4294967295> - - Match based on the maximum number of packets to allow in excess of rate. - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - limit rate <text> -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - limit rate <text> -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - limit rate <text> -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - limit rate <text> - - Match based on the maximum average rate, specified as **integer/unit**. - For example **5/minutes** - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - packet-length <text> -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - packet-length <text> -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - packet-length <text> -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - packet-length <text> - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - packet-length-exclude <text> -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - packet-length-exclude <text> -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - packet-length-exclude <text> -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - packet-length-exclude <text> - - Match based on packet length criteria. Multiple values from 1 to 65535 - and ranges are supported. - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - packet-type [broadcast | host | multicast | other] -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - packet-type [broadcast | host | multicast | other] -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - packet-type [broadcast | host | multicast | other] -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - packet-type [broadcast | host | multicast | other] - - Match based on packet type criteria. - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - protocol [<text> | <0-255> | all | tcp_udp] -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - protocol [<text> | <0-255> | all | tcp_udp] -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - protocol [<text> | <0-255> | all | tcp_udp] -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - protocol [<text> | <0-255> | all | tcp_udp] - - Match a protocol criteria. A protocol number or a name which is here - defined: ``/etc/protocols``. - Special names are ``all`` for all protocols and ``tcp_udp`` for tcp and udp - based packets. The ``!`` negate the selected protocol. - - .. code-block:: none - - set firewall ipv4 forward fitler rule 10 protocol tcp_udp - set firewall ipv4 forward fitler rule 11 protocol !tcp_udp - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - recent count <1-255> -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - recent count <1-255> -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - recent count <1-255> -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - recent count <1-255> - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - recent time [second | minute | hour] -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - recent time [second | minute | hour] -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - recent time [second | minute | hour] -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - recent time [second | minute | hour] - - Match bases on recently seen sources. - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - tcp flags [not] <text> -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - tcp flags [not] <text> -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - tcp flags [not] <text> -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - tcp flags [not] <text> - - Allowed values fpr TCP flags: ``ack``, ``cwr``, ``ecn``, ``fin``, ``psh``, - ``rst``, ``syn`` and ``urg``. Multiple values are supported, and for - inverted selection use ``not``, as shown in the example. - - .. code-block:: none - - set firewall ipv4 input filter rule 10 tcp flags 'ack' - set firewall ipv4 input filter rule 12 tcp flags 'syn' - set firewall ipv4 input filter rule 13 tcp flags not 'fin' - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - state [established | invalid | new | related] -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - state [established | invalid | new | related] -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - state [established | invalid | new | related] -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - state [established | invalid | new | related] - - Match against the state of a packet. - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - time startdate <text> -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - time startdate <text> -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - time startdate <text> -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - time startdate <text> -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - time starttime <text> -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - time starttime <text> -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - time starttime <text> -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - time starttime <text> -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - time stopdate <text> -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - time stopdate <text> -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - time stopdate <text> -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - time stopdate <text> -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - time stoptime <text> -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - time stoptime <text> -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - time stoptime <text> -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - time stoptime <text> -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - time weekdays <text> -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - time weekdays <text> -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - time weekdays <text> -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - time weekdays <text> - - Time to match the defined rule. - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - ttl <eq | gt | lt> <0-255> -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - ttl <eq | gt | lt> <0-255> -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - ttl <eq | gt | lt> <0-255> -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - ttl <eq | gt | lt> <0-255> - - Match time to live parameter, where 'eq' stands for 'equal'; 'gt' stands for - 'greater than', and 'lt' stands for 'less than'. - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - recent count <1-255> -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - recent count <1-255> -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - recent count <1-255> -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - recent count <1-255> - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - recent time <second | minute | hour> -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - recent time <second | minute | hour> -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - recent time <second | minute | hour> -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - recent time <second | minute | hour> - - Match when 'count' amount of connections are seen within 'time'. These - matching criteria can be used to block brute-force attempts. - -.. cfgcmd:: set firewall ipv4 forward filter rule <1-999999> - conntrack-helper <module> -.. cfgcmd:: set firewall ipv4 input filter rule <1-999999> - conntrack-helper <module> -.. cfgcmd:: set firewall ipv4 output filter rule <1-999999> - conntrack-helper <module> -.. cfgcmd:: set firewall ipv4 name <name> rule <1-999999> - conntrack-helper <module> - - Match based on connection tracking protocol helper module to secure use of - that helper module. See below for possible completions `<module>`. - - .. code-block:: none - - Possible completions: - ftp Related traffic from FTP helper - h323 Related traffic from H.323 helper - pptp Related traffic from PPTP helper - nfs Related traffic from NFS helper - sip Related traffic from SIP helper - tftp Related traffic from TFTP helper - sqlnet Related traffic from SQLNet helper - - -******** -Synproxy -******** -Synproxy connections - -.. cfgcmd:: set firewall ipv4 [input | forward] filter rule <1-999999> - action synproxy -.. cfgcmd:: set firewall ipv4 [input | forward] filter rule <1-999999> - protocol tcp -.. cfgcmd:: set firewall ipv4 [input | forward] filter rule <1-999999> - synproxy tcp mss <501-65535> - - Set TCP-MSS (maximum segment size) for the connection - -.. cfgcmd:: set firewall ipv4 [input | forward] filter rule <1-999999> - synproxy tcp window-scale <1-14> - - Set the window scale factor for TCP window scaling - -Example synproxy -================ -Requirements to enable synproxy: - - * Traffic must be symmetric - * Synproxy relies on syncookies and TCP timestamps, ensure these are enabled - * Disable conntrack loose track option - -.. code-block:: none - - set system sysctl parameter net.ipv4.tcp_timestamps value '1' - - set system conntrack tcp loose disable - set system conntrack ignore ipv4 rule 10 destination port '8080' - set system conntrack ignore ipv4 rule 10 protocol 'tcp' - set system conntrack ignore ipv4 rule 10 tcp flags syn - - set firewall global-options syn-cookies 'enable' - set firewall ipv4 input filter rule 10 action 'synproxy' - set firewall ipv4 input filter rule 10 destination port '8080' - set firewall ipv4 input filter rule 10 inbound-interface name 'eth1' - set firewall ipv4 input filter rule 10 protocol 'tcp' - set firewall ipv4 input filter rule 10 synproxy tcp mss '1460' - set firewall ipv4 input filter rule 10 synproxy tcp window-scale '7' - set firewall ipv4 input filter rule 1000 action 'drop' - set firewall ipv4 input filter rule 1000 state invalid - - -*********************** -Operation-mode Firewall -*********************** - -Rule-set overview -================= - -.. opcmd:: show firewall - - This will show you a basic firewall overview, for all ruleset, and not - only for ipv4 - - .. code-block:: none - - vyos@vyos:~$ show firewall - Rulesets Information - - --------------------------------- - ipv4 Firewall "forward filter" - - Rule Action Protocol Packets Bytes Conditions - ------- -------- ---------- --------- ------- ----------------------------- - 20 accept all 0 0 ip saddr @N_TRUSTEDv4 accept - 21 jump all 0 0 jump NAME_AUX - default accept all 0 0 - - --------------------------------- - ipv4 Firewall "input filter" - - Rule Action Protocol Packets Bytes Conditions - ------- -------- ---------- --------- ------- ------------------------- - 10 accept all 156 14377 iifname != @I_LAN accept - default accept all 0 0 - - --------------------------------- - ipv4 Firewall "name AUX" - - Rule Action Protocol Packets Bytes Conditions - ------ -------- ---------- --------- ------- -------------------------------------------- - 10 accept icmp 0 0 meta l4proto icmp accept - 20 accept udp 0 0 meta l4proto udp ip saddr @A_SERVERS accept - 30 drop all 0 0 ip saddr != @A_SERVERS iifname "eth2" - - --------------------------------- - ipv4 Firewall "output filter" - - Rule Action Protocol Packets Bytes Conditions - ------- -------- ---------- --------- ------- ---------------------------------------- - 10 reject all 0 0 oifname @I_LAN - 20 accept icmp 2 168 meta l4proto icmp oifname "eth0" accept - default accept all 72 9258 - - --------------------------------- - ipv6 Firewall "input filter" - - Rule Action Protocol Packets Bytes Conditions - ------- -------- ---------- --------- ------- ------------------------------- - 10 accept all 0 0 ip6 saddr @N6_TRUSTEDv6 accept - default accept all 2 112 - - vyos@vyos:~$ - -.. opcmd:: show firewall summary - - This will show you a summary of rule-sets and groups - - .. code-block:: none - - vyos@vyos:~$ show firewall summary - Ruleset Summary - - IPv6 Ruleset: - - Ruleset Hook Ruleset Priority Description - -------------- -------------------- ------------------------- - forward filter - input filter - ipv6_name IPV6-VyOS_MANAGEMENT - ipv6_name IPV6-WAN_IN PUBLIC_INTERNET - - IPv4 Ruleset: - - Ruleset Hook Ruleset Priority Description - -------------- ------------------ ------------------------- - forward filter - input filter - name VyOS_MANAGEMENT - name WAN_IN PUBLIC_INTERNET - - Firewall Groups - - Name Type References Members - ----------------------- ------------------ ----------------------- ---------------- - PBX address_group WAN_IN-100 198.51.100.77 - SERVERS address_group WAN_IN-110 192.0.2.10 - WAN_IN-111 192.0.2.11 - WAN_IN-112 192.0.2.12 - WAN_IN-120 - WAN_IN-121 - WAN_IN-122 - SUPPORT address_group VyOS_MANAGEMENT-20 192.168.1.2 - WAN_IN-20 - PHONE_VPN_SERVERS address_group WAN_IN-160 10.6.32.2 - PINGABLE_ADRESSES address_group WAN_IN-170 192.168.5.2 - WAN_IN-171 - PBX ipv6_address_group IPV6-WAN_IN-100 2001:db8::1 - SERVERS ipv6_address_group IPV6-WAN_IN-110 2001:db8::2 - IPV6-WAN_IN-111 2001:db8::3 - IPV6-WAN_IN-112 2001:db8::4 - IPV6-WAN_IN-120 - IPV6-WAN_IN-121 - IPV6-WAN_IN-122 - SUPPORT ipv6_address_group IPV6-VyOS_MANAGEMENT-20 2001:db8::5 - IPV6-WAN_IN-20 - - -.. opcmd:: show firewall ipv4 [forward | input | output] filter - -.. opcmd:: show firewall ipv4 name <name> - - This command will give an overview of a single rule-set. - - .. code-block:: none - - vyos@vyos:~$ show firewall ipv4 input filter - Ruleset Information - - --------------------------------- - IPv4 Firewall "input filter" - - Rule Action Protocol Packets Bytes Conditions - ------- -------- ---------- --------- ------- ----------------------------------------- - 5 jump all 0 0 iifname "eth2" jump NAME_VyOS_MANAGEMENT - default accept all - -.. opcmd:: show firewall ipv4 [forward | input | output] - filter rule <1-999999> -.. opcmd:: show firewall ipv4 name <name> rule <1-999999> - - This command will give an overview of a rule in a single rule-set, plus - information for default action. - -.. code-block:: none - - vyos@vyos:~$show firewall ipv4 output filter rule 20 - Rule Information - - --------------------------------- - ipv4 Firewall "output filter" - - Rule Action Protocol Packets Bytes Conditions - ------- -------- ---------- --------- ------- ---------------------------------------- - 20 accept icmp 2 168 meta l4proto icmp oifname "eth0" accept - default accept all 286 47614 - - vyos@vyos:~$ - - -.. opcmd:: show firewall statistics - - This will show you a statistic of all rule-sets since the last boot. - -Show Firewall log -================= - -.. opcmd:: show log firewall -.. opcmd:: show log firewall ipv4 -.. opcmd:: show log firewall ipv4 [forward | input | output | name] -.. opcmd:: show log firewall ipv4 [forward | input | output] filter -.. opcmd:: show log firewall ipv4 name <name> -.. opcmd:: show log firewall ipv4 [forward | input | output] filter rule <rule> -.. opcmd:: show log firewall ipv4 name <name> rule <rule> - - Show the logs of all firewall; show all ipv4 firewall logs; show all logs - for particular hook; show all logs for particular hook and priority; - show all logs for particular custom chain; show logs for specific Rule-Set. - -Example Partial Config -====================== - -.. code-block:: none - - firewall { - group { - network-group BAD-NETWORKS { - network 198.51.100.0/24 - network 203.0.113.0/24 - } - network-group GOOD-NETWORKS { - network 192.0.2.0/24 - } - port-group BAD-PORTS { - port 65535 - } - } - ipv4 { - forward { - filter { - default-action accept - rule 5 { - action accept - source { - group { - network-group GOOD-NETWORKS - } - } - } - rule 10 { - action drop - description "Bad Networks" - protocol all - source { - group { - network-group BAD-NETWORKS - } - } - } - } - } - } - } - -Update geoip database -===================== - -.. opcmd:: update geoip - - Command used to update GeoIP database and firewall sets. diff --git a/docs/configuration/firewall/rst-ipv6.rst b/docs/configuration/firewall/rst-ipv6.rst deleted file mode 100644 index 19df996a..00000000 --- a/docs/configuration/firewall/rst-ipv6.rst +++ /dev/null @@ -1,1233 +0,0 @@ -:lastproofread: 2023-11-08 - -.. _firewall-ipv6-configuration: - -########################### -IPv6 Firewall Configuration -########################### - -******** -Overview -******** - -In this section there's useful information of all firewall configuration that -can be done regarding IPv6, and appropiate op-mode commands. -Configuration commands covered in this section: - -.. cfgcmd:: set firewall ipv6 ... - -From main structure defined in -:doc:`Firewall Overview</configuration/firewall/index>` -in this section you can find detailed information only for the next part -of the general structure: - -.. code-block:: none - - - set firewall - * ipv6 - - forward - + filter - - input - + filter - - output - + filter - - name - + custom_name - -For transit traffic, which is received by the router and forwarded, base chain -is **forward**. A simplified packet flow diagram for transit traffic is shown -next: - -.. figure:: /_static/images/firewall-fwd-packet-flow.png - -Where firewall base chain to configure firewall filtering rules for transit -traffic is ``set firewall ipv6 forward filter ...``, which happens in stage 5, -highlightened with red color. - -For traffic towards the router itself, base chain is **input**, while traffic -originated by the router, base chain is **output**. -A new simplified packet flow diagram is shown next, which shows the path -for traffic destinated to the router itself, and traffic generated by the -router (starting from circle number 6): - -.. figure:: /_static/images/firewall-input-packet-flow.png - -Base chain is for traffic toward the router is ``set firewall ipv6 input -filter ...`` - -And base chain for traffic generated by the router is ``set firewall ipv6 -output filter ...`` - -.. note:: **Important note about default-actions:** - If default action for any base chain is not defined, then the default - action is set to **accept** for that chain. For custom chains, if default - action is not defined, then the default-action is set to **drop** - -Custom firewall chains can be created, with commands -``set firewall ipv6 name <name> ...``. In order to use -such custom chain, a rule with **action jump**, and the appropiate **target** -should be defined in a base chain. - -****************************** -Firewall - IPv6 Rules -****************************** - -For firewall filtering, firewall rules needs to be created. Each rule is -numbered, has an action to apply if the rule is matched, and the ability -to specify multiple criteria matchers. Data packets go through the rules -from 1 - 999999, so order is crucial. At the first match the action of the -rule will be executed. - -Actions -======= - -If a rule is defined, then an action must be defined for it. This tells the -firewall what to do if all criteria matchers defined for such rule do match. - -The action can be : - - * ``accept``: accept the packet. - - * ``continue``: continue parsing next rule. - - * ``drop``: drop the packet. - - * ``reject``: reject the packet. - - * ``jump``: jump to another custom chain. - - * ``return``: Return from the current chain and continue at the next rule - of the last chain. - - * ``queue``: Enqueue packet to userspace. - - * ``synproxy``: synproxy the packet. - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> action - [accept | continue | drop | jump | queue | reject | return | synproxy] -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> action - [accept | continue | drop | jump | queue | reject | return | synproxy] -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> action - [accept | continue | drop | jump | queue | reject | return] -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> action - [accept | continue | drop | jump | queue | reject | return] - - This required setting defines the action of the current rule. If action is - set to jump, then jump-target is also needed. - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - jump-target <text> -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - jump-target <text> -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - jump-target <text> -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - jump-target <text> - - To be used only when action is set to ``jump``. Use this command to specify - jump target. - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - queue <0-65535> -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - queue <0-65535> -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - queue <0-65535> -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - queue <0-65535> - - To be used only when action is set to ``queue``. Use this command to specify - queue target to use. Queue range is also supported. - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - queue-options bypass -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - queue-options bypass -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - queue-options bypass -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - queue-options bypass - - To be used only when action is set to ``queue``. Use this command to let - packet go through firewall when no userspace software is connected to the - queue. - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - queue-options fanout -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - queue-options fanout -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - queue-options fanout -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - queue-options fanout - - To be used only when action is set to ``queue``. Use this command to - distribute packets between several queues. - -Also, **default-action** is an action that takes place whenever a packet does -not match any rule in it's chain. For base chains, possible options for -**default-action** are **accept** or **drop**. - -.. cfgcmd:: set firewall ipv6 forward filter default-action - [accept | drop] -.. cfgcmd:: set firewall ipv6 input filter default-action - [accept | drop] -.. cfgcmd:: set firewall ipv6 output filter default-action - [accept | drop] -.. cfgcmd:: set firewall ipv6 name <name> default-action - [accept | drop | jump | queue | reject | return] - - This set the default action of the rule-set if no rule matched a packet - criteria. If default-action is set to ``jump``, then - ``default-jump-target`` is also needed. Note that for base chains, default - action can only be set to ``accept`` or ``drop``, while on custom chain, - more actions are available. - -.. cfgcmd:: set firewall ipv6 name <name> default-jump-target <text> - - To be used only when ``defult-action`` is set to ``jump``. Use this - command to specify jump target for default rule. - -.. note:: **Important note about default-actions:** - If default action for any base chain is not defined, then the default - action is set to **accept** for that chain. For custom chains, if default - action is not defined, then the default-action is set to **drop**. - -Firewall Logs -============= - -Logging can be enable for every single firewall rule. If enabled, other -log options can be defined. - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> log -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> log -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> log -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> log - - Enable logging for the matched packet. If this configuration command is not - present, then log is not enabled. - -.. cfgcmd:: set firewall ipv6 forward filter default-log -.. cfgcmd:: set firewall ipv6 input filter default-log -.. cfgcmd:: set firewall ipv6 output filter default-log -.. cfgcmd:: set firewall ipv6 name <name> default-log - - Use this command to enable the logging of the default action on - the specified chain. - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - log-options level [emerg | alert | crit | err | warn | notice - | info | debug] -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - log-options level [emerg | alert | crit | err | warn | notice - | info | debug] -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - log-options level [emerg | alert | crit | err | warn | notice - | info | debug] -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - log-options level [emerg | alert | crit | err | warn | notice - | info | debug] - - Define log-level. Only applicable if rule log is enable. - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - log-options group <0-65535> -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - log-options group <0-65535> -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - log-options group <0-65535> -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - log-options group <0-65535> - - Define log group to send message to. Only applicable if rule log is enable. - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - log-options snapshot-length <0-9000> -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - log-options snapshot-length <0-9000> -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - log-options snapshot-length <0-9000> -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - log-options snapshot-length <0-9000> - - Define length of packet payload to include in netlink message. Only - applicable if rule log is enable and log group is defined. - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - log-options queue-threshold <0-65535> -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - log-options queue-threshold <0-65535> -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - log-options queue-threshold <0-65535> -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - log-options queue-threshold <0-65535> - - Define number of packets to queue inside the kernel before sending them to - userspace. Only applicable if rule log is enable and log group is defined. - -Firewall Description -==================== - -For reference, a description can be defined for every single rule, and for -every defined custom chain. - -.. cfgcmd:: set firewall ipv6 name <name> description <text> - - Provide a rule-set description to a custom firewall chain. - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - description <text> -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - description <text> -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - description <text> -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> description <text> - - Provide a description for each rule. - -Rule Status -=========== - -When defining a rule, it is enable by default. In some cases, it is useful to -just disable the rule, rather than removing it. - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> disable -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> disable -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> disable -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> disable - - Command for disabling a rule but keep it in the configuration. - -Matching criteria -================= - -There are a lot of matching criteria against which the packet can be tested. - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - connection-status nat [destination | source] -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - connection-status nat [destination | source] -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - connection-status nat [destination | source] -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - connection-status nat [destination | source] - - Match criteria based on nat connection status. - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - connection-mark <1-2147483647> -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - connection-mark <1-2147483647> -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - connection-mark <1-2147483647> -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - connection-mark <1-2147483647> - - Match criteria based on connection mark. - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - source address [address | addressrange | CIDR] -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - source address [address | addressrange | CIDR] -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - source address [address | addressrange | CIDR] -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - source address [address | addressrange | CIDR] - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - destination address [address | addressrange | CIDR] -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - destination address [address | addressrange | CIDR] -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - destination address [address | addressrange | CIDR] -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - destination address [address | addressrange | CIDR] - - Match criteria based on source and/or destination address. This is similar - to the network groups part, but here you are able to negate the matching - addresses. - - .. code-block:: none - - set firewall ipv6 name FOO rule 100 source address 2001:db8::202 - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - source address-mask [address] -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - source address-mask [address] -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - source address-mask [address] -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - source address-mask [address] - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - destination address-mask [address] -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - destination address-mask [address] -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - destination address-mask [address] -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - destination address-mask [address] - - An arbitrary netmask can be applied to mask addresses to only match against - a specific portion. This is particularly useful with IPv6 as rules will - remain valid if the IPv6 prefix changes and the host - portion of systems IPv6 address is static (for example, with SLAAC or - `tokenised IPv6 addresses - <https://datatracker.ietf.org - /doc/id/draft-chown-6man-tokenised-ipv6-identifiers-02.txt>`_) - - This functions for both individual addresses and address groups. - - .. stop_vyoslinter - .. code-block:: none - - # Match any IPv6 address with the suffix ::0000:0000:0000:beef - set firewall ipv6 forward filter rule 100 destination address ::beef - set firewall ipv6 forward filter rule 100 destination address-mask ::ffff:ffff:ffff:ffff - # Address groups - set firewall group ipv6-address-group WEBSERVERS address ::1000 - set firewall group ipv6-address-group WEBSERVERS address ::2000 - set firewall ipv6 forward filter rule 200 source group address-group WEBSERVERS - set firewall ipv6 forward filter rule 200 source address-mask ::ffff:ffff:ffff:ffff - - .. start_vyoslinter - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - source fqdn <fqdn> -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - source fqdn <fqdn> -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - source fqdn <fqdn> -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - source fqdn <fqdn> -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - destination fqdn <fqdn> -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - destination fqdn <fqdn> -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - destination fqdn <fqdn> -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - destination fqdn <fqdn> - - Specify a Fully Qualified Domain Name as source/destination matcher. Ensure - router is able to resolve such dns query. - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - source geoip country-code <country> -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - source geoip country-code <country> -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - source geoip country-code <country> -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - source geoip country-code <country> - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - destination geoip country-code <country> -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - destination geoip country-code <country> -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - destination geoip country-code <country> -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - destination geoip country-code <country> - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - source geoip inverse-match -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - source geoip inverse-match -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - source geoip inverse-match -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - source geoip inverse-match - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - destination geoip inverse-match -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - destination geoip inverse-match -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - destination geoip inverse-match -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - destination geoip inverse-match - - Match IP addresses based on its geolocation. More info: `geoip matching - <https://wiki.nftables.org/wiki-nftables/index.php/GeoIP_matching>`_. - Use inverse-match to match anything except the given country-codes. - -Data is provided by DB-IP.com under CC-BY-4.0 license. Attribution required, -permits redistribution so we can include a database in images(~3MB -compressed). Includes cron script (manually callable by op-mode update -geoip) to keep database and rules updated. - - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - source mac-address <mac-address> -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - source mac-address <mac-address> -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - source mac-address <mac-address> -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - source mac-address <mac-address> - - Only in the source criteria, you can specify a mac-address. - - .. code-block:: none - - set firewall ipv6 input filter rule 100 source mac-address 00:53:00:11:22:33 - set firewall ipv6 input filter rule 101 source mac-address !00:53:00:aa:12:34 - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - source port [1-65535 | portname | start-end] -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - source port [1-65535 | portname | start-end] -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - source port [1-65535 | portname | start-end] -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - source port [1-65535 | portname | start-end] - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - destination port [1-65535 | portname | start-end] -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - destination port [1-65535 | portname | start-end] -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - destination port [1-65535 | portname | start-end] -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - destination port [1-65535 | portname | start-end] - - A port can be set with a port number or a name which is here - defined: ``/etc/services``. - - .. code-block:: none - - set firewall ipv6 forward filter rule 10 source port '22' - set firewall ipv6 forward filter rule 11 source port '!http' - set firewall ipv6 forward filter rule 12 source port 'https' - - Multiple source ports can be specified as a comma-separated list. - The whole list can also be "negated" using ``!``. For example: - - .. code-block:: none - - set firewall ipv6 forward filter rule 10 source port '!22,https,3333-3338' - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - source group address-group <name | !name> -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - source group address-group <name | !name> -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - source group address-group <name | !name> -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - source group address-group <name | !name> - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - destination group address-group <name | !name> -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - destination group address-group <name | !name> -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - destination group address-group <name | !name> -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - destination group address-group <name | !name> - - Use a specific address-group. Prepend character ``!`` for inverted matching - criteria. - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - source group dynamic-address-group <name | !name> -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - source group dynamic-address-group <name | !name> -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - source group dynamic-address-group <name | !name> -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - source group dynamic-address-group <name | !name> - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - destination group dynamic-address-group <name | !name> -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - destination group dynamic-address-group <name | !name> -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - destination group dynamic-address-group <name | !name> -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - destination group dynamic-address-group <name | !name> - - Use a specific dynamic-address-group. Prepend character ``!`` for inverted - matching criteria. - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - source group network-group <name | !name> -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - source group network-group <name | !name> -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - source group network-group <name | !name> -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - source group network-group <name | !name> - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - destination group network-group <name | !name> -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - destination group network-group <name | !name> -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - destination group network-group <name | !name> -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - destination group network-group <name | !name> - - Use a specific network-group. Prepend character ``!`` for inverted matching - criteria. - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - source group port-group <name | !name> -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - source group port-group <name | !name> -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - source group port-group <name | !name> -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - source group port-group <name | !name> - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - destination group port-group <name | !name> -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - destination group port-group <name | !name> -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - destination group port-group <name | !name> -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - destination group port-group <name | !name> - - Use a specific port-group. Prepend character ``!`` for inverted matching - criteria. - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - source group domain-group <name | !name> -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - source group domain-group <name | !name> -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - source group domain-group <name | !name> -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - source group domain-group <name | !name> - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - destination group domain-group <name | !name> -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - destination group domain-group <name | !name> -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - destination group domain-group <name | !name> -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - destination group domain-group <name | !name> - - Use a specific domain-group. Prepend character ``!`` for inverted matching - criteria. - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - source group mac-group <name | !name> -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - source group mac-group <name | !name> -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - source group mac-group <name | !name> -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - source group mac-group <name | !name> - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - destination group mac-group <name | !name> -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - destination group mac-group <name | !name> -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - destination group mac-group <name | !name> -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - destination group mac-group <name | !name> - - Use a specific mac-group. Prepend character ``!`` for inverted matching - criteria. - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - dscp [0-63 | start-end] -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - dscp [0-63 | start-end] -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - dscp [0-63 | start-end] -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - dscp [0-63 | start-end] - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - dscp-exclude [0-63 | start-end] -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - dscp-exclude [0-63 | start-end] -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - dscp-exclude [0-63 | start-end] -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - dscp-exclude [0-63 | start-end] - - Match based on dscp value. - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - fragment [match-frag | match-non-frag] -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - fragment [match-frag | match-non-frag] -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - fragment [match-frag | match-non-frag] -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - fragment [match-frag | match-non-frag] - - Match based on fragment criteria. - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - icmpv6 [code | type] <0-255> -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - icmpv6 [code | type] <0-255> -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - icmpv6 [code | type] <0-255> -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - icmpv6 [code | type] <0-255> - - Match based on icmp|icmpv6 code and type. - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - icmpv6 type-name <text> -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - icmpv6 type-name <text> -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - icmpv6 type-name <text> -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - icmpv6 type-name <text> - - Match based on icmpv6 type-name criteria. Use tab for information - about what **type-name** criteria are supported. - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - inbound-interface name <iface> -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - inbound-interface name <iface> -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - inbound-interface name <iface> - - Match based on inbound interface. Wilcard ``*`` can be used. - For example: ``eth2*``. Prepending character ``!`` for inverted matching - criteria is also supportd. For example ``!eth2`` - -.. note:: If an interface is attached to a non-default vrf, when using - **inbound-interface**, vrf name must be used. For example ``set firewall - ipv6 forward filter rule 10 inbound-interface name MGMT`` - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - inbound-interface group <iface_group> -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - inbound-interface group <iface_group> -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - inbound-interface group <iface_group> - - Match based on inbound interface group. Prepending character ``!`` for - inverted matching criteria is also supportd. For example ``!IFACE_GROUP`` - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - outbound-interface name <iface> -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - outbound-interface name <iface> -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - outbound-interface name <iface> - - Match based on outbound interface. Wilcard ``*`` can be used. - For example: ``eth2*``. Prepending character ``!`` for inverted matching - criteria is also supportd. For example ``!eth2`` - -.. note:: If an interface is attached to a non-default vrf, when using - **outbound-interface**, real interface name must be used. For example - ``set firewall ipv6 forward filter rule 10 outbound-interface name eth0`` - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - outbound-interface group <iface_group> -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - outbound-interface group <iface_group> -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - outbound-interface group <iface_group> - - Match based on outbound interface group. Prepending character ``!`` for - inverted matching criteria is also supportd. For example ``!IFACE_GROUP`` - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - ipsec [match-ipsec | match-none] -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - ipsec [match-ipsec | match-none] -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - ipsec [match-ipsec | match-none] -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - ipsec [match-ipsec | match-none] - - Match based on ipsec criteria. - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - limit burst <0-4294967295> -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - limit burst <0-4294967295> -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - limit burst <0-4294967295> -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - limit burst <0-4294967295> - - Match based on the maximum number of packets to allow in excess of rate. - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - limit rate <text> -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - limit rate <text> -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - limit rate <text> -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - limit rate <text> - - Match based on the maximum average rate, specified as **integer/unit**. - For example **5/minutes** - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - packet-length <text> -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - packet-length <text> -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - packet-length <text> -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - packet-length <text> - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - packet-length-exclude <text> -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - packet-length-exclude <text> -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - packet-length-exclude <text> -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - packet-length-exclude <text> - - Match based on packet length criteria. Multiple values from 1 to 65535 - and ranges are supported. - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - packet-type [broadcast | host | multicast | other] -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - packet-type [broadcast | host | multicast | other] -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - packet-type [broadcast | host | multicast | other] -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - packet-type [broadcast | host | multicast | other] - - Match based on packet type criteria. - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - protocol [<text> | <0-255> | all | tcp_udp] -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - protocol [<text> | <0-255> | all | tcp_udp] -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - protocol [<text> | <0-255> | all | tcp_udp] -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - protocol [<text> | <0-255> | all | tcp_udp] - - Match a protocol criteria. A protocol number or a name which is here - defined: ``/etc/protocols``. - Special names are ``all`` for all protocols and ``tcp_udp`` for tcp and udp - based packets. The ``!`` negate the selected protocol. - - .. code-block:: none - - set firewall ipv6 input filter rule 10 protocol tcp - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - recent count <1-255> -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - recent count <1-255> -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - recent count <1-255> -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - recent count <1-255> - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - recent time [second | minute | hour] -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - recent time [second | minute | hour] -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - recent time [second | minute | hour] -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - recent time [second | minute | hour] - - Match bases on recently seen sources. - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - tcp flags [not] <text> -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - tcp flags [not] <text> -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - tcp flags [not] <text> -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - tcp flags [not] <text> - - Allowed values fpr TCP flags: ``ack``, ``cwr``, ``ecn``, ``fin``, ``psh``, - ``rst``, ``syn`` and ``urg``. Multiple values are supported, and for - inverted selection use ``not``, as shown in the example. - - .. code-block:: none - - set firewall ipv6 input filter rule 10 tcp flags 'ack' - set firewall ipv6 input filter rule 12 tcp flags 'syn' - set firewall ipv6 input filter rule 13 tcp flags not 'fin' - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - state [established | invalid | new | related] -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - state [established | invalid | new | related] -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - state [established | invalid | new | related] -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - state [established | invalid | new | related] - - Match against the state of a packet. - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - time startdate <text> -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - time startdate <text> -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - time startdate <text> -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - time startdate <text> -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - time starttime <text> -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - time starttime <text> -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - time starttime <text> -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - time starttime <text> -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - time stopdate <text> -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - time stopdate <text> -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - time stopdate <text> -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - time stopdate <text> -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - time stoptime <text> -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - time stoptime <text> -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - time stoptime <text> -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - time stoptime <text> -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - time weekdays <text> -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - time weekdays <text> -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - time weekdays <text> -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - time weekdays <text> - - Time to match the defined rule. - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - hop-limit <eq | gt | lt> <0-255> -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - hop-limit <eq | gt | lt> <0-255> -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - hop-limit <eq | gt | lt> <0-255> -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - hop-limit <eq | gt | lt> <0-255> - - Match hop-limit parameter, where 'eq' stands for 'equal'; 'gt' stands for - 'greater than', and 'lt' stands for 'less than'. - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - recent count <1-255> -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - recent count <1-255> -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - recent count <1-255> -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - recent count <1-255> - -.. cfgcmd:: set firewall ipv6 forward filter rule <1-999999> - recent time <second | minute | hour> -.. cfgcmd:: set firewall ipv6 input filter rule <1-999999> - recent time <second | minute | hour> -.. cfgcmd:: set firewall ipv6 output filter rule <1-999999> - recent time <second | minute | hour> -.. cfgcmd:: set firewall ipv6 name <name> rule <1-999999> - recent time <second | minute | hour> - - Match when 'count' amount of connections are seen within 'time'. These - matching criteria can be used to block brute-force attempts. - -******** -Synproxy -******** -Synproxy connections - -.. cfgcmd:: set firewall ipv6 [input | forward] filter rule <1-999999> - action synproxy -.. cfgcmd:: set firewall ipv6 [input | forward] filter rule <1-999999> - protocol tcp -.. cfgcmd:: set firewall ipv6 [input | forward] filter rule <1-999999> - synproxy tcp mss <501-65535> - - Set TCP-MSS (maximum segment size) for the connection - -.. cfgcmd:: set firewall ipv6 [input | forward] filter rule <1-999999> - synproxy tcp window-scale <1-14> - - Set the window scale factor for TCP window scaling - -Example synproxy -================ -Requirements to enable synproxy: - - * Traffic must be symmetric - * Synproxy relies on syncookies and TCP timestamps, ensure these are enabled - * Disable conntrack loose track option - -.. code-block:: none - - set system sysctl parameter net.ipv4.tcp_timestamps value '1' - - set system conntrack tcp loose disable - set system conntrack ignore ipv6 rule 10 destination port '8080' - set system conntrack ignore ipv6 rule 10 protocol 'tcp' - set system conntrack ignore ipv6 rule 10 tcp flags syn - - set firewall global-options syn-cookies 'enable' - set firewall ipv6 input filter rule 10 action 'synproxy' - set firewall ipv6 input filter rule 10 destination port '8080' - set firewall ipv6 input filter rule 10 inbound-interface name 'eth1' - set firewall ipv6 input filter rule 10 protocol 'tcp' - set firewall ipv6 input filter rule 10 synproxy tcp mss '1460' - set firewall ipv6 input filter rule 10 synproxy tcp window-scale '7' - set firewall ipv6 input filter rule 1000 action 'drop' - set firewall ipv6 input filter rule 1000 state invalid - -*********************** -Operation-mode Firewall -*********************** - -Rule-set overview -================= - -.. opcmd:: show firewall - - This will show you a basic firewall overview - - .. code-block:: none - - vyos@vyos:~$ show firewall - Rulesets Information - - --------------------------------- - IPv4 Firewall "forward filter" - - Rule Action Protocol Packets Bytes Conditions - ------- -------- ---------- --------- ------- ----------------------------------------- - 5 jump all 0 0 iifname "eth1" jump NAME_VyOS_MANAGEMENT - 10 jump all 0 0 oifname "eth1" jump NAME_WAN_IN - 15 jump all 0 0 iifname "eth3" jump NAME_WAN_IN - default accept all - - --------------------------------- - IPv4 Firewall "name VyOS_MANAGEMENT" - - Rule Action Protocol Packets Bytes Conditions - ------- -------- ---------- --------- ------- -------------------------------- - 5 accept all 0 0 ct state established accept - 10 drop all 0 0 ct state invalid - 20 accept all 0 0 ip saddr @A_GOOD_GUYS accept - 30 accept all 0 0 ip saddr @N_ENTIRE_RANGE accept - 40 accept all 0 0 ip saddr @A_VyOS_SERVERS accept - 50 accept icmp 0 0 meta l4proto icmp accept - default drop all 0 0 - - --------------------------------- - IPv6 Firewall "forward filter" - - Rule Action Protocol - ------- -------- ---------- - 5 jump all - 10 jump all - 15 jump all - default accept all - - --------------------------------- - IPv6 Firewall "input filter" - - Rule Action Protocol - ------- -------- ---------- - 5 jump all - default accept all - - --------------------------------- - IPv6 Firewall "ipv6_name IPV6-VyOS_MANAGEMENT" - - Rule Action Protocol - ------- -------- ---------- - 5 accept all - 10 drop all - 20 accept all - 30 accept all - 40 accept all - 50 accept ipv6-icmp - default drop all - -.. opcmd:: show firewall summary - - This will show you a summary of rule-sets and groups - - .. code-block:: none - - vyos@vyos:~$ show firewall summary - Ruleset Summary - - IPv6 Ruleset: - - Ruleset Hook Ruleset Priority Description - -------------- -------------------- ------------------------- - forward filter - input filter - ipv6_name IPV6-VyOS_MANAGEMENT - ipv6_name IPV6-WAN_IN PUBLIC_INTERNET - - IPv4 Ruleset: - - Ruleset Hook Ruleset Priority Description - -------------- ------------------ ------------------------- - forward filter - input filter - name VyOS_MANAGEMENT - name WAN_IN PUBLIC_INTERNET - - Firewall Groups - - Name Type References Members - ----------------------- ------------------ ----------------------- ---------------- - PBX address_group WAN_IN-100 198.51.100.77 - SERVERS address_group WAN_IN-110 192.0.2.10 - WAN_IN-111 192.0.2.11 - WAN_IN-112 192.0.2.12 - WAN_IN-120 - WAN_IN-121 - WAN_IN-122 - SUPPORT address_group VyOS_MANAGEMENT-20 192.168.1.2 - WAN_IN-20 - PHONE_VPN_SERVERS address_group WAN_IN-160 10.6.32.2 - PINGABLE_ADRESSES address_group WAN_IN-170 192.168.5.2 - WAN_IN-171 - PBX ipv6_address_group IPV6-WAN_IN-100 2001:db8::1 - SERVERS ipv6_address_group IPV6-WAN_IN-110 2001:db8::2 - IPV6-WAN_IN-111 2001:db8::3 - IPV6-WAN_IN-112 2001:db8::4 - IPV6-WAN_IN-120 - IPV6-WAN_IN-121 - IPV6-WAN_IN-122 - SUPPORT ipv6_address_group IPV6-VyOS_MANAGEMENT-20 2001:db8::5 - IPV6-WAN_IN-20 - - -.. opcmd:: show firewall ipv6 [forward | input | output] filter - -.. opcmd:: show firewall ipv6 ipv6-name <name> - - This command will give an overview of a single rule-set. - - .. code-block:: none - - vyos@vyos:~$ show firewall ipv6 input filter - Ruleset Information - - --------------------------------- - ipv6 Firewall "input filter" - - Rule Action Protocol Packets Bytes Conditions - ------- -------- ---------- --------- ------- ------------------------------------------------------------------------------ - 10 jump all 13 1456 iifname "eth1" jump NAME6_INP-ETH1 - 20 accept ipv6-icmp 10 1112 meta l4proto ipv6-icmp iifname "eth0" prefix "[ipv6-INP-filter-20-A]" accept - default accept all 14 1584 - - vyos@vyos:~$ - -.. opcmd:: show firewall ipv6 [forward | input | output] - filter rule <1-999999> - -.. opcmd:: show firewall ipv6 name <name> rule <1-999999> - -.. opcmd:: show firewall ipv6 ipv6-name <name> rule <1-999999> - - This command will give an overview of a rule in a single rule-set - -.. opcmd:: show firewall group <name> - - Overview of defined groups. You see the type, the members, and where the - group is used. - - .. code-block:: none - - vyos@vyos:~$ show firewall group LAN - Firewall Groups - - Name Type References Members - ------------ ------------------ ----------------------- ---------------- - LAN ipv6_network_group IPV6-VyOS_MANAGEMENT-30 2001:db8::0/64 - IPV6-WAN_IN-30 - LAN network_group VyOS_MANAGEMENT-30 192.168.200.0/24 - WAN_IN-30 - - -.. opcmd:: show firewall statistics - - This will show you a statistic of all rule-sets since the last boot. - -Show Firewall log -================= - -.. opcmd:: show log firewall -.. opcmd:: show log firewall ipv6 -.. opcmd:: show log firewall ipv6 [forward | input | output | name] -.. opcmd:: show log firewall ipv6 [forward | input | output] filter -.. opcmd:: show log firewall ipv6 name <name> -.. opcmd:: show log firewall ipv6 [forward | input | output] filter rule <rule> -.. opcmd:: show log firewall ipv6 name <name> rule <rule> - - Show the logs of all firewall; show all ipv6 firewall logs; show all logs - for particular hook; show all logs for particular hook and priority; - show all logs for particular custom chain; show logs for specific Rule-Set. - -Example Partial Config -====================== - -.. code-block:: none - - firewall { - ipv6 { - input { - filter { - rule 10 { - action jump - inbound-interface { - name eth1 - } - jump-target INP-ETH1 - } - rule 20 { - action accept - inbound-interface { - name eth0 - } - log - protocol ipv6-icmp - } - } - } - name INP-ETH1 { - default-action drop - default-log - rule 10 { - action accept - protocol tcp_udp - } - } - } - } - - -Update geoip database -===================== - -.. opcmd:: update geoip - - Command used to update GeoIP database and firewall sets. diff --git a/docs/configuration/firewall/rst-zone.rst b/docs/configuration/firewall/rst-zone.rst deleted file mode 100644 index 059b029d..00000000 --- a/docs/configuration/firewall/rst-zone.rst +++ /dev/null @@ -1,163 +0,0 @@ -:lastproofread: 2023-11-01 - -.. _firewall-zone: - -################### -Zone Based Firewall -################### - -******** -Overview -******** - -.. note:: Starting from VyOS 1.4-rolling-202308040557, a new firewall - structure can be found on all vyos instalations. Zone based firewall was - removed in that version, but re introduced in VyOS 1.4 and 1.5. All - versions built after 2023-10-22 has this feature. - Documentation for most of the new firewall CLI can be - found in the `firewall - <https://docs.vyos.io/en/latest/configuration/firewall/general.html>`_ - chapter. The legacy firewall is still available for versions before - 1.4-rolling-202308040557 and can be found in the - :doc:`legacy firewall configuration </configuration/firewall/general-legacy>` - chapter. - -In this section there's useful information of all firewall configuration that -is needed for zone-based firewall. -Configuration commands covered in this section: - -.. cfgcmd:: set firewall zone ... - -From main structure defined in -:doc:`Firewall Overview</configuration/firewall/index>` -in this section you can find detailed information only for the next part -of the general structure: - -.. code-block:: none - - - set firewall - * zone - - custom_zone_name - + ... - -In zone-based policy, interfaces are assigned to zones, and inspection policy -is applied to traffic moving between the zones and acted on according to -firewall rules. A zone is a group of interfaces that have similar functions or -features. It establishes the security borders of a network. A zone defines a -boundary where traffic is subjected to policy restrictions as it crosses to -another region of a network. - -Key Points: - -* A zone must be configured before an interface is assigned to it and an - interface can be assigned to only a single zone. -* All traffic to and from an interface within a zone is permitted. -* All traffic between zones is affected by existing policies -* Traffic cannot flow between zone member interface and any interface that is - not a zone member. -* You need 2 separate firewalls to define traffic: one for each direction. - -.. note:: In :vytask:`T2199` the syntax of the zone configuration was changed. - The zone configuration moved from ``zone-policy zone <name>`` to ``firewall - zone <name>``. - -************* -Configuration -************* - -As an alternative to applying policy to an interface directly, a zone-based -firewall can be created to simplify configuration when multiple interfaces -belong to the same security zone. Instead of applying rule-sets to interfaces, -they are applied to source zone-destination zone pairs. - -A basic introduction to zone-based firewalls can be found `here -<https://support.vyos.io/en/kb/articles/a-primer-to-zone-based-firewall>`_, -and an example at :ref:`examples-zone-policy`. - -Define a Zone -============= - -To define a zone setup either one with interfaces or a local zone. - -.. cfgcmd:: set firewall zone <name> interface <interface> - - Set interfaces to a zone. A zone can have multiple interfaces. - But an interface can only be a member in one zone. - -.. cfgcmd:: set firewall zone <name> local-zone - - Define the zone as a local zone. A local zone has no interfaces and - will be applied to the router itself. - -.. cfgcmd:: set firewall zone <name> default-action [drop | reject] - - Change the default-action with this setting. - -.. cfgcmd:: set firewall zone <name> description - - Set a meaningful description. - -Applying a Rule-Set to a Zone -============================= - -Before you are able to apply a rule-set to a zone you have to create the zones -first. - -It helps to think of the syntax as: (see below). The 'rule-set' should be -written from the perspective of: *Source Zone*-to->*Destination Zone* - -.. cfgcmd:: set firewall zone <Destination Zone> from <Source Zone> - firewall name <rule-set> - -.. cfgcmd:: set firewall zone <name> from <name> firewall name - <rule-set> - -.. cfgcmd:: set firewall zone <name> from <name> firewall ipv6-name - <rule-set> - - You apply a rule-set always to a zone from an other zone, it is recommended - to create one rule-set for each zone pair. - - .. code-block:: none - - set firewall zone DMZ from LAN firewall name LANv4-to-DMZv4 - set firewall zone LAN from DMZ firewall name DMZv4-to-LANv4 - -************** -Operation-mode -************** - -.. opcmd:: show firewall zone-policy - - This will show you a basic summary of zones configuration. - - .. code-block:: none - - vyos@vyos:~$ show firewall zone-policy - Zone Interfaces From Zone Firewall IPv4 Firewall IPv6 - ------ ------------ ----------- --------------- --------------- - LAN eth1 WAN WAN_to_LAN - eth2 - LOCAL LOCAL LAN LAN_to_LOCAL - WAN WAN_to_LOCAL WAN_to_LOCAL_v6 - WAN eth3 LAN LAN_to_WAN - eth0 LOCAL LOCAL_to_WAN - vyos@vyos:~$ - -.. opcmd:: show firewall zone-policy zone <zone> - - This will show you a basic summary of a particular zone. - - .. code-block:: none - - vyos@vyos:~$ show firewall zone-policy zone WAN - Zone Interfaces From Zone Firewall IPv4 Firewall IPv6 - ------ ------------ ----------- --------------- --------------- - WAN eth3 LAN LAN_to_WAN - eth0 LOCAL LOCAL_to_WAN - vyos@vyos:~$ show firewall zone-policy zone LOCAL - Zone Interfaces From Zone Firewall IPv4 Firewall IPv6 - ------ ------------ ----------- --------------- --------------- - LOCAL LOCAL LAN LAN_to_LOCAL - WAN WAN_to_LOCAL WAN_to_LOCAL_v6 - vyos@vyos:~$ |
