summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorChristian Poessinger <christian@poessinger.com>2022-09-14 19:55:56 +0200
committerChristian Poessinger <christian@poessinger.com>2022-09-14 19:55:56 +0200
commit122ecb23fc35806b48836772423581cf66a2ee59 (patch)
tree1cdf7fd0c897abab30ec0fef84a1fc9f1213a674 /docs
parent6071376c03d34081f8e24c0e1b9093e9a7a1a1c4 (diff)
downloadvyos-documentation-122ecb23fc35806b48836772423581cf66a2ee59.tar.gz
vyos-documentation-122ecb23fc35806b48836772423581cf66a2ee59.zip
firewall: T2199: adjust to new 1.4 CLI syntax
"set zone-policy zone <name>" moved to "set firewall zone <name>".
Diffstat (limited to 'docs')
-rw-r--r--docs/_include/interface-ip.txt2
-rw-r--r--docs/configexamples/autotest/tunnelbroker/tunnelbroker.rst9
-rw-r--r--docs/configexamples/zone-policy.rst26
-rw-r--r--docs/configuration/firewall/general.rst888
-rw-r--r--docs/configuration/firewall/index.rst953
-rw-r--r--docs/configuration/firewall/zone.rst91
-rw-r--r--docs/configuration/index.rst1
-rw-r--r--docs/configuration/zonepolicy/index.rst71
-rw-r--r--docs/documentation.rst6
9 files changed, 1007 insertions, 1040 deletions
diff --git a/docs/_include/interface-ip.txt b/docs/_include/interface-ip.txt
index 4164985b..6359aceb 100644
--- a/docs/_include/interface-ip.txt
+++ b/docs/_include/interface-ip.txt
@@ -12,7 +12,7 @@
.. hint:: MSS value = MTU - 20 (IP header) - 20 (TCP header), resulting in
1452 bytes on a 1492 byte MTU.
- Instead of a numerical MSS value `clamp-mss-to-pmtu` can be used to
+ Instead of a numerical MSS value `clamp-mss-to-pmtu` can be used to
automatically set the proper value.
.. cfgcmd:: set interfaces {{ var0 }} <interface> {{ var2 }} {{ var3 }}
diff --git a/docs/configexamples/autotest/tunnelbroker/tunnelbroker.rst b/docs/configexamples/autotest/tunnelbroker/tunnelbroker.rst
index b7621113..80076a0a 100644
--- a/docs/configexamples/autotest/tunnelbroker/tunnelbroker.rst
+++ b/docs/configexamples/autotest/tunnelbroker/tunnelbroker.rst
@@ -65,7 +65,7 @@ Now you should be able to ping a public IPv6 Address
64 bytes from 2001:470:20::2: icmp_seq=2 ttl=64 time=30.5 ms
64 bytes from 2001:470:20::2: icmp_seq=3 ttl=64 time=30.8 ms
64 bytes from 2001:470:20::2: icmp_seq=4 ttl=64 time=90.5 ms
-
+
--- 2001:470:20::2 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 30.519/45.797/90.546/25.837 ms
@@ -89,7 +89,7 @@ You should now be able to ping something by IPv6 DNS name:
64 bytes from tunnelbroker.net (2001:470:0:63::2): icmp_seq=2 ttl=48 time=234 ms
64 bytes from tunnelbroker.net (2001:470:0:63::2): icmp_seq=3 ttl=48 time=182 ms
64 bytes from tunnelbroker.net (2001:470:0:63::2): icmp_seq=4 ttl=48 time=183 ms
-
+
--- tunnelbroker.net ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 182.224/195.335/233.869/22.248 ms
@@ -152,7 +152,7 @@ Now the Client is able to ping a public IPv6 address
64 bytes from 2001:470:20::2: icmp_seq=2 ttl=63 time=31.3 ms
64 bytes from 2001:470:20::2: icmp_seq=3 ttl=63 time=31.7 ms
64 bytes from 2001:470:20::2: icmp_seq=4 ttl=63 time=104 ms
-
+
--- 2001:470:20::2 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 31.331/56.908/104.282/29.764 ms
@@ -204,5 +204,4 @@ instead of `set firewall name NAME`, you would use `set firewall ipv6-name
NAME`.
Similarly, to attach the firewall, you would use `set interfaces ethernet eth0
-firewall in ipv6-name` or `set zone-policy zone LOCAL from WAN firewall
-ipv6-name`. \ No newline at end of file
+firewall in ipv6-name` or `set firewall zone LOCAL from WAN firewall ipv6-name`. \ No newline at end of file
diff --git a/docs/configexamples/zone-policy.rst b/docs/configexamples/zone-policy.rst
index 7d512797..90de8b24 100644
--- a/docs/configexamples/zone-policy.rst
+++ b/docs/configexamples/zone-policy.rst
@@ -5,6 +5,10 @@
Zone-Policy example
-------------------
+.. 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>``.
+
Native IPv4 and IPv6
^^^^^^^^^^^^^^^^^^^^
@@ -171,14 +175,14 @@ the source/destination address is not explicit.
.. code-block:: none
- WAN – DMZ:192.168.200.200 – tcp/80
- WAN – DMZ:192.168.200.200 – tcp/443
- WAN – DMZ:192.168.200.200 – tcp/25
- WAN – DMZ:192.168.200.200 – tcp/53
- WAN – DMZ:2001:0DB8:0:BBBB::200 – tcp/80
- WAN – DMZ:2001:0DB8:0:BBBB::200 – tcp/443
- WAN – DMZ:2001:0DB8:0:BBBB::200 – tcp/25
- WAN – DMZ:2001:0DB8:0:BBBB::200 – tcp/53
+ WAN - DMZ:192.168.200.200 - tcp/80
+ WAN - DMZ:192.168.200.200 - tcp/443
+ WAN - DMZ:192.168.200.200 - tcp/25
+ WAN - DMZ:192.168.200.200 - tcp/53
+ WAN - DMZ:2001:0DB8:0:BBBB::200 - tcp/80
+ WAN - DMZ:2001:0DB8:0:BBBB::200 - tcp/443
+ WAN - DMZ:2001:0DB8:0:BBBB::200 - tcp/25
+ WAN - DMZ:2001:0DB8:0:BBBB::200 - tcp/53
DMZ - Local - tcp/53
DMZ - Local - tcp/123
@@ -345,8 +349,8 @@ Start by setting the interface and default action for each zone.
.. code-block:: none
- set zone-policy zone dmz default-action drop
- set zone-policy zone dmz interface eth0.30
+ set firewall zone dmz default-action drop
+ set firewall zone dmz interface eth0.30
In this case, we are setting the v6 ruleset that represents traffic
sourced from the LAN, destined for the DMZ. Because the zone-policy
@@ -355,7 +359,7 @@ it backwards.
.. code-block:: none
- set zone-policy zone dmz from lan firewall ipv6-name lan-dmz-6
+ set firewall zone dmz from lan firewall ipv6-name lan-dmz-6
DMZ-LAN policy is LAN-DMZ. You can get a rhythm to it when you build out
a bunch at one time.
diff --git a/docs/configuration/firewall/general.rst b/docs/configuration/firewall/general.rst
new file mode 100644
index 00000000..cfd7a8ce
--- /dev/null
+++ b/docs/configuration/firewall/general.rst
@@ -0,0 +1,888 @@
+:lastproofread: 2021-06-29
+
+.. _firewall:
+
+########
+Firewall
+########
+
+********
+Overview
+********
+
+VyOS makes use of Linux `netfilter <https://netfilter.org/>`_ for packet
+filtering.
+
+The firewall supports the creation of groups for ports, addresses, and
+networks (implemented using netfilter ipset) and the option of interface
+or zone based firewall policy.
+
+.. note:: **Important note on usage of terms:**
+ The firewall makes use of the terms `in`, `out`, and `local`
+ for firewall policy. Users experienced with netfilter often confuse
+ `in` to be a reference to the `INPUT` chain, and `out` the `OUTPUT`
+ chain from netfilter. This is not the case. These instead indicate
+ the use of the `FORWARD` chain and either the input or output
+ interface. The `INPUT` chain, which is used for local traffic to the
+ OS, is a reference to as `local` with respect to its input interface.
+
+
+***************
+Global settings
+***************
+
+Some firewall settings are global and have an affect on the whole system.
+
+.. cfgcmd:: set firewall 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 all-ping** affects only to LOCAL and it always
+ behaves in the most restrictive way
+
+ .. code-block:: none
+
+ set firewall 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 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 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 ip-src-route [enable | disable]
+.. cfgcmd:: set firewall 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 receive-redirects [enable | disable]
+.. cfgcmd:: set firewall 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 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 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 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 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 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 state-policy established action [accept | drop |
+ reject]
+
+.. cfgcmd:: set firewall state-policy established log enable
+
+ Set the global setting for an established connection.
+
+.. cfgcmd:: set firewall state-policy invalid action [accept | drop | reject]
+
+.. cfgcmd:: set firewall state-policy invalid log enable
+
+ Set the global setting for invalid packets.
+
+.. cfgcmd:: set firewall state-policy related action [accept | drop | reject]
+
+.. cfgcmd:: set firewall state-policy related log enable
+
+ Set the global setting for related connections.
+
+
+******
+Groups
+******
+
+Firewall groups represent collections of IP addresses, networks, or
+ports. Once created, a group can be referenced by firewall rules as
+either a source or destination. Members can be added or removed from a
+group without changes to, or the need to reload, individual firewall
+rules.
+
+Groups need to have unique names. Even though some contain IPv4
+addresses and others contain IPv6 addresses, they still need to have
+unique names, so you may want to append "-v4" or "-v6" to your group
+names.
+
+
+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 a IPv4 or IPv6 network 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.
+
+
+*********
+Rule-Sets
+*********
+
+A rule-set is a named collection of firewall rules that can be applied
+to an interface or a zone. Each rule is numbered, has an action to apply
+if the rule is matched, and the ability to specify the criteria to
+match. Data packets go through the rules from 1 - 999999, at the first match
+the action of the rule will be executed.
+
+.. cfgcmd:: set firewall name <name> description <text>
+.. cfgcmd:: set firewall ipv6-name <name> description <text>
+
+ Provide a rule-set description.
+
+.. cfgcmd:: set firewall name <name> default-action [drop | reject | accept]
+.. cfgcmd:: set firewall ipv6-name <name> default-action [drop | reject |
+ accept]
+
+ This set the default action of the rule-set if no rule matched a packet
+ criteria.
+
+.. cfgcmd:: set firewall name <name> enable-default-log
+.. cfgcmd:: set firewall ipv6-name <name> enable-default-log
+
+ Use this command to enable the logging of the default action.
+
+.. cfgcmd:: set firewall name <name> rule <1-999999> action [drop | reject |
+ accept]
+.. cfgcmd:: set firewall ipv6-name <name> rule <1-999999> action [drop |
+ reject | accept]
+
+ This required setting defines the action of the current rule.
+
+.. cfgcmd:: set firewall name <name> rule <1-999999> description <text>
+.. cfgcmd:: set firewall ipv6-name <name> rule <1-999999> description <text>
+
+ Provide a description for each rule.
+
+.. cfgcmd:: set firewall name <name> rule <1-999999> log [disable | enable]
+.. cfgcmd:: set firewall ipv6-name <name> rule <1-999999> log [disable |
+ enable]
+
+ Enable or disable logging for the matched packet.
+
+.. cfgcmd:: set firewall name <name> rule <1-999999> log-level [emerg |
+ alert | crit | err | warn | notice | info | debug]
+.. cfgcmd:: set firewall ipv6-name <name> rule <1-999999> log-level [emerg |
+ alert | crit | err | warn | notice | info | debug]
+
+ Define log-level. Only applicable if rule log is enable.
+
+.. cfgcmd:: set firewall name <name> rule <1-999999> disable
+.. cfgcmd:: set firewall ipv6-name <name> rule <1-999999> disable
+
+ If you want to disable a rule but let it in the configuration.
+
+Matching criteria
+=================
+
+There are a lot of matching criteria against which the package can be tested.
+
+.. cfgcmd:: set firewall name <name> 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 name <name> rule <1-999999> source address
+ [address | addressrange | CIDR]
+.. cfgcmd:: set firewall name <name> rule <1-999999> destination address
+ [address | addressrange | CIDR]
+.. cfgcmd:: set firewall ipv6-name <name> rule <1-999999> source address
+ [address | addressrange | CIDR]
+.. cfgcmd:: set firewall ipv6-name <name> rule <1-999999> destination address
+ [address | addressrange | CIDR]
+
+ This is similar to the network groups part, but here you are able to negate
+ the matching addresses.
+
+ .. code-block:: none
+
+ set firewall name WAN-IN-v4 rule 100 source address 192.0.2.10-192.0.2.11
+ # with a '!' the rule match everything except the specified subnet
+ set firewall name WAN-IN-v4 rule 101 source address !203.0.113.0/24
+ set firewall ipv6-name WAN-IN-v6 rule 100 source address 2001:db8::202
+
+.. cfgcmd:: set firewall name <name> rule <1-999999> source geoip country-code
+ <country>
+.. cfgcmd:: set firewall name <name> rule <1-999999> source geoip inverse-match
+.. cfgcmd:: set firewall ipv6-name <name> rule <1-999999> source geoip
+ country-code <country>
+.. cfgcmd:: set firewall ipv6-name <name> rule <1-999999> source geoip
+ inverse-match
+.. cfgcmd:: set firewall name <name> rule <1-999999> destination geoip
+ country-code <country>
+.. cfgcmd:: set firewall name <name> rule <1-999999> destination geoip
+ inverse-match
+.. cfgcmd:: set firewall ipv6-name <name> rule <1-999999> destination geoip
+ country-code <country>
+.. 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 name <name> 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 name LAN-IN-v4 rule 100 source mac-address 00:53:00:11:22:33
+ set firewall name LAN-IN-v4 rule 101 source mac-address !00:53:00:aa:12:34
+
+.. cfgcmd:: set firewall name <name> rule <1-999999> source port
+ [1-65535 | portname | start-end]
+.. cfgcmd:: set firewall name <name> rule <1-999999> destination 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-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 name WAN-IN-v4 rule 10 source port '22'
+ set firewall name WAN-IN-v4 rule 11 source port '!http'
+ set firewall name WAN-IN-v4 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-name WAN-IN-v6 rule 10 source port '!22,https,3333-3338'
+
+.. cfgcmd:: set firewall name <name> rule <1-999999> source group
+ address-group <name | !name>
+.. cfgcmd:: set firewall name <name> rule <1-999999> destination group
+ address-group <name | !name>
+.. cfgcmd:: set firewall ipv6-name <name> rule <1-999999> source 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 name <name> rule <1-999999> source group
+ network-group <name | !name>
+.. cfgcmd:: set firewall name <name> rule <1-999999> destination group
+ network-group <name | !name>
+.. cfgcmd:: set firewall ipv6-name <name> rule <1-999999> source 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 name <name> rule <1-999999> source group
+ port-group <name | !name>
+.. cfgcmd:: set firewall name <name> rule <1-999999> destination group
+ port-group <name | !name>
+.. cfgcmd:: set firewall ipv6-name <name> rule <1-999999> source 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 name <name> rule <1-999999> source group
+ domain-group <name | !name>
+.. cfgcmd:: set firewall name <name> rule <1-999999> destination group
+ domain-group <name | !name>
+.. cfgcmd:: set firewall ipv6-name <name> rule <1-999999> source 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 name <name> rule <1-999999> source group
+ mac-group <name | !name>
+.. cfgcmd:: set firewall name <name> rule <1-999999> destination group
+ mac-group <name | !name>
+.. cfgcmd:: set firewall ipv6-name <name> rule <1-999999> source 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 name <name> 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 name <name> rule <1-999999> icmp [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 name <name> rule <1-999999> icmp type-name <text>
+.. cfgcmd:: set firewall ipv6-name <name> rule <1-999999> icmpv6 type-name
+ <text>
+
+ Match based on icmp|icmpv6 type-name criteria. Use tab for information
+ about what **type-name** criteria are supported.
+
+.. cfgcmd:: set firewall name <name> 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 name <name> 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 name <name> 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 name <name> rule <1-999999> packet-length
+ <text>
+.. cfgcmd:: set firewall ipv6-name <name> rule <1-999999> packet-length
+ <text>
+.. cfgcmd:: set firewall name <name> 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 name <name> 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 name WAN-IN-v4 rule 10 protocol tcp_udp
+ set firewall name WAN-IN-v4 rule 11 protocol !tcp_udp
+ set firewall ipv6-name WAN-IN-v6 rule 10 protocol tcp
+
+.. cfgcmd:: set firewall name <name> rule <1-999999> recent count <1-255>
+.. cfgcmd:: set firewall ipv6-name <name> rule <1-999999> recent count <1-255>
+.. cfgcmd:: set firewall name <name> 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 name <name> rule <1-999999> tcp flags <text>
+.. cfgcmd:: set firewall ipv6-name <name> rule <1-999999> tcp flags <text>
+
+ Allowed values fpr TCP flags: ``SYN``, ``ACK``, ``FIN``, ``RST``, ``URG``,
+ ``PSH``, ``ALL`` When specifying more than one flag, flags should be comma
+ separated. The ``!`` negate the selected protocol.
+
+ .. code-block:: none
+
+ set firewall name WAN-IN-v4 rule 10 tcp flags 'ACK'
+ set firewall name WAN-IN-v4 rule 12 tcp flags 'SYN'
+ set firewall name WAN-IN-v4 rule 13 tcp flags 'SYN,!ACK,!FIN,!RST'
+
+.. cfgcmd:: set firewall name <name> rule <1-999999> state [established |
+ invalid | new | related] [enable | disable]
+.. cfgcmd:: set firewall ipv6-name <name> rule <1-999999> state [established |
+ invalid | new | related] [enable | disable]
+
+ Match against the state of a packet.
+
+.. cfgcmd:: set firewall name <name> rule <1-999999> time startdate <text>
+.. cfgcmd:: set firewall ipv6-name <name> rule <1-999999> time startdate <text>
+.. cfgcmd:: set firewall name <name> rule <1-999999> time starttime <text>
+.. cfgcmd:: set firewall ipv6-name <name> rule <1-999999> time starttime <text>
+.. cfgcmd:: set firewall name <name> rule <1-999999> time stopdate <text>
+.. cfgcmd:: set firewall ipv6-name <name> rule <1-999999> time stopdate <text>
+.. cfgcmd:: set firewall name <name> rule <1-999999> time stoptime <text>
+.. cfgcmd:: set firewall ipv6-name <name> rule <1-999999> time stoptime <text>
+.. cfgcmd:: set firewall name <name> 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 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 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 name <name> rule <1-999999> recent count <1-255>
+.. cfgcmd:: set firewall ipv6-name <name> rule <1-999999> recent count <1-255>
+.. cfgcmd:: set firewall name <name> 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.
+
+***********************************
+Applying a Rule-Set to an Interface
+***********************************
+
+A Rule-Set can be applied to every interface:
+
+* ``in``: Ruleset for forwarded packets on an inbound interface
+* ``out``: Ruleset for forwarded packets on an outbound interface
+* ``local``: Ruleset for packets destined for this router
+
+.. cfgcmd:: set interface ethernet <ethN> firewall [in | out | local]
+ [name | ipv6-name] <rule-set>
+
+ Here are some examples for applying a rule-set to an interface
+
+ .. code-block:: none
+
+ set interface ethernet eth1 vif 100 firewall in name LANv4-IN
+ set interface ethernet eth1 vif 100 firewall out name LANv4-OUT
+ set interface bonding bond0 firewall in name LANv4-IN
+ set interfaces openvpn vtun1 firewall in name Lanv4-IN
+
+ .. note::
+ As you can see in the example here, you can assign the same rule-set to
+ several interfaces. An interface can only have one rule-set per chain.
+
+***********************
+Operation-mode Firewall
+***********************
+
+Rule-set overview
+=================
+
+.. opcmd:: show firewall
+
+ This will show you a basic firewall overview
+
+ .. code-block:: none
+
+ vyos@vyos:~$ show firewall
+
+ ------------------------
+ Firewall Global Settings
+ ------------------------
+
+ Firewall state-policy for all IPv4 and Ipv6 traffic
+
+ state action log
+ ----- ------ ---
+ invalid accept disabled
+ established accept disabled
+ related accept disabled
+
+ -----------------------------
+ Rulesets Information
+ -----------------------------
+ --------------------------------------------------------------------------
+ IPv4 Firewall "DMZv4-1-IN":
+
+ Active on (eth0,IN)
+
+ rule action proto packets bytes
+ ---- ------ ----- ------- -----
+ 10 accept icmp 0 0
+ condition - saddr 10.1.0.0/24 daddr 0.0.0.0/0 LOG enabled
+
+ 10000 drop all 0 0
+ condition - saddr 0.0.0.0/0 daddr 0.0.0.0/0 LOG enabled
+
+ --------------------------------------------------------------------------
+ IPv4 Firewall "DMZv4-1-OUT":
+
+ Active on (eth0,OUT)
+
+ rule action proto packets bytes
+ ---- ------ ----- ------- -----
+ 10 accept tcp_udp 1 60
+ condition - saddr 0.0.0.0/0 daddr 0.0.0.0/0 match-DST-PORT-GROUP DMZ-Ports /*
+ DMZv4-1-OUT-10 */LOG enabled
+
+ 11 accept icmp 1 84
+ condition - saddr 0.0.0.0/0 daddr 0.0.0.0/0 /* DMZv4-1-OUT-11 */LOG enabled
+
+ 10000 drop all 6 360
+ condition - saddr 0.0.0.0/0 daddr 0.0.0.0/0 LOG enabled
+
+ --------------------------------------------------------------------------
+ IPv4 Firewall "LANv4-IN":
+
+ Inactive - Not applied to any interfaces or zones.
+
+ rule action proto packets bytes
+ ---- ------ ----- ------- -----
+ 10 accept all 0 0
+ condition - saddr 0.0.0.0/0 daddr 0.0.0.0/0 /* LANv4-IN-10 */
+
+ 10000 drop all 0 0
+ condition - saddr 0.0.0.0/0 daddr 0.0.0.0/0
+
+.. opcmd:: show firewall summary
+
+ This will show you a summary of rule-sets and groups
+
+ .. code-block:: none
+
+ vyos@vyos:~$ show firewall summary
+
+ ------------------------
+ Firewall Global Settings
+ ------------------------
+
+ Firewall state-policy for all IPv4 and Ipv6 traffic
+
+ state action log
+ ----- ------ ---
+ invalid accept disabled
+ related accept disabled
+ established accept disabled
+
+ ------------------------
+ Firewall Rulesets
+ ------------------------
+
+ IPv4 name:
+
+ Rule-set name Description References
+ ------------- ----------- ----------
+ DMZv4-1-OUT (eth0,OUT)
+ DMZv4-1-IN (eth0,IN)
+
+ ------------------------
+ Firewall Groups
+ ------------------------
+
+ Port Groups:
+
+ Group name Description References
+ ---------- ----------- ----------
+ DMZ-Ports DMZv4-1-OUT-10-destination
+
+ Network Groups:
+
+ Group name Description References
+ ---------- ----------- ----------
+ LANv4 LANv4-IN-10-source,
+ DMZv4-1-OUT-10-source,
+ DMZv4-1-OUT-11-source
+
+.. opcmd:: show firewall statistics
+
+ This will show you a statistic of all rule-sets since the last boot.
+
+.. opcmd:: show firewall [name | ipv6name] <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 DMZ-Ports
+ Name : DMZ-Ports
+ Type : port
+ References : none
+ Members :
+ 80
+ 443
+ 8080
+ 8443
+
+ vyos@vyos:~$ show firewall group LANv4
+ Name : LANv4
+ Type : network
+ References : LANv4-IN-10-source
+ Members :
+ 10.10.0.0/16
+
+.. opcmd:: show firewall [name | ipv6name] <name>
+
+ This command will give an overview of a single rule-set.
+
+.. opcmd:: show firewall [name | ipv6name] <name> statistics
+
+ This will show you a rule-set statistic since the last boot.
+
+.. opcmd:: show firewall [name | ipv6name] <name> rule <1-999999>
+
+ This command will give an overview of a rule in a single rule-set.
+
+
+Zone-Policy Overview
+====================
+
+.. opcmd:: show zone-policy zone <name>
+
+ Use this command to get an overview of a zone.
+
+ .. code-block:: none
+
+ vyos@vyos:~$ show zone-policy zone DMZ
+ -------------------
+ Name: DMZ
+
+ Interfaces: eth0 eth1
+
+ From Zone:
+ name firewall
+ ---- --------
+ LAN DMZv4-1-OUT
+
+
+Show Firewall log
+=================
+
+.. opcmd:: show log firewall [name | ipv6name] <name>
+
+ Show the logs of a specific Rule-Set.
+
+.. note::
+ At the moment it not possible to look at the whole firewall log with VyOS
+ operational commands. All logs will save to ``/var/logs/messages``.
+ For example: ``grep '10.10.0.10' /var/log/messages``
+
+
+
+Example Partial Config
+======================
+
+.. code-block:: none
+
+ firewall {
+ all-ping enable
+ broadcast-ping disable
+ config-trap disable
+ 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
+ }
+ }
+ name FROM-INTERNET {
+ default-action accept
+ description "From the Internet"
+ rule 10 {
+ action accept
+ description "Authorized Networks"
+ protocol all
+ source {
+ group {
+ network-group GOOD-NETWORKS
+ }
+ }
+ }
+ rule 11 {
+ action drop
+ description "Bad Networks"
+ protocol all
+ source {
+ group {
+ network-group BAD-NETWORKS
+ }
+ }
+ }
+ rule 30 {
+ action drop
+ description "BAD PORTS"
+ destination {
+ group {
+ port-group BAD-PORTS
+ }
+ }
+ log enable
+ protocol all
+ }
+ }
+ }
+ interfaces {
+ ethernet eth1 {
+ address dhcp
+ description OUTSIDE
+ duplex auto
+ firewall {
+ in {
+ name FROM-INTERNET
+ }
+ }
+ }
+ }
+
+
+Update geoip database
+=====================
+
+.. opcmd:: update geoip
+
+ Command used to update GeoIP database and firewall sets.
diff --git a/docs/configuration/firewall/index.rst b/docs/configuration/firewall/index.rst
index 56477dfc..dfafa606 100644
--- a/docs/configuration/firewall/index.rst
+++ b/docs/configuration/firewall/index.rst
@@ -1,953 +1,10 @@
-:lastproofread: 2021-06-29
-
-.. _firewall:
-
########
Firewall
########
-********
-Overview
-********
-
-VyOS makes use of Linux `netfilter <https://netfilter.org/>`_ for packet
-filtering.
-
-The firewall supports the creation of groups for ports, addresses, and
-networks (implemented using netfilter ipset) and the option of interface
-or zone based firewall policy.
-
-.. note:: **Important note on usage of terms:**
- The firewall makes use of the terms `in`, `out`, and `local`
- for firewall policy. Users experienced with netfilter often confuse
- `in` to be a reference to the `INPUT` chain, and `out` the `OUTPUT`
- chain from netfilter. This is not the case. These instead indicate
- the use of the `FORWARD` chain and either the input or output
- interface. The `INPUT` chain, which is used for local traffic to the
- OS, is a reference to as `local` with respect to its input interface.
-
-
-***************
-Global settings
-***************
-
-Some firewall settings are global and have an affect on the whole system.
-
-.. cfgcmd:: set firewall 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 all-ping** affects only to LOCAL and it always
- behaves in the most restrictive way
-
- .. code-block:: none
-
- set firewall 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 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 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 ip-src-route [enable | disable]
-.. cfgcmd:: set firewall 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 receive-redirects [enable | disable]
-.. cfgcmd:: set firewall 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 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 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 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 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 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 state-policy established action [accept | drop |
- reject]
-
-.. cfgcmd:: set firewall state-policy established log enable
-
- Set the global setting for an established connection.
-
-.. cfgcmd:: set firewall state-policy invalid action [accept | drop | reject]
-
-.. cfgcmd:: set firewall state-policy invalid log enable
-
- Set the global setting for invalid packets.
-
-.. cfgcmd:: set firewall state-policy related action [accept | drop | reject]
-
-.. cfgcmd:: set firewall state-policy related log enable
-
- Set the global setting for related connections.
-
-
-******
-Groups
-******
-
-Firewall groups represent collections of IP addresses, networks, or
-ports. Once created, a group can be referenced by firewall rules as
-either a source or destination. Members can be added or removed from a
-group without changes to, or the need to reload, individual firewall
-rules.
-
-Groups need to have unique names. Even though some contain IPv4
-addresses and others contain IPv6 addresses, they still need to have
-unique names, so you may want to append "-v4" or "-v6" to your group
-names.
-
-
-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 a IPv4 or IPv6 network 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.
-
-
-*********
-Rule-Sets
-*********
-
-A rule-set is a named collection of firewall rules that can be applied
-to an interface or a zone. Each rule is numbered, has an action to apply
-if the rule is matched, and the ability to specify the criteria to
-match. Data packets go through the rules from 1 - 999999, at the first match
-the action of the rule will be executed.
-
-.. cfgcmd:: set firewall name <name> description <text>
-.. cfgcmd:: set firewall ipv6-name <name> description <text>
-
- Provide a rule-set description.
-
-.. cfgcmd:: set firewall name <name> default-action [drop | reject | accept]
-.. cfgcmd:: set firewall ipv6-name <name> default-action [drop | reject |
- accept]
-
- This set the default action of the rule-set if no rule matched a packet
- criteria.
-
-.. cfgcmd:: set firewall name <name> enable-default-log
-.. cfgcmd:: set firewall ipv6-name <name> enable-default-log
-
- Use this command to enable the logging of the default action.
-
-.. cfgcmd:: set firewall name <name> rule <1-999999> action [drop | reject |
- accept]
-.. cfgcmd:: set firewall ipv6-name <name> rule <1-999999> action [drop |
- reject | accept]
-
- This required setting defines the action of the current rule.
-
-.. cfgcmd:: set firewall name <name> rule <1-999999> description <text>
-.. cfgcmd:: set firewall ipv6-name <name> rule <1-999999> description <text>
-
- Provide a description for each rule.
-
-.. cfgcmd:: set firewall name <name> rule <1-999999> log [disable | enable]
-.. cfgcmd:: set firewall ipv6-name <name> rule <1-999999> log [disable |
- enable]
-
- Enable or disable logging for the matched packet.
-
-.. cfgcmd:: set firewall name <name> rule <1-999999> log-level [emerg |
- alert | crit | err | warn | notice | info | debug]
-.. cfgcmd:: set firewall ipv6-name <name> rule <1-999999> log-level [emerg |
- alert | crit | err | warn | notice | info | debug]
-
- Define log-level. Only applicable if rule log is enable.
-
-.. cfgcmd:: set firewall name <name> rule <1-999999> disable
-.. cfgcmd:: set firewall ipv6-name <name> rule <1-999999> disable
-
- If you want to disable a rule but let it in the configuration.
-
-Matching criteria
-=================
-
-There are a lot of matching criteria against which the package can be tested.
-
-.. cfgcmd:: set firewall name <name> 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 name <name> rule <1-999999> source address
- [address | addressrange | CIDR]
-.. cfgcmd:: set firewall name <name> rule <1-999999> destination address
- [address | addressrange | CIDR]
-.. cfgcmd:: set firewall ipv6-name <name> rule <1-999999> source address
- [address | addressrange | CIDR]
-.. cfgcmd:: set firewall ipv6-name <name> rule <1-999999> destination address
- [address | addressrange | CIDR]
-
- This is similar to the network groups part, but here you are able to negate
- the matching addresses.
-
- .. code-block:: none
-
- set firewall name WAN-IN-v4 rule 100 source address 192.0.2.10-192.0.2.11
- # with a '!' the rule match everything except the specified subnet
- set firewall name WAN-IN-v4 rule 101 source address !203.0.113.0/24
- set firewall ipv6-name WAN-IN-v6 rule 100 source address 2001:db8::202
-
-.. cfgcmd:: set firewall name <name> rule <1-999999> source geoip country-code
- <country>
-.. cfgcmd:: set firewall name <name> rule <1-999999> source geoip inverse-match
-.. cfgcmd:: set firewall ipv6-name <name> rule <1-999999> source geoip
- country-code <country>
-.. cfgcmd:: set firewall ipv6-name <name> rule <1-999999> source geoip
- inverse-match
-.. cfgcmd:: set firewall name <name> rule <1-999999> destination geoip
- country-code <country>
-.. cfgcmd:: set firewall name <name> rule <1-999999> destination geoip
- inverse-match
-.. cfgcmd:: set firewall ipv6-name <name> rule <1-999999> destination geoip
- country-code <country>
-.. 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 name <name> 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 name LAN-IN-v4 rule 100 source mac-address 00:53:00:11:22:33
- set firewall name LAN-IN-v4 rule 101 source mac-address !00:53:00:aa:12:34
-
-.. cfgcmd:: set firewall name <name> rule <1-999999> source port
- [1-65535 | portname | start-end]
-.. cfgcmd:: set firewall name <name> rule <1-999999> destination 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-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 name WAN-IN-v4 rule 10 source port '22'
- set firewall name WAN-IN-v4 rule 11 source port '!http'
- set firewall name WAN-IN-v4 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-name WAN-IN-v6 rule 10 source port '!22,https,3333-3338'
-
-.. cfgcmd:: set firewall name <name> rule <1-999999> source group
- address-group <name | !name>
-.. cfgcmd:: set firewall name <name> rule <1-999999> destination group
- address-group <name | !name>
-.. cfgcmd:: set firewall ipv6-name <name> rule <1-999999> source 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 name <name> rule <1-999999> source group
- network-group <name | !name>
-.. cfgcmd:: set firewall name <name> rule <1-999999> destination group
- network-group <name | !name>
-.. cfgcmd:: set firewall ipv6-name <name> rule <1-999999> source 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 name <name> rule <1-999999> source group
- port-group <name | !name>
-.. cfgcmd:: set firewall name <name> rule <1-999999> destination group
- port-group <name | !name>
-.. cfgcmd:: set firewall ipv6-name <name> rule <1-999999> source 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 name <name> rule <1-999999> source group
- domain-group <name | !name>
-.. cfgcmd:: set firewall name <name> rule <1-999999> destination group
- domain-group <name | !name>
-.. cfgcmd:: set firewall ipv6-name <name> rule <1-999999> source 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 name <name> rule <1-999999> source group
- mac-group <name | !name>
-.. cfgcmd:: set firewall name <name> rule <1-999999> destination group
- mac-group <name | !name>
-.. cfgcmd:: set firewall ipv6-name <name> rule <1-999999> source 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 name <name> 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 name <name> rule <1-999999> icmp [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 name <name> rule <1-999999> icmp type-name <text>
-.. cfgcmd:: set firewall ipv6-name <name> rule <1-999999> icmpv6 type-name
- <text>
-
- Match based on icmp|icmpv6 type-name criteria. Use tab for information
- about what **type-name** criteria are supported.
-
-.. cfgcmd:: set firewall name <name> 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 name <name> 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 name <name> 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 name <name> rule <1-999999> packet-length
- <text>
-.. cfgcmd:: set firewall ipv6-name <name> rule <1-999999> packet-length
- <text>
-.. cfgcmd:: set firewall name <name> 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 name <name> 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 name WAN-IN-v4 rule 10 protocol tcp_udp
- set firewall name WAN-IN-v4 rule 11 protocol !tcp_udp
- set firewall ipv6-name WAN-IN-v6 rule 10 protocol tcp
-
-.. cfgcmd:: set firewall name <name> rule <1-999999> recent count <1-255>
-.. cfgcmd:: set firewall ipv6-name <name> rule <1-999999> recent count <1-255>
-.. cfgcmd:: set firewall name <name> 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 name <name> rule <1-999999> tcp flags <text>
-.. cfgcmd:: set firewall ipv6-name <name> rule <1-999999> tcp flags <text>
-
- Allowed values fpr TCP flags: ``SYN``, ``ACK``, ``FIN``, ``RST``, ``URG``,
- ``PSH``, ``ALL`` When specifying more than one flag, flags should be comma
- separated. The ``!`` negate the selected protocol.
-
- .. code-block:: none
-
- set firewall name WAN-IN-v4 rule 10 tcp flags 'ACK'
- set firewall name WAN-IN-v4 rule 12 tcp flags 'SYN'
- set firewall name WAN-IN-v4 rule 13 tcp flags 'SYN,!ACK,!FIN,!RST'
-
-.. cfgcmd:: set firewall name <name> rule <1-999999> state [established |
- invalid | new | related] [enable | disable]
-.. cfgcmd:: set firewall ipv6-name <name> rule <1-999999> state [established |
- invalid | new | related] [enable | disable]
-
- Match against the state of a packet.
-
-.. cfgcmd:: set firewall name <name> rule <1-999999> time startdate <text>
-.. cfgcmd:: set firewall ipv6-name <name> rule <1-999999> time startdate <text>
-.. cfgcmd:: set firewall name <name> rule <1-999999> time starttime <text>
-.. cfgcmd:: set firewall ipv6-name <name> rule <1-999999> time starttime <text>
-.. cfgcmd:: set firewall name <name> rule <1-999999> time stopdate <text>
-.. cfgcmd:: set firewall ipv6-name <name> rule <1-999999> time stopdate <text>
-.. cfgcmd:: set firewall name <name> rule <1-999999> time stoptime <text>
-.. cfgcmd:: set firewall ipv6-name <name> rule <1-999999> time stoptime <text>
-.. cfgcmd:: set firewall name <name> 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 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 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 name <name> rule <1-999999> recent count <1-255>
-.. cfgcmd:: set firewall ipv6-name <name> rule <1-999999> recent count <1-255>
-.. cfgcmd:: set firewall name <name> 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.
-
-***********************************
-Applying a Rule-Set to an Interface
-***********************************
-
-A Rule-Set can be applied to every interface:
-
-* ``in``: Ruleset for forwarded packets on an inbound interface
-* ``out``: Ruleset for forwarded packets on an outbound interface
-* ``local``: Ruleset for packets destined for this router
-
-.. cfgcmd:: set interface ethernet <ethN> firewall [in | out | local]
- [name | ipv6-name] <rule-set>
-
- Here are some examples for applying a rule-set to an interface
-
- .. code-block:: none
-
- set interface ethernet eth1 vif 100 firewall in name LANv4-IN
- set interface ethernet eth1 vif 100 firewall out name LANv4-OUT
- set interface bonding bond0 firewall in name LANv4-IN
- set interfaces openvpn vtun1 firewall in name Lanv4-IN
-
- .. note::
- As you can see in the example here, you can assign the same rule-set to
- several interfaces. An interface can only have one rule-set per chain.
-
-
-**************************
-Zone-based Firewall Policy
-**************************
-
-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.
-
-An 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 zone-policy zone <name> interface <interfacenames>
-
- Set interfaces to a zone. A zone can have multiple interfaces.
- But an interface can only be a member in one zone.
-
-.. cfgcmd:: set zone-policy 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 zone-policy zone <name> default-action [drop | reject]
-
- Change the default-action with this setting.
-
-.. cfgcmd:: set zone-policy 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 zone-policy zone <Destination Zone> from <Source Zone>
- firewall name <rule-set>
-
-.. cfgcmd:: set zone-policy zone <name> from <name> firewall name
- <rule-set>
-.. cfgcmd:: set zone-policy 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 zone-policy zone DMZ from LAN firewall name LANv4-to-DMZv4
- set zone-policy zone LAN from DMZ firewall name DMZv4-to-LANv4
-
-
-***********************
-Operation-mode Firewall
-***********************
-
-Rule-set overview
-=================
-
-.. opcmd:: show firewall
-
- This will show you a basic firewall overview
-
- .. code-block:: none
-
- vyos@vyos:~$ show firewall
-
- ------------------------
- Firewall Global Settings
- ------------------------
-
- Firewall state-policy for all IPv4 and Ipv6 traffic
-
- state action log
- ----- ------ ---
- invalid accept disabled
- established accept disabled
- related accept disabled
-
- -----------------------------
- Rulesets Information
- -----------------------------
- --------------------------------------------------------------------------
- IPv4 Firewall "DMZv4-1-IN":
-
- Active on (eth0,IN)
-
- rule action proto packets bytes
- ---- ------ ----- ------- -----
- 10 accept icmp 0 0
- condition - saddr 10.1.0.0/24 daddr 0.0.0.0/0 LOG enabled
-
- 10000 drop all 0 0
- condition - saddr 0.0.0.0/0 daddr 0.0.0.0/0 LOG enabled
-
- --------------------------------------------------------------------------
- IPv4 Firewall "DMZv4-1-OUT":
-
- Active on (eth0,OUT)
-
- rule action proto packets bytes
- ---- ------ ----- ------- -----
- 10 accept tcp_udp 1 60
- condition - saddr 0.0.0.0/0 daddr 0.0.0.0/0 match-DST-PORT-GROUP DMZ-Ports /*
- DMZv4-1-OUT-10 */LOG enabled
-
- 11 accept icmp 1 84
- condition - saddr 0.0.0.0/0 daddr 0.0.0.0/0 /* DMZv4-1-OUT-11 */LOG enabled
-
- 10000 drop all 6 360
- condition - saddr 0.0.0.0/0 daddr 0.0.0.0/0 LOG enabled
-
- --------------------------------------------------------------------------
- IPv4 Firewall "LANv4-IN":
-
- Inactive - Not applied to any interfaces or zones.
-
- rule action proto packets bytes
- ---- ------ ----- ------- -----
- 10 accept all 0 0
- condition - saddr 0.0.0.0/0 daddr 0.0.0.0/0 /* LANv4-IN-10 */
-
- 10000 drop all 0 0
- condition - saddr 0.0.0.0/0 daddr 0.0.0.0/0
-
-.. opcmd:: show firewall summary
-
- This will show you a summary of rule-sets and groups
-
- .. code-block:: none
-
- vyos@vyos:~$ show firewall summary
-
- ------------------------
- Firewall Global Settings
- ------------------------
-
- Firewall state-policy for all IPv4 and Ipv6 traffic
-
- state action log
- ----- ------ ---
- invalid accept disabled
- related accept disabled
- established accept disabled
-
- ------------------------
- Firewall Rulesets
- ------------------------
-
- IPv4 name:
-
- Rule-set name Description References
- ------------- ----------- ----------
- DMZv4-1-OUT (eth0,OUT)
- DMZv4-1-IN (eth0,IN)
-
- ------------------------
- Firewall Groups
- ------------------------
-
- Port Groups:
-
- Group name Description References
- ---------- ----------- ----------
- DMZ-Ports DMZv4-1-OUT-10-destination
-
- Network Groups:
-
- Group name Description References
- ---------- ----------- ----------
- LANv4 LANv4-IN-10-source,
- DMZv4-1-OUT-10-source,
- DMZv4-1-OUT-11-source
-
-.. opcmd:: show firewall statistics
-
- This will show you a statistic of all rule-sets since the last boot.
-
-.. opcmd:: show firewall [name | ipv6name] <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 DMZ-Ports
- Name : DMZ-Ports
- Type : port
- References : none
- Members :
- 80
- 443
- 8080
- 8443
-
- vyos@vyos:~$ show firewall group LANv4
- Name : LANv4
- Type : network
- References : LANv4-IN-10-source
- Members :
- 10.10.0.0/16
-
-.. opcmd:: show firewall [name | ipv6name] <name>
-
- This command will give an overview of a single rule-set.
-
-.. opcmd:: show firewall [name | ipv6name] <name> statistics
-
- This will show you a rule-set statistic since the last boot.
-
-.. opcmd:: show firewall [name | ipv6name] <name> rule <1-999999>
-
- This command will give an overview of a rule in a single rule-set.
-
-
-Zone-Policy Overview
-====================
-
-.. opcmd:: show zone-policy zone <name>
-
- Use this command to get an overview of a zone.
-
- .. code-block:: none
-
- vyos@vyos:~$ show zone-policy zone DMZ
- -------------------
- Name: DMZ
-
- Interfaces: eth0 eth1
-
- From Zone:
- name firewall
- ---- --------
- LAN DMZv4-1-OUT
-
-
-Show Firewall log
-=================
-
-.. opcmd:: show log firewall [name | ipv6name] <name>
-
- Show the logs of a specific Rule-Set.
-
-.. note::
- At the moment it not possible to look at the whole firewall log with VyOS
- operational commands. All logs will save to ``/var/logs/messages``.
- For example: ``grep '10.10.0.10' /var/log/messages``
-
-
-
-Example Partial Config
-======================
-
-.. code-block:: none
-
- firewall {
- all-ping enable
- broadcast-ping disable
- config-trap disable
- 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
- }
- }
- name FROM-INTERNET {
- default-action accept
- description "From the Internet"
- rule 10 {
- action accept
- description "Authorized Networks"
- protocol all
- source {
- group {
- network-group GOOD-NETWORKS
- }
- }
- }
- rule 11 {
- action drop
- description "Bad Networks"
- protocol all
- source {
- group {
- network-group BAD-NETWORKS
- }
- }
- }
- rule 30 {
- action drop
- description "BAD PORTS"
- destination {
- group {
- port-group BAD-PORTS
- }
- }
- log enable
- protocol all
- }
- }
- }
- interfaces {
- ethernet eth1 {
- address dhcp
- description OUTSIDE
- duplex auto
- firewall {
- in {
- name FROM-INTERNET
- }
- }
- }
- }
-
-
-Update geoip database
-=====================
-
-.. opcmd:: update geoip
+.. toctree::
+ :maxdepth: 1
+ :includehidden:
- Command used to update GeoIP database and firewall sets.
+ general
+ zone
diff --git a/docs/configuration/firewall/zone.rst b/docs/configuration/firewall/zone.rst
new file mode 100644
index 00000000..6ed3e9f1
--- /dev/null
+++ b/docs/configuration/firewall/zone.rst
@@ -0,0 +1,91 @@
+:lastproofread: 2022-09-14
+
+.. _firewall-zone:
+
+###################
+Zone Based Firewall
+###################
+
+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.
+
+An 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
+
diff --git a/docs/configuration/index.rst b/docs/configuration/index.rst
index 35b6fa5b..f607d4d7 100644
--- a/docs/configuration/index.rst
+++ b/docs/configuration/index.rst
@@ -22,4 +22,3 @@ The following structure respresent the cli structure.
trafficpolicy/index
vpn/index
vrf/index
- zonepolicy/index
diff --git a/docs/configuration/zonepolicy/index.rst b/docs/configuration/zonepolicy/index.rst
deleted file mode 100644
index 8fe18778..00000000
--- a/docs/configuration/zonepolicy/index.rst
+++ /dev/null
@@ -1,71 +0,0 @@
-
-###########
-Zone Policy
-###########
-
-
-.. toctree::
- :maxdepth: 1
- :includehidden:
-
-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.
-
-Example: LAN Network is given SSH access to VyOS box.
-
-Firewall rules:
-
-.. code-block:: none
-
- set firewall name lan-local default-action 'drop'
- set firewall name lan-local rule 1 action 'accept'
- set firewall name lan-local rule 1 state established 'enable'
- set firewall name lan-local rule 1 state related 'enable'
- set firewall name lan-local rule 2 action 'drop'
- set firewall name lan-local rule 2 state invalid 'enable'
- set firewall name lan-local rule 2 log enable
- set firewall name lan-local rule 100 action 'accept'
- set firewall name lan-local rule 100 destination port '22'
- set firewall name lan-local rule 100 log 'enable'
- set firewall name lan-local rule 100 protocol 'tcp'
- set firewall name local-lan default-action 'drop'
- set firewall name local-lan rule 1 action 'accept'
- set firewall name local-lan rule 1 state established 'enable'
- set firewall name local-lan rule 1 state related 'enable'
- set firewall name local-lan rule 2 action 'drop'
- set firewall name local-lan rule 2 state invalid 'enable'
- set firewall name local-lan rule 2 log enable
- set firewall name local-lan rule 100 action 'accept'
- set firewall name local-lan rule 100 destination address '192.168.0.0/24'
- set firewall name local-lan rule 100 log 'enable'
- set firewall name local-lan rule 100 protocol 'tcp'
-
-Zone-policy Config:
-
-.. code-block:: none
-
- set zone-policy zone lan default-action 'drop'
- set zone-policy zone lan description 'Local Area Network'
- set zone-policy zone lan interface 'eth2'
- set zone-policy zone lan from local firewall name 'lan-local'
- set zone-policy zone local default-action 'drop'
- set zone-policy zone local description 'system-defined zone'
- set zone-policy zone local from lan firewall name 'local-lan'
- set zone-policy zone local local-zone
-
-A detailed zone-based policy example is written in the Configuration-Blueprints_ section.
-
-.. stop_vyoslinter
-
-.. _Configuration-Blueprints: https://docs.vyos.io/en/latest/configexamples/zone-policy.html
-
-.. start_vyoslinter
diff --git a/docs/documentation.rst b/docs/documentation.rst
index 2d530439..1ecc170b 100644
--- a/docs/documentation.rst
+++ b/docs/documentation.rst
@@ -196,7 +196,7 @@ to use an alternative hyperlink use it this way:
handle build errors
"""""""""""""""""""
-The plugin will warn on build if a headline has a duplicate name in the
+The plugin will warn on build if a headline has a duplicate name in the
same document. To prevent this warning, you have to put a custom link on
top of the headline.
@@ -216,7 +216,7 @@ top of the headline.
==========
Lorem ipsum dolor sit amet, consetetur sadipscing elitr
-
+
.. _section B example:
Example
@@ -404,7 +404,7 @@ stability for URLs used in the forum or blogpost.
For example:
- * ``set zone-policy`` is written in ``zone-policy/index.rst``
+ * ``set firewall zone`` is written in ``firewall/zone.rst``
* ``set interfaces ethernet`` is written in ``interfaces/ethernet.rst``
The article starts with a short introduction about the command or the