mirror of
				https://github.com/vyos/vyos-documentation.git
				synced 2025-10-26 08:41:46 +01:00 
			
		
		
		
	Add link to Zone-Based Firewall KB introduction, edit some format and adjust texts to 72 characters.
		
			
				
	
	
		
			226 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			226 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
| .. _firewall:
 | |
| 
 | |
| Firewall
 | |
| ========
 | |
| 
 | |
| 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.
 | |
| 
 | |
| 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 to rulesets to interfaces they are applied to source
 | |
| zone-destination zone pairs.
 | |
| 
 | |
| An 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`.
 | |
| 
 | |
| 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.
 | |
| 
 | |
| .. note:: Groups can also be referenced by NAT configuration.
 | |
| 
 | |
| 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.
 | |
| 
 | |
| Here is an example of a network group for the IP networks that make up
 | |
| the internal network:
 | |
| 
 | |
| .. code-block:: none
 | |
| 
 | |
|   set firewall group network-group NET-INSIDE network 192.168.0.0/24
 | |
|   set firewall group network-group NET-INSIDE network 192.168.1.0/24
 | |
| 
 | |
| 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.
 | |
| 
 | |
| .. code-block:: none
 | |
| 
 | |
|   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
 | |
| 
 | |
| 
 | |
| 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
 | |
| `-`.
 | |
| 
 | |
| Here is an example of a port group a server:
 | |
| 
 | |
| .. code-block:: none
 | |
| 
 | |
|   set firewall group port-group PORT-TCP-SERVER1 port 80
 | |
|   set firewall group port-group PORT-TCP-SERVER1 port 443
 | |
|   set firewall group port-group PORT-TCP-SERVER1 port 5000-5010
 | |
| 
 | |
| Rule-Sets
 | |
| ---------
 | |
| 
 | |
| A rule-set is a named collection of firewall rules that can be applied
 | |
| to an interface or zone. Each rule is numbered, has an action to apply
 | |
| if the rule is matched, and the ability to specify the criteria to
 | |
| match.
 | |
| 
 | |
| Example of a rule-set to filter traffic to the internal network:
 | |
| 
 | |
| .. code-block:: none
 | |
| 
 | |
|   set firewall name INSIDE-OUT default-action drop
 | |
|   set firewall name INSIDE-OUT rule 1010 action accept
 | |
|   set firewall name INSIDE-OUT rule 1010 state established enable
 | |
|   set firewall name INSIDE-OUT rule 1010 state related enable
 | |
|   set firewall name INSIDE-OUT rule 1020 action drop
 | |
|   set firewall name INSIDE-OUT rule 1020 state invalid enable
 | |
| 
 | |
| Applying a Rule-Set to an Interface
 | |
| -----------------------------------
 | |
| 
 | |
| Once a rule-set is created, it can be applied to an interface.
 | |
| 
 | |
| .. note:: Only one rule-set can be applied to each interface for `in`,
 | |
|    `out`, or `local` traffic for each protocol (IPv4 and IPv6).
 | |
| 
 | |
| .. code-block:: none
 | |
| 
 | |
|   set interfaces ethernet eth1 firewall out name INSIDE-OUT
 | |
| 
 | |
| Applying a Rule-Set to a Zone
 | |
| -----------------------------
 | |
| 
 | |
| A named rule-set can also be applied to a zone relationship (note, zones must
 | |
| first be created):
 | |
| 
 | |
| .. code-block:: none
 | |
| 
 | |
|   set zone-policy zone INSIDE from OUTSIDE firewall name INSIDE-OUT
 | |
| 
 | |
| How VyOS replies when being pinged
 | |
| ----------------------------------
 | |
| 
 | |
| 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.
 | |
| 
 | |
| 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
 | |
|              }
 | |
|          }
 | |
|      }
 | |
|   }
 |