RHEL 9: Configuring Firewalls and NFTables
RHEL 9: Configuring Firewalls and NFTables
Managing the firewalld service, the nftables framework, and XDP packet filtering
features
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons
Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is
available at
[Link]
. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must
provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert,
Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift,
Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States
and other countries.
Linux ® is the registered trademark of Linus Torvalds in the United States and other countries.
XFS ® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States
and/or other countries.
MySQL ® is a registered trademark of MySQL AB in the United States, the European Union and
other countries.
[Link] ® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the
official Joyent [Link] open source or commercial project.
The OpenStack ® Word Mark and OpenStack logo are either registered trademarks/service marks
or trademarks/service marks of the OpenStack Foundation, in the United States and other
countries and are used with the OpenStack Foundation's permission. We are not affiliated with,
endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
Abstract
Packet filters, such as firewalls, use rules to control incoming, outgoing, and forwarded network
traffic. In Red Hat Enterprise Linux (RHEL), you can use the firewalld service and the nftables
framework to filter network traffic and build performance-critical firewalls. You can also use the
Express Data Path (XDP) feature of the kernel to process or drop network packets at the network
interface at a very high rate.
Table of Contents
Table of Contents
. . . . . . . . . . . . . FEEDBACK
PROVIDING . . . . . . . . . . . . ON
. . . .RED
. . . . .HAT
. . . . .DOCUMENTATION
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5. . . . . . . . . . . . .
.CHAPTER
. . . . . . . . . . 1.. .USING
. . . . . . . AND
. . . . . CONFIGURING
. . . . . . . . . . . . . . . . FIREWALLD
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6. . . . . . . . . . . . .
1.1. WHEN TO USE FIREWALLD, NFTABLES, OR IPTABLES 6
1.2. FIREWALL ZONES 6
1.3. FIREWALL POLICIES 8
1.4. FIREWALL RULES 9
1.5. ZONE CONFIGURATION FILES 9
1.6. PREDEFINED FIREWALLD SERVICES 10
1.7. WORKING WITH FIREWALLD ZONES 10
1.7.1. Customizing firewall settings for a specific zone to enhance security 11
1.7.2. Changing the default zone 12
1.7.3. Assigning a network interface to a zone 12
1.7.4. Assigning a zone to a connection using nmcli 13
1.7.5. Manually assigning a zone to a network connection in a connection profile file 13
1.7.6. Creating a new zone 14
1.7.7. Enabling zones by using the web console 15
1.7.8. Disabling zones by using the web console 16
1.7.9. Using zone targets to set default behavior for incoming traffic 17
1.8. CONTROLLING NETWORK TRAFFIC USING FIREWALLD 18
1.8.1. Controlling traffic with predefined services using the CLI 18
1.8.2. Controlling traffic with predefined services using the GUI 19
1.8.3. Enabling services on the firewall by using the web console 21
1.8.4. Configuring custom ports by using the web console 22
1.8.5. Configuring firewalld to allow hosting a secure web server 24
1.8.6. Closing unused or unnecessary ports to enhance network security 25
1.8.7. Controlling traffic through the CLI 26
1.8.8. Controlling traffic with protocols using GUI 27
1.9. USING ZONES TO MANAGE INCOMING TRAFFIC DEPENDING ON A SOURCE 27
1.9.1. Adding a source 27
1.9.2. Removing a source 28
1.9.3. Removing a source port 28
1.9.4. Using zones and sources to allow a service for only a specific domain 29
1.10. FILTERING FORWARDED TRAFFIC BETWEEN ZONES 30
1.10.1. The relationship between policy objects and zones 30
1.10.2. Using priorities to sort policies 30
1.10.3. Using policy objects to filter traffic between locally hosted containers and a network physically connected
to the host 31
1.10.4. Setting the default target of policy objects 32
1.10.5. Using DNAT to forward HTTPS traffic to a different host 32
1.11. CONFIGURING NAT USING FIREWALLD 34
1.11.1. Network address translation types 34
1.11.2. Configuring IP address masquerading 35
1.11.3. Using DNAT to forward incoming HTTP traffic 35
1.11.4. Redirecting traffic from a non-standard port to make the web service accessible on a standard port 37
1.12. MANAGING ICMP REQUESTS 38
1.12.1. Configuring ICMP filtering 38
1.13. SETTING AND CONTROLLING IP SETS USING FIREWALLD 39
1.13.1. Configuring dynamic updates for allowlisting with IP sets 40
1.14. PRIORITIZING RICH RULES 41
1.14.1. How the priority parameter organizes rules into different chains 41
1
Red Hat Enterprise Linux 9 Configuring firewalls and packet filters
.CHAPTER
. . . . . . . . . . 2.
. . GETTING
. . . . . . . . . . .STARTED
. . . . . . . . . .WITH
. . . . . .NFTABLES
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .52
..............
2.1. MIGRATING FROM IPTABLES TO NFTABLES 52
2.1.1. When to use firewalld, nftables, or iptables 52
2.1.2. Converting iptables and ip6tables rule sets to nftables 53
2.1.3. Converting single iptables and ip6tables rules to nftables 54
2.1.4. Comparison of common iptables and nftables commands 54
2.2. WRITING AND EXECUTING NFTABLES SCRIPTS 55
2.2.1. Supported nftables script formats 55
2.2.2. Running nftables scripts 56
2.2.3. Using comments in nftables scripts 57
2.2.4. Using variables in nftables script 57
2.2.5. Including files in nftables scripts 58
2.2.6. Automatically loading nftables rules when the system boots 58
2.3. CREATING AND MANAGING NFTABLES TABLES, CHAINS, AND RULES 59
2.3.1. Basics of nftables tables 59
2.3.2. Basics of nftables chains 60
Chain types 60
Chain priorities 60
Chain policies 61
2.3.3. Basics of nftables rules 61
2.3.4. Managing tables, chains, and rules using nft commands 62
2.4. CONFIGURING NAT USING NFTABLES 64
2.4.1. NAT types 64
2.4.2. Configuring masquerading using nftables 65
2.4.3. Configuring source NAT using nftables 66
2.4.4. Configuring destination NAT using nftables 66
2.4.5. Configuring a redirect using nftables 67
2.4.6. Configuring flowtable by using nftables 68
2.5. USING SETS IN NFTABLES COMMANDS 69
2.5.1. Using anonymous sets in nftables 69
2.5.2. Using named sets in nftables 70
2.5.3. Additional resources 71
2.6. USING VERDICT MAPS IN NFTABLES COMMANDS 71
2.6.1. Using anonymous maps in nftables 71
2.6.2. Using named maps in nftables 72
2.6.3. Additional resources 74
2.7. EXAMPLE: PROTECTING A LAN AND DMZ USING AN NFTABLES SCRIPT 74
2
Table of Contents
3
Red Hat Enterprise Linux 9 Configuring firewalls and packet filters
4
PROVIDING FEEDBACK ON RED HAT DOCUMENTATION
4. Enter your suggestion for improvement in the Description field. Include links to the relevant
parts of the documentation.
5
Red Hat Enterprise Linux 9 Configuring firewalls and packet filters
firewalld is a firewall service daemon that provides a dynamic customizable host-based firewall with a
D-Bus interface. Being dynamic, it enables creating, changing, and deleting the rules without the
necessity to restart the firewall daemon each time the rules are changed.
firewalld uses the concepts of zones and services, that simplify the traffic management. Zones are
predefined sets of rules. Network interfaces and sources can be assigned to a zone. The traffic allowed
depends on the network your computer is connected to and the security level this network is assigned.
Firewall services are predefined rules that cover all necessary settings to allow incoming traffic for a
specific service and they apply within a zone.
Services use one or more ports or addresses for network communication. Firewalls filter communication
based on ports. To allow network traffic for a service, its ports must be open. firewalld blocks all traffic
on ports that are not explicitly set as open. Some zones, such as trusted, allow all traffic by default.
Note that firewalld with nftables backend does not support passing custom nftables rules to firewalld,
using the --direct option.
firewalld: Use the firewalld utility for simple firewall use cases. The utility is easy to use and
covers the typical use cases for these scenarios.
nftables: Use the nftables utility to set up complex and performance-critical firewalls, such as
for a whole network.
iptables: The iptables utility on Red Hat Enterprise Linux uses the nf_tables kernel API instead
of the legacy back end. The nf_tables API provides backward compatibility so that scripts that
use iptables commands still work on Red Hat Enterprise Linux. For new firewall scripts, Red Hat
recommends to use nftables.
IMPORTANT
6
CHAPTER 1. USING AND CONFIGURING FIREWALLD
NetworkManager notifies firewalld of the zone of an interface. You can assign zones to interfaces with
the following utilities:
NetworkManager
firewall-config utility
firewall-cmd utility
The RHEL web console, firewall-config, and firewall-cmd can only edit the appropriate
NetworkManager configuration files. If you change the zone of the interface using the web console,
firewall-cmd, or firewall-config, the request is forwarded to NetworkManager and is not handled by
firewalld.
The /usr/lib/firewalld/zones/ directory stores the predefined zones, and you can instantly apply them to
any available network interface. These files are copied to the /etc/firewalld/zones/ directory only after
they are modified. The default settings of the predefined zones are as follows:
block
Suitable for: Any incoming network connections are rejected with an icmp-host-prohibited
message for IPv4 and icmp6-adm-prohibited for IPv6.
dmz
Suitable for: Computers in your DMZ that are publicly-accessible with limited access to your
internal network.
drop
Suitable for: Any incoming network packets are dropped without any notification.
external
Suitable for: External networks with masquerading enabled, especially for routers. Situations
when you do not trust the other computers on the network.
7
Red Hat Enterprise Linux 9 Configuring firewalls and packet filters
home
Suitable for: Home environment where you mostly trust the other computers on the network.
internal
Suitable for: Internal networks where you mostly trust the other computers on the network.
public
Suitable for: Public areas where you do not trust other computers on the network.
trusted
work
Suitable for: Work environment where you mostly trust the other computers on the network.
One of these zones is set as the default zone. When interface connections are added to
NetworkManager, they are assigned to the default zone. On installation, the default zone in firewalld is
the public zone. You can change the default zone.
NOTE
Make network zone names self-explanatory to help users understand them quickly.
To avoid any security problems, review the default zone configuration and disable any unnecessary
services according to your needs and risk assessments.
Additional resources
Incoming traffic
Outgoing traffic
Forward traffic
8
CHAPTER 1. USING AND CONFIGURING FIREWALLD
Firewall policies use the concept of firewall zones. Each zone is associated with a specific set of firewall
rules that determine the traffic allowed. Policies apply firewall rules in a stateful, unidirectional manner.
This means you only consider one direction of the traffic. The traffic return path is implicitly allowed due
to stateful filtering of firewalld.
Policies are associated with an ingress zone and an egress zone. The ingress zone is where the traffic
originated (received). The egress zone is where the traffic leaves (sent).
The firewall rules defined in a policy can reference the firewall zones to apply consistent configurations
across multiple network interfaces.
Firewall rules typically define certain criteria based on various attributes. The attributes can be as:
Source IP addresses
Destination IP addresses
Ports
Network interfaces
The firewalld utility organizes the firewall rules into zones (such as public, internal, and others) and
policies. Each zone has its own set of rules that determine the level of traffic freedom for network
interfaces associated with a particular zone.
The following example shows a configuration that allows one service (SSH) and one port range, for both
the TCP and UDP protocols:
Additional resources
9
Red Hat Enterprise Linux 9 Configuring firewalls and packet filters
Additional resources
Local port
Network protocol
A service simplifies packet filtering and saves you time because it achieves several tasks at once. For
example, firewalld can perform the following tasks at once:
Open a port
Service configuration options and generic file information are described in the [Link](5) man
page. The services are specified by means of individual XML configuration files, which are named in the
following format: [Link]. Protocol names are preferred over service or application names in
firewalld.
Use utilities:
Additional resources
10
CHAPTER 1. USING AND CONFIGURING FIREWALLD
Prerequisites
Procedure
# firewall-cmd --get-zones
The firewall-cmd --get-zones command displays all zones that are available on the system, but
it does not show any details for particular zones. To see more detailed information for all zones,
use the firewall-cmd --list-all-zones command.
3. Modify firewall settings for the chosen zone. For example, to allow the SSH service and remove
the ftp service:
# firewall-cmd --get-active-zones
Assigning a network interface to a zone is more suitable for applying consistent firewall
settings to all traffic on a particular interface (physical or virtual).
The firewall-cmd command, when used with the --permanent option, often involves
11
Red Hat Enterprise Linux 9 Configuring firewalls and packet filters
Verification
The command output displays all zone settings including the assigned services, network
interface, and network connections (sources).
Prerequisites
Procedure
To set up the default zone:
# firewall-cmd --get-default-zone
NOTE
Following this procedure, the setting is a permanent setting, even without the --
permanent option.
Procedure
To assign the zone to a specific interface:
12
CHAPTER 1. USING AND CONFIGURING FIREWALLD
# firewall-cmd --get-active-zones
Procedure
NOTE
Modifying the connection profile with the nmcli utility to assign a firewalld zone is more
efficient. For details, see Assigning a network interface to a zone .
Procedure
NetworkManager uses separate directories and file names for the different connection profile
formats:
Profiles in /etc/NetworkManager/system-
connections/<connection_name>.nmconnection files use the keyfile format.
If the file uses the keyfile format, append zone=<name> to the [connection] section of the
/etc/NetworkManager/system-connections/<connection_name>.nmconnection file:
13
Red Hat Enterprise Linux 9 Configuring firewalls and packet filters
/etc/NetworkManager/system-connections/<connection_name>.nmconnection file:
[connection]
...
zone=internal
If the file uses the ifcfg format, append ZONE=<name> to the /etc/sysconfig/network-
scripts/ifcfg-<interface_name> file:
ZONE=internal
Verification
Prerequisites
Procedure
# firewall-cmd --reload
The command applies recent changes to the firewall configuration without interrupting network
services that are already running.
Verification
14
CHAPTER 1. USING AND CONFIGURING FIREWALLD
Prerequisites
Procedure
2. Click Networking.
If you do not see the Edit rules and zones button, log in to the web console with the
administrator privileges.
5. In the Add zone dialog box, select a zone from the Trust level options.
The web console displays all zones predefined in the firewalld service.
6. In the Interfaces part, select an interface or interfaces on which the selected zone is applied.
7. In the Allowed Addresses part, you can select whether the zone is applied on:
[Link]
[Link]/24
[Link]/24, [Link]
15
Red Hat Enterprise Linux 9 Configuring firewalls and packet filters
Verification
Prerequisites
Procedure
2. Click Networking.
16
CHAPTER 1. USING AND CONFIGURING FIREWALLD
If you do not see the Edit rules and zones button, log in to the web console with the
administrator privileges.
5. Click Delete.
The zone is now disabled and the interface does not include opened services and ports which were
configured in the zone.
1.7.9. Using zone targets to set default behavior for incoming traffic
For every zone, you can set a default behavior that handles incoming traffic that is not further specified.
Such behavior is defined by setting the target of the zone. There are four options:
ACCEPT: Accepts all incoming packets except those disallowed by specific rules.
REJECT: Rejects all incoming packets except those allowed by specific rules. When firewalld
rejects packets, the source machine is informed about the rejection.
DROP: Drops all incoming packets except those allowed by specific rules. When firewalld drops
packets, the source machine is not informed about the packet drop.
default: Similar behavior as for REJECT, but with special meanings in certain scenarios.
Prerequisites
Procedure
To set a target for a zone:
1. List the information for the specific zone to see the default target:
17
Red Hat Enterprise Linux 9 Configuring firewalls and packet filters
Additional resources
Prerequisites
Procedure
# firewall-cmd --list-services
ssh dhcpv6-client
The command lists the services that are enabled in the default zone.
# firewall-cmd --get-services
RH-Satellite-6 amanda-client amanda-k5-client bacula bacula-client bitcoin bitcoin-rpc
bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6
dhcpv6-client dns docker-registry ...
The command displays a list of available services for the default zone.
# firewall-cmd --add-service=<service_name>
# firewall-cmd --runtime-to-permanent
The command applies these runtime changes to the permanent configuration of the firewall. By
18
CHAPTER 1. USING AND CONFIGURING FIREWALLD
The command applies these runtime changes to the permanent configuration of the firewall. By
default, it applies these changes to the configuration of the default zone.
Verification
The command displays complete configuration with the permanent firewall rules of the default
firewall zone (public).
# firewall-cmd --check-config
success
If the permanent configuration is invalid, the command returns an error with further details:
# firewall-cmd --check-config
Error: INVALID_PROTOCOL: '[Link]': 'tcpx' not from {'tcp'|'udp'|'sctp'|'dccp'}
You can also manually inspect the permanent configuration files to verify the settings. The main
configuration file is /etc/firewalld/[Link]. The zone-specific configuration files are in the
/etc/firewalld/zones/ directory and the policies are in the /etc/firewalld/policies/ directory.
Prerequisites
Procedure
19
Red Hat Enterprise Linux 9 Configuring firewalls and packet filters
a. Start the firewall-config utility and select the network zone whose services are to be
configured.
b. Select the Zones tab and then the Services tab below.
c. Select the checkbox for each type of service you want to trust or clear the checkbox to
block a service in the selected zone.
2. To edit a service:
b. Select Permanent from the menu labeled Configuration. Additional icons and menu
buttons appear at the bottom of the Services window.
The Ports, Protocols, and Source Port tabs enable adding, changing, and removing of ports, protocols,
and source port for the selected service. The modules tab is for configuring Netfilter helper modules.
The Destination tab enables limiting traffic to a particular destination address and Internet Protocol
(IPv4 or IPv6).
NOTE
Verification
You can also start the graphical firewall configuration utility using the command-line, by
entering the firewall-config command.
20
CHAPTER 1. USING AND CONFIGURING FIREWALLD
The Firewall Configuration window opens. Note that this command can be run as a normal user, but you
are prompted for an administrator password occasionally.
The RHEL 9 web console displays predefined firewalld services and you can add them to active firewall
zones.
IMPORTANT
The web console does not allow generic firewalld rules which are not listed in the web
console.
Prerequisites
Procedure
2. Click Networking.
21
Red Hat Enterprise Linux 9 Configuring firewalls and packet filters
If you do not see the Edit rules and zones button, log in to the web console with the
administrator privileges.
4. In the Firewall section, select a zone for which you want to add the service and click Add
Services.
5. In the Add Services dialog box, find the service you want to enable on the firewall.
At this point, the RHEL 9 web console displays the service in the zone’s list of Services.
22
CHAPTER 1. USING AND CONFIGURING FIREWALLD
Prerequisites
Procedure
2. Click Networking.
If you do not see the Edit rules and zones button, log in to the web console with the
administrative privileges.
4. In the Firewall section, select a zone for which you want to configure a custom port and click
Add Services.
5. In the Add services dialog box, click on the Custom Ports radio button.
6. In the TCP and UDP fields, add ports according to examples. You can add ports in the following
formats:
NOTE
You can add multiple values into each field. Values must be separated with the
comma and without the space, for example: 8080,8081,http
23
Red Hat Enterprise Linux 9 Configuring firewalls and packet filters
7. After adding the port number in the TCP filed, the UDP filed, or both, verify the service name in
the Name field.
The Name field displays the name of the service for which is this port reserved. You can rewrite
the name if you are sure that this port is free to use and no server needs to communicate on this
port.
8. In the Name field, add a name for the service including defined ports.
To verify the settings, go to the Firewall page and find the service in the list of zone’s Services.
Normally, system services listen on standard ports that are reserved for them. The httpd daemon, for
example, listens on port 80. However, system administrators can directly specify the port number
instead of the service name.
24
CHAPTER 1. USING AND CONFIGURING FIREWALLD
You can use the firewalld service to configure access to a secure web server for hosting your data.
Prerequisites
Procedure
# firewall-cmd --get-active-zones
# firewall-cmd --reload
Verification
IMPORTANT
Close all unnecessary ports to reduce the potential attack surface and minimize the risk
of unauthorized access or exploitation of vulnerabilities.
Procedure
# firewall-cmd --list-ports
By default, this command lists the ports that are enabled in the default zone.
NOTE
25
Red Hat Enterprise Linux 9 Configuring firewalls and packet filters
NOTE
This command will only give you a list of ports that are opened as ports. You will
not be able to see any open ports that are opened as a service. For that case,
consider using the --list-all option instead of --list-ports.
2. Remove the port from the list of allowed ports to close it for the incoming traffic:
# firewall-cmd --remove-port=port-number/port-type
This command removes a port from a zone. If you do not specify a zone, it will remove the port
from the default zone.
# firewall-cmd --runtime-to-permanent
Without specifying a zone, this command applies runtime changes to the permanent
configuration of the default zone.
Verification
1. List the active zones and choose the zone you want to inspect:
# firewall-cmd --get-active-zones
2. List the currently open ports in the selected zone to check if the unused or unnecessary ports
are closed:
As a result, you can for example enhance your system defenses, ensure data privacy or optimize network
resources.
IMPORTANT
Enabling panic mode stops all networking traffic. For this reason, it should be used only
when you have the physical access to the machine or if you are logged in using a serial
console.
Procedure
# firewall-cmd --panic-on
26
CHAPTER 1. USING AND CONFIGURING FIREWALLD
2. Switching off panic mode reverts the firewall to its permanent settings. To switch panic mode
off, enter:
# firewall-cmd --panic-off
Verification
# firewall-cmd --query-panic
Prerequisites
Procedure
1. Start the firewall-config tool and select the network zone whose settings you want to change.
2. Select the Protocols tab and click the Add button on the right-hand side. The Protocol window
opens.
3. Either select a protocol from the list or select the Other Protocol check box and enter the
protocol in the field.
Matching by source address takes precedence over matching by interface name. When you add a source
to a zone, the firewall will prioritize the source-based rules for incoming traffic over interface-based
rules. This means that if incoming traffic matches a source address specified for a particular zone, the
zone associated with that source address will determine how the traffic is handled, regardless of the
interface through which it arrives. On the other hand, interface-based rules are generally a fallback for
traffic that does not match specific source-based rules. These rules apply to traffic, for which the source
is not explicitly associated with a zone. This allows you to define a default behavior for traffic that does
not have a specific source-defined zone.
NOTE
27
Red Hat Enterprise Linux 9 Configuring firewalls and packet filters
NOTE
In case you add multiple zones with an overlapping network range, they are ordered
alphanumerically by zone name and only the first one is considered.
# firewall-cmd --add-source=<source>
The following procedure allows all incoming traffic from [Link] in the trusted zone:
Procedure
# firewall-cmd --get-zones
# firewall-cmd --runtime-to-permanent
Procedure
# firewall-cmd --runtime-to-permanent
28
CHAPTER 1. USING AND CONFIGURING FIREWALLD
By removing a source port you disable sorting the traffic based on a port of origin.
Procedure
1.9.4. Using zones and sources to allow a service for only a specific domain
To allow traffic from a specific network to use a service on a machine, use zones and source. The
following procedure allows only HTTP traffic from the [Link]/24 network while any other traffic is
blocked.
WARNING
When you configure this scenario, use a zone that has the default target. Using a
zone that has the target set to ACCEPT is a security risk, because for traffic from
[Link]/24, all network connections would be accepted.
Procedure
# firewall-cmd --get-zones
block dmz drop external home internal public trusted work
2. Add the IP range to the internal zone to route the traffic originating from the source through
the zone:
# firewall-cmd --runtime-to-permanent
Verification
Check that the internal zone is active and that the service is allowed in it:
29
Red Hat Enterprise Linux 9 Configuring firewalls and packet filters
icmp-block-inversion: no
interfaces:
sources: [Link]/24
services: cockpit dhcpv6-client mdns samba-client ssh http
...
Additional resources
The policy objects feature provides forward and output filtering in firewalld. You can use firewalld to
filter traffic between different zones to allow access to locally hosted VMs to connect the host.
HOST and ANY are the symbolic zones used in the ingress and egress zone lists.
The HOST symbolic zone allows policies for the traffic originating from or has a destination to
the host running firewalld.
The ANY symbolic zone applies policy to all the current and future zones. ANY symbolic zone
acts as a wildcard for all zones.
In the above example -500 is a lower priority value but has higher precedence. Thus, -500 will execute
before -100.
Lower numerical priority values have higher precedence and are applied first.
1.10.3. Using policy objects to filter traffic between locally hosted containers and a
30
CHAPTER 1. USING AND CONFIGURING FIREWALLD
1.10.3. Using policy objects to filter traffic between locally hosted containers and a
network physically connected to the host
The policy objects feature allows users to filter traffic between Podman and firewalld zones.
NOTE
Red Hat recommends blocking all traffic by default and opening the selective services
needed for the Podman utility.
Procedure
2. Block all traffic from Podman to other zones and allow only necessary services on Podman:
Setting the egress zone to ANY means that you filter from Podman to other zones. If you want
to filter to the host, then set the egress zone to HOST.
Verification
31
Red Hat Enterprise Linux 9 Configuring firewalls and packet filters
egress-zones: ANY
services: dhcp dns https
...
CONTINUE (default) - packets will be subject to rules in following policies and zones.
Verification
Prerequisites
The DNS server resolves the host name of the web server to the router’s IP address.
The private IP address and port number that you want to forward
The destination IP address and port of the web server where you want to redirect the
packets
Procedure
The policies, as opposed to zones, allow packet filtering for input, output, and forwarded traffic.
This is important, because forwarding traffic to endpoints on locally run web servers, containers,
or virtual machines requires such capability.
32
CHAPTER 1. USING AND CONFIGURING FIREWALLD
2. Configure symbolic zones for the ingress and egress traffic to also enable the router itself to
connect to its local IP address and forward this traffic:
The --add-ingress-zone=HOST option refers to packets generated locally and transmitted out
of the local host. The --add-egress-zone=ANY option refers to traffic moving to any zone.
The rich rule forwards TCP traffic from port 443 on the IP address of the router ([Link]) to
port 443 of the IP address of the web server ([Link]).
# firewall-cmd --reload
success
The command persistently configures the route_localnet kernel parameter and ensures
that the setting is preserved after the system reboots.
# sysctl -p /etc/sysctl.d/[Link]
The sysctl command is useful for applying on-the-fly changes, however the configuration
will not persist across system reboots.
Verification
1. Connect to the IP address of the router and to the port that you have forwarded to the web
server:
# curl [Link]
# sysctl [Link].route_localnet
[Link].route_localnet = 1
3. Verify that <example_policy> is active and contains the settings you need, especially the
source IP address and port, protocol to be used, and the destination IP address and port:
33
Red Hat Enterprise Linux 9 Configuring firewalls and packet filters
# firewall-cmd --info-policy=<example_policy>
example_policy (active)
priority: -1
target: CONTINUE
ingress-zones: HOST
egress-zones: ANY
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
rule family="ipv4" destination address="[Link]" forward-port port="443" protocol="tcp" to-
port="443" to-addr="[Link]"
Additional resources
Masquerading
Redirect
Masquerading
Use one of these NAT types to change the source IP address of packets. For example, Internet
Service Providers (ISPs) do not route private IP ranges, such as [Link]/8. If you use private IP
ranges in your network and users should be able to reach servers on the internet, map the source IP
address of packets from these ranges to a public IP address.
Masquerading automatically uses the IP address of the outgoing interface. Therefore, use
masquerading if the outgoing interface uses a dynamic IP address.
This type is a special case of DNAT that redirects packets to a different port on the local machine.
34
CHAPTER 1. USING AND CONFIGURING FIREWALLD
This type is a special case of DNAT that redirects packets to a different port on the local machine.
For example, if a service runs on a different port than its standard port, you can redirect incoming
traffic from the standard port to this specific port.
Procedure
1. To check if IP masquerading is enabled (for example, for the external zone), enter the following
command as root:
The command prints yes with exit status 0 if enabled. It prints no with exit status 1 otherwise. If
zone is omitted, the default zone will be used.
3. To make this setting persistent, pass the --permanent option to the command.
To make this setting permanent, pass the --permanent option to the command.
Prerequisites
Procedure
net.ipv4.ip_forward=1
This setting enables IP forwarding in the kernel. It makes the internal RHEL server act as a router
and forward packets from network to network.
# sysctl -p /etc/sysctl.d/[Link]
35
Red Hat Enterprise Linux 9 Configuring firewalls and packet filters
The previous command defines a DNAT rule with the following settings:
--zone=public - The firewall zone for which you configure the DNAT rule. You can adjust
this to whatever zone you need.
--add-forward-port - The option that indicates you are adding a port-forwarding rule.
--permanent - The option that makes the DNAT rule persistent across reboots.
# firewall-cmd --reload
Verification
Verify the DNAT rule for the firewall zone that you used:
# cat /etc/firewalld/zones/[Link]
<?xml version="1.0" encoding="utf-8"?>
<zone>
<short>Public</short>
<description>For use in public areas. You do not trust the other computers on networks to
not harm your computer. Only selected incoming connections are accepted.</description>
<service name="ssh"/>
<service name="dhcpv6-client"/>
<service name="cockpit"/>
<forward-port port="80" protocol="tcp" to-port="8080" to-addr="[Link]"/>
<forward/>
</zone>
Additional resources
1.11.4. Redirecting traffic from a non-standard port to make the web service
36
CHAPTER 1. USING AND CONFIGURING FIREWALLD
1.11.4. Redirecting traffic from a non-standard port to make the web service
accessible on a standard port
You can use the redirect mechanism to make the web service that internally runs on a non-standard port
accessible without requiring users to specify the port in the URL. As a result, the URLs are simpler and
provide better browsing experience, while a non-standard port is still used internally or for specific
requirements.
Prerequisites
Procedure
net.ipv4.ip_forward=1
# sysctl -p /etc/sysctl.d/[Link]
The previous command defines the NAT redirect rule with the following settings:
--zone=public - The firewall zone, for which you configure the rule. You can adjust this to
whatever zone you need.
--permanent - The option that makes the rule persist across reboots.
# firewall-cmd --reload
Verification
Verify the redirect rule for the firewall zone that you used:
37
Red Hat Enterprise Linux 9 Configuring firewalls and packet filters
# firewall-cmd --list-forward-ports
port=8080:proto=tcp:toport=80:toaddr=
# cat /etc/firewalld/zones/[Link]
<?xml version="1.0" encoding="utf-8"?>
<zone>
<short>Public</short>
<description>For use in public areas. You do not trust the other computers on networks to
not harm your computer. Only selected incoming connections are accepted.</description>
<service name="ssh"/>
<service name="dhcpv6-client"/>
<service name="cockpit"/>
<forward-port port="8080" protocol="tcp" to-port="80"/>
<forward/>
</zone>
Additional resources
You can use the ICMP messages, especially echo-request and echo-reply, to reveal information about a
network and misuse such information for various kinds of fraudulent activities. Therefore, firewalld
enables controlling the ICMP requests to protect your network information.
Security enhancement - Block potentially harmful ICMP types and codes to reduce your attack
surface.
Network performance - Permit only necessary ICMP types to optimize network performance
and prevent potential network congestion caused by excessive ICMP traffic.
Prerequisites
38
CHAPTER 1. USING AND CONFIGURING FIREWALLD
Procedure
# firewall-cmd --get-icmptypes
address-unreachable bad-header beyond-scope communication-prohibited destination-
unreachable echo-reply echo-request failed-policy fragmentation-needed host-precedence-
violation host-prohibited host-redirect host-unknown host-unreachable
...
From this predefined list, select which ICMP types and codes to allow or block.
The command removes any existing blocking rules for the echo requests ICMP type.
The command ensures that the redirect messages ICMP type is blocked by the firewall.
# firewall-cmd --reload
Verification
# firewall-cmd --list-icmp-blocks
redirect
The command output displays the ICMP types and codes that you allowed or blocked.
Additional resources
The IP sets are valuable in scenarios when you need to for example:
39
Red Hat Enterprise Linux 9 Configuring firewalls and packet filters
WARNING
Red Hat recommends using the firewall-cmd command to create and manage IP
sets.
Prerequisites
Procedure
The new IP set called allowlist contains IP addresses that you want your firewall to allow.
This configuration updates the allowlist IP set with a newly added IP address that is allowed to
pass network traffic by your firewall.
Without this rule, the IP set would not have any impact on network traffic. The default firewall
policy would prevail.
# firewall-cmd --reload
Verification
40
CHAPTER 1. USING AND CONFIGURING FIREWALLD
# firewall-cmd --get-ipsets
allowlist
# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: enp0s1
sources: ipset:allowlist
services: cockpit dhcpv6-client ssh
ports:
protocols:
...
The sources section of the command-line output provides insights to what origins of traffic
(hostnames, interfaces, IP sets, subnets, and others) are permitted or denied access to a
particular firewall zone. In this case, the IP addresses contained in the allowlist IP set are
allowed to pass traffic through the firewall for the public zone.
# cat /etc/firewalld/ipsets/[Link]
<?xml version="1.0" encoding="utf-8"?>
<ipset type="hash:ip">
<entry>[Link]</entry>
</ipset>
Next steps
Use a script or a security utility to fetch your threat intelligence feeds and update allowlist
accordingly in an automated fashion.
Additional resources
1.14.1. How the priority parameter organizes rules into different chains
You can set the priority parameter in a rich rule to any number between -32768 and 32767, and lower
numerical values have higher precedence.
The firewalld service organizes rules based on their priority value into different chains:
Priority lower than 0: the rule is redirected into a chain with the _pre suffix.
41
Red Hat Enterprise Linux 9 Configuring firewalls and packet filters
Priority higher than 0: the rule is redirected into a chain with the _post suffix.
Priority equals 0: based on the action, the rule is redirected into a chain with the _log, _deny, or
_allow the action.
Inside these sub-chains, firewalld sorts the rules based on their priority value.
Procedure
Add a rich rule with a very low precedence to log all traffic that has not been matched by other
rules:
The command additionally limits the number of log entries to 5 per minute.
Verification
Display the nftables rule that the command in the previous step created:
Procedure
# firewall-cmd --query-lockdown
42
CHAPTER 1. USING AND CONFIGURING FIREWALLD
Enabling lockdown:
# firewall-cmd --lockdown-on
Disabling lockdown:
# firewall-cmd --lockdown-off
Following is an example allowlist configuration file enabling all commands for the firewall-cmd utility, for
a user called user whose user ID is 815:
This example shows both user id and user name, but only one option is required. Python is the
interpreter and is prepended to the command line.
In Red Hat Enterprise Linux, all utilities are placed in the /usr/bin/ directory and the /bin/ directory is
sym-linked to the /usr/bin/ directory. In other words, although the path for firewall-cmd when entered
as root might resolve to /bin/firewall-cmd, /usr/bin/firewall-cmd can now be used. All new scripts
should use the new location. But be aware that if scripts that run as root are written to use the
/bin/firewall-cmd path, then that command path must be added in the allowlist in addition to the
/usr/bin/firewall-cmd path traditionally used only for non- root users.
The * at the end of the name attribute of a command means that all commands that start with this string
match. If the * is not there then the absolute command including arguments must match.
1.16.1. The difference between intra-zone forwarding and zones with the default
43
Red Hat Enterprise Linux 9 Configuring firewalls and packet filters
1.16.1. The difference between intra-zone forwarding and zones with the default
target set to ACCEPT
With intra-zone forwarding enabled, the traffic within a single firewalld zone can flow from one interface
or source to another interface or source. The zone specifies the trust level of interfaces and sources. If
the trust level is the same, the traffic stays inside the same zone.
NOTE
Enabling intra-zone forwarding in the default zone of firewalld, applies only to the
interfaces and sources added to the current default zone.
firewalld uses different zones to manage incoming and outgoing traffic. Each zone has its own set of
rules and behaviors. For example, the trusted zone, allows all forwarded traffic by default.
Other zones can have different default behaviors. In standard zones, forwarded traffic is typically
dropped by default when the target of the zone is set to default.
To control how the traffic is forwarded between different interfaces or sources within a zone, make sure
you understand and configure the target of the zone accordingly.
1.16.2. Using intra-zone forwarding to forward traffic between an Ethernet and Wi-Fi
network
You can use intra-zone forwarding to forward traffic between interfaces and sources within the same
firewalld zone. This feature brings the following benefits:
Seamless connectivity between wired and wireless devices (you can forward traffic between an
Ethernet network connected to enp1s0 and a Wi-Fi network connected to wlp0s20)
Shared resources that are accessible and used by multiple devices or users within a network
(such as printers, databases, network-attached storage, and others)
Procedure
2. Ensure that interfaces between which you want to enable intra-zone forwarding are assigned
only to the internal zone:
# firewall-cmd --get-active-zones
3. If the interface is currently assigned to a zone other than internal, reassign it:
44
CHAPTER 1. USING AND CONFIGURING FIREWALLD
Verification
The following Verification require that the nmap-ncat package is installed on both hosts.
1. Log in to a host that is on the same network as the enp1s0 interface of the host on which you
enabled zone forwarding.
4. Connect to the echo server running on the host that is in the same network as the enp1s0:
5. Type something and press Enter. Verify the text is sent back.
Additional resources
After you run the firewall role on the control node, the RHEL system role applies the firewalld
parameters to the managed node immediately and makes them persistent across reboots.
RHEL system roles is a set of contents for the Ansible automation utility. This content together with the
Ansible automation utility provides a consistent configuration interface to remotely manage multiple
systems.
The [Link] role from the RHEL system roles was introduced for automated
45
Red Hat Enterprise Linux 9 Configuring firewalls and packet filters
The [Link] role from the RHEL system roles was introduced for automated
configurations of the firewalld service. The rhel-system-roles package contains this RHEL system role,
and also the reference documentation.
To apply the firewalld parameters on one or more systems in an automated fashion, use the firewall
RHEL system role variable in a playbook. A playbook is a list of one or more plays that is written in the
text-based YAML format.
You can use an inventory file to define a set of systems that you want Ansible to configure.
With the firewall role you can configure many different firewalld parameters, for example:
Zones.
Additional resources
/usr/share/ansible/roles/[Link]/[Link] file
/usr/share/doc/rhel-system-roles/firewall/ directory
1.17.2. Resetting the firewalld settings by using the firewall RHEL system role
With the firewall RHEL system role, you can reset the firewalld settings to their default state. If you add
the previous:replaced parameter to the variable list, the RHEL system role removes all existing user-
defined settings and resets firewalld to the defaults. If you combine the previous:replaced parameter
with other settings, the firewall role removes all existing settings before applying new ones.
Prerequisites
You have prepared the control node and the managed nodes
You are logged in to the control node as a user who can run playbooks on the managed nodes.
The account you use to connect to the managed nodes has sudo permissions on them.
Procedure
1. Create a playbook file, for example ~/[Link], with the following content:
---
- name: Reset firewalld example
hosts: [Link]
tasks:
- name: Reset firewalld
46
CHAPTER 1. USING AND CONFIGURING FIREWALLD
[Link].include_role:
name: [Link]
vars:
firewall:
- previous: replaced
Note that this command only validates the syntax and does not protect against a wrong but valid
configuration.
$ ansible-playbook ~/[Link]
Verification
Run this command as root on the managed node to check all the zones:
# firewall-cmd --list-all-zones
Additional resources
/usr/share/ansible/roles/[Link]/[Link] file
/usr/share/doc/rhel-system-roles/firewall/ directory
1.17.3. Forwarding incoming traffic in firewalld from one local port to a different local
port by using the firewall RHEL system role
With the firewall role you can remotely configure firewalld parameters with persisting effect on
multiple managed hosts.
Prerequisites
You have prepared the control node and the managed nodes
You are logged in to the control node as a user who can run playbooks on the managed nodes.
The account you use to connect to the managed nodes has sudo permissions on them.
Procedure
1. Create a playbook file, for example ~/[Link], with the following content:
---
- name: Configure firewalld
hosts: [Link]
tasks:
47
Red Hat Enterprise Linux 9 Configuring firewalls and packet filters
Note that this command only validates the syntax and does not protect against a wrong but valid
configuration.
$ ansible-playbook ~/[Link]
Verification
# firewall-cmd --list-forward-ports
Additional resources
/usr/share/ansible/roles/[Link]/[Link] file
/usr/share/doc/rhel-system-roles/firewall/ directory
1.17.4. Managing ports in firewalld by using the firewall RHEL system role
You can use the firewall RHEL system role to open or close ports in the local firewall for incoming traffic
and make the new configuration persist across reboots. For example you can configure the default zone
to permit incoming traffic for the HTTPS service.
Prerequisites
You have prepared the control node and the managed nodes
You are logged in to the control node as a user who can run playbooks on the managed nodes.
The account you use to connect to the managed nodes has sudo permissions on them.
Procedure
1. Create a playbook file, for example ~/[Link], with the following content:
---
- name: Configure firewalld
hosts: [Link]
48
CHAPTER 1. USING AND CONFIGURING FIREWALLD
tasks:
- name: Allow incoming HTTPS traffic to the local host
[Link].include_role:
name: [Link]
vars:
firewall:
- port: 443/tcp
service: http
state: enabled
runtime: true
permanent: true
The permanent: true option makes the new settings persistent across reboots.
Note that this command only validates the syntax and does not protect against a wrong but valid
configuration.
$ ansible-playbook ~/[Link]
Verification
On the managed node, verify that the 443/tcp port associated with the HTTPS service is open:
# firewall-cmd --list-ports
443/tcp
Additional resources
/usr/share/ansible/roles/[Link]/[Link] file
/usr/share/doc/rhel-system-roles/firewall/ directory
1.17.5. Configuring a firewalld DMZ zone by using the firewall RHEL system role
As a system administrator, you can use the firewall RHEL system role to configure a dmz zone on the
enp1s0 interface to permit HTTPS traffic to the zone. In this way, you enable external users to access
your web servers.
Prerequisites
You have prepared the control node and the managed nodes
You are logged in to the control node as a user who can run playbooks on the managed nodes.
The account you use to connect to the managed nodes has sudo permissions on them.
49
Red Hat Enterprise Linux 9 Configuring firewalls and packet filters
Procedure
1. Create a playbook file, for example ~/[Link], with the following content:
---
- name: Configure firewalld
hosts: [Link]
tasks:
- name: Creating a DMZ with access to HTTPS port and masquerading for hosts in DMZ
[Link].include_role:
name: [Link]
vars:
firewall:
- zone: dmz
interface: enp1s0
service: https
state: enabled
runtime: true
permanent: true
Note that this command only validates the syntax and does not protect against a wrong but valid
configuration.
$ ansible-playbook ~/[Link]
Verification
On the managed node, view detailed information about the dmz zone:
Additional resources
/usr/share/ansible/roles/[Link]/[Link] file
50
CHAPTER 1. USING AND CONFIGURING FIREWALLD
/usr/share/doc/rhel-system-roles/firewall/ directory
51
Red Hat Enterprise Linux 9 Configuring firewalls and packet filters
All rules applied atomically instead of fetching, updating, and storing a complete rule set
Support for debugging and tracing in the rule set (nftrace) and monitoring trace events (in the
nft tool)
The nftables framework uses tables to store chains. The chains contain individual rules for performing
actions. The nft utility replaces all tools from the previous packet-filtering frameworks. You can use the
libnftnl library for low-level interaction with nftables Netlink API through the libmnl library.
To display the effect of rule set changes, use the nft list ruleset command. Because these utilities add
tables, chains, rules, sets, and other objects to the nftables rule set, be aware that nftables rule-set
operations, such as the nft flush ruleset command, might affect rule sets installed using the iptables
command.
IMPORTANT
The ipset and iptables-nft packages have been deprecated in Red Hat Enterprise Linux
9. This includes deprecation of nft-variants such as iptables, ip6tables, arptables, and
ebtables utilities. If you are using any of these tools, for example, because you upgraded
from an earlier RHEL version, Red Hat recommends migrating to the nft command line
tool provided by the nftables package.
firewalld: Use the firewalld utility for simple firewall use cases. The utility is easy to use and
covers the typical use cases for these scenarios.
nftables: Use the nftables utility to set up complex and performance-critical firewalls, such as
for a whole network.
iptables: The iptables utility on Red Hat Enterprise Linux uses the nf_tables kernel API instead
of the legacy back end. The nf_tables API provides backward compatibility so that scripts that
use iptables commands still work on Red Hat Enterprise Linux. For new firewall scripts, Red Hat
recommends to use nftables.
IMPORTANT
52
CHAPTER 2. GETTING STARTED WITH NFTABLES
IMPORTANT
Prerequisites
Procedure
# iptables-save >/root/[Link]
# ip6tables-save >/root/[Link]
4. To enable the nftables service to load the generated files, add the following to the
/etc/sysconfig/[Link] file:
include "/etc/nftables/[Link]"
include "/etc/nftables/[Link]"
If you used a custom script to load the iptables rules, ensure that the script no longer starts
automatically and reboot to flush all tables.
Verification
53
Red Hat Enterprise Linux 9 Configuring firewalls and packet filters
Additional resources
Prerequisites
Procedure
Note that some extensions lack translation support. In these cases, the utility prints the
untranslated rule prefixed with the # sign, for example:
Additional resources
iptables-translate --help
iptables nftables
iptables nftables
54
CHAPTER 2. GETTING STARTED WITH NFTABLES
iptables nftables
The nft command does not pre-create tables and chains. They exist only if a user created them
manually.
Add comments
Define variables
When you install the nftables package, Red Hat Enterprise Linux automatically creates *.nft scripts in
the /etc/nftables/ directory. These scripts contain commands that create tables and empty chains for
different purposes.
The same format as the nft list ruleset command displays the rule set:
#!/usr/sbin/nft -f
55
Red Hat Enterprise Linux 9 Configuring firewalls and packet filters
#!/usr/sbin/nft -f
# Create a table
add table inet example_table
Procedure
# nft -f /etc/nftables/<example_firewall_script>.nft
i. Ensure that the script starts with the following shebang sequence:
#!/usr/sbin/nft -f
IMPORTANT
If you omit the -f parameter, the nft utility does not read the script and
displays: Error: syntax error, unexpected newline, expecting string.
# /etc/nftables/<example_firewall_script>.nft
56
CHAPTER 2. GETTING STARTED WITH NFTABLES
IMPORTANT
Even if nft executes the script successfully, incorrectly placed rules, missing parameters,
or other problems in the script can cause that the firewall behaves not as expected.
Additional resources
...
# Flush the rule set
flush ruleset
You can use the variable in the script by entering the $ sign followed by the variable name:
...
add rule inet example_table example_chain iifname $INET_DEV tcp dport ssh accept
...
You can use the variable in the script by writing the $ sign followed by the variable name:
NOTE
57
Red Hat Enterprise Linux 9 Configuring firewalls and packet filters
NOTE
Curly braces have special semantics when you use them in a rule because they indicate
that the variable represents a set.
Additional resources
If you specify only a file name without an absolute or relative path, nftables includes files from the
default search path, which is set to /etc on Red Hat Enterprise Linux.
include "[Link]"
To include all files ending with *.nft that are stored in the /etc/nftables/rulesets/ directory:
include "/etc/nftables/rulesets/*.nft"
Note that the include statement does not match files beginning with a dot.
Additional resources
Prerequisites
Procedure
If you modified the *.nft scripts that were created in /etc/nftables/ with the installation of
58
CHAPTER 2. GETTING STARTED WITH NFTABLES
If you modified the *.nft scripts that were created in /etc/nftables/ with the installation of
the nftables package, uncomment the include statement for these scripts.
If you wrote new scripts, add include statements to include these scripts. For example, to
load the /etc/nftables/[Link] script when the nftables service starts, add:
include "/etc/nftables/_example_.nft"
2. Optional: Start the nftables service to load the firewall rules without rebooting the system:
Additional resources
Each table must have an address family assigned. The address family defines the packet types that this
table processes. You can set one of the following address families when you create a table:
ip: Matches only IPv4 packets. This is the default if you do not specify an address family.
If you want to add a table, the format to use depends on your firewall script:
59
Red Hat Enterprise Linux 9 Configuring firewalls and packet filters
Base chain: You can use base chains as an entry point for packets from the networking stack.
Regular chain: You can use regular chains as a jump target to better organize rules.
If you want to add a base chain to a table, the format to use depends on your firewall script:
To avoid that the shell interprets the semicolons as the end of the command, place the \ escape
character in front of the semicolons.
Both examples create base chains. To create a regular chain, do not set any parameters in the curly
brackets.
Chain types
The following are the chain types and an overview with which address families and hooks you can use
them:
nat ip, ip6, inet prerouting, input, Chains of this type perform native address
output, translation based on connection tracking
postrouting entries. Only the first packet traverses this
chain type.
route ip, ip6 output Accepted packets that traverse this chain type
cause a new route lookup if relevant parts of
the IP header have changed.
Chain priorities
The priority parameter specifies the order in which packets traverse chains with the same hook value.
You can set this parameter to an integer value or use a standard priority name.
The following matrix is an overview of the standard priority names and their numeric values, and with
60
CHAPTER 2. GETTING STARTED WITH NFTABLES
The following matrix is an overview of the standard priority names and their numeric values, and with
which address families and hooks you can use them:
Chain policies
The chain policy defines whether nftables should accept or drop packets if rules in this chain do not
specify any action. You can set one of the following policies in a chain:
accept (default)
drop
If you want to add a rule to a chain, the format to use depends on your firewall script:
61
Red Hat Enterprise Linux 9 Configuring firewalls and packet filters
This shell command appends the new rule at the end of the chain. If you prefer to add a rule at
the beginning of the chain, use the nft insert command instead of nft add.
IMPORTANT
The commands in this procedure do not represent a typical workflow and are not
optimized. This procedure only demonstrates how to use nft commands to manage
tables, chains, and rules in general.
Procedure
1. Create a table named nftables_svc with the inet address family so that the table can process
both IPv4 and IPv6 packets:
2. Add a base chain named INPUT, that processes incoming network traffic, to the inet
nftables_svc table:
# nft add chain inet nftables_svc INPUT { type filter hook input priority filter \; policy
accept \; }
To avoid that the shell interprets the semicolons as the end of the command, escape the
semicolons using the \ character.
3. Add rules to the INPUT chain. For example, allow incoming TCP traffic on port 22 and 443, and,
as the last rule of the INPUT chain, reject other incoming traffic with an Internet Control
Message Protocol (ICMP) port unreachable message:
If you enter the nft add rule commands as shown, nft adds the rules in the same order to the
chain as you run the commands.
62
CHAPTER 2. GETTING STARTED WITH NFTABLES
5. Insert a rule before the existing rule with handle 3. For example, to insert a rule that allows TCP
traffic on port 636, enter:
# nft insert rule inet nftables_svc INPUT position 3 tcp dport 636 accept
6. Append a rule after the existing rule with handle 3. For example, to insert a rule that allows TCP
traffic on port 80, enter:
# nft add rule inet nftables_svc INPUT position 3 tcp dport 80 accept
7. Display the rule set again with handles. Verify that the later added rules have been added to the
specified positions:
9. Display the rule set, and verify that the removed rule is no longer present:
11. Display the rule set, and verify that the INPUT chain is empty:
63
Red Hat Enterprise Linux 9 Configuring firewalls and packet filters
You can also use this command to delete chains that still contain rules.
13. Display the rule set, and verify that the INPUT chain has been deleted:
You can also use this command to delete tables that still contain chains.
NOTE
To delete the entire rule set, use the nft flush ruleset command instead of
manually deleting all rules, chains, and tables in separate commands.
Additional resources
Masquerading
Redirect
IMPORTANT
You can only use real interface names in iifname and oifname parameters, and
alternative names (altname) are not supported.
Use one of these NAT types to change the source IP address of packets. For example, Internet
64
CHAPTER 2. GETTING STARTED WITH NFTABLES
Use one of these NAT types to change the source IP address of packets. For example, Internet
Service Providers (ISPs) do not route private IP ranges, such as [Link]/8. If you use private IP
ranges in your network and users should be able to reach servers on the internet, map the source IP
address of packets from these ranges to a public IP address.
Masquerading and SNAT are very similar to one another. The differences are:
Masquerading automatically uses the IP address of the outgoing interface. Therefore, use
masquerading if the outgoing interface uses a dynamic IP address.
SNAT sets the source IP address of packets to a specified IP and does not dynamically look
up the IP of the outgoing interface. Therefore, SNAT is faster than masquerading. Use SNAT
if the outgoing interface uses a fixed IP address.
Replace the source IP of packets leaving the host through the ens3 interface to the IP set on ens3.
Procedure
1. Create a table:
# nft add chain nat postrouting { type nat hook postrouting priority 100 \; }
IMPORTANT
Even if you do not add a rule to the prerouting chain, the nftables framework
requires this chain to match incoming packet replies.
Note that you must pass the -- option to the nft command to prevent the shell from interpreting
the negative priority value as an option of the nft command.
3. Add a rule to the postrouting chain that matches outgoing packets on the ens3 interface:
65
Red Hat Enterprise Linux 9 Configuring firewalls and packet filters
Procedure
1. Create a table:
# nft add chain nat postrouting { type nat hook postrouting priority 100 \; }
IMPORTANT
Even if you do not add a rule to the postrouting chain, the nftables framework
requires this chain to match outgoing packet replies.
Note that you must pass the -- option to the nft command to prevent the shell from interpreting
the negative priority value as an option of the nft command.
3. Add a rule to the postrouting chain that replaces the source IP of outgoing packets through
ens3 with [Link]:
Additional resources
For example, with DNAT the router redirects incoming traffic sent to port 80 and 443 to a web server
with the IP address [Link].
Procedure
1. Create a table:
# nft -- add chain nat prerouting { type nat hook prerouting priority -100 \; }
# nft add chain nat postrouting { type nat hook postrouting priority 100 \; }
IMPORTANT
66
CHAPTER 2. GETTING STARTED WITH NFTABLES
IMPORTANT
Even if you do not add a rule to the postrouting chain, the nftables framework
requires this chain to match outgoing packet replies.
Note that you must pass the -- option to the nft command to prevent the shell from interpreting
the negative priority value as an option of the nft command.
3. Add a rule to the prerouting chain that redirects incoming traffic to port 80 and 443 on the
ens3 interface of the router to the web server with the IP address [Link]:
# nft add rule nat prerouting iifname ens3 tcp dport { 80, 443 } dnat to [Link]
4. Depending on your environment, add either a SNAT or masquerading rule to change the source
address for packets returning from the web server to the sender:
b. If the ens3 interface uses a static IP address, add a SNAT rule. For example, if the ens3
uses the [Link] IP address:
Additional resources
NAT types
For example, you can redirect incoming and forwarded traffic sent to port 22 of the local host to port
2222.
Procedure
1. Create a table:
# nft -- add chain nat prerouting { type nat hook prerouting priority -100 \; }
Note that you must pass the -- option to the nft command to prevent the shell from interpreting
67
Red Hat Enterprise Linux 9 Configuring firewalls and packet filters
Note that you must pass the -- option to the nft command to prevent the shell from interpreting
the negative priority value as an option of the nft command.
3. Add a rule to the prerouting chain that redirects incoming traffic on port 22 to port 2222:
Additional resources
NAT types
Avoids revisiting the routing table by bypassing the classic packet processing.
Procedure
2. Add an example-flowtable flowtable with ingress hook and filter as a priority type:
This command adds a flowtable of filter type with forward hook and filter priority.
4. Add a rule with established connection tracking state to offload example-flowtable flow:
Verification
68
CHAPTER 2. GETTING STARTED WITH NFTABLES
chain example-forwardchain {
type filter hook forward priority filter; policy accept;
ct state established flow add @example-flowtable
}
}
Additional resources
The drawback of anonymous sets is that if you want to change the set, you must replace the rule. For a
dynamic solution, use named sets as described in Using named sets in nftables .
Prerequisites
The example_chain chain and the example_table table in the inet family exists.
Procedure
1. For example, to add a rule to example_chain in example_table that allows incoming traffic to
port 22, 80, and 443:
# nft add rule inet example_table example_chain tcp dport { 22, 80, 443 } accept
69
Red Hat Enterprise Linux 9 Configuring firewalls and packet filters
When you create a named set, you must specify the type of elements the set contains. You can set the
following types:
ipv4_addr for a set that contains IPv4 addresses or ranges, such as [Link] or [Link]/24.
ipv6_addr for a set that contains IPv6 addresses or ranges, such as [Link] or
[Link]/64.
ether_addr for a set that contains a list of media access control (MAC) addresses, such as
[Link].
inet_proto for a set that contains a list of internet protocol types, such as tcp.
inet_service for a set that contains a list of internet services, such as ssh.
mark for a set that contains a list of packet marks. Packet marks can be any positive 32-bit
integer value (0 to 2147483647).
Prerequisites
Procedure
1. Create an empty set. The following examples create a set for IPv4 addresses:
# nft add set inet example_table example_set { type ipv4_addr \; flags interval \; }
IMPORTANT
To prevent the shell from interpreting the semicolons as the end of the
command, you must escape the semicolons with a backslash.
2. Optional: Create rules that use the set. For example, the following command adds a rule to the
example_chain in the example_table that will drop all packets from IPv4 addresses in
example_set.
70
CHAPTER 2. GETTING STARTED WITH NFTABLES
When you specify an IP address range, you can alternatively use the Classless Inter-Domain
Routing (CIDR) notation, such as [Link]/24 in the above example.
The drawback of an anonymous map is that if you want to change the map, you must replace the rule.
For a dynamic solution, use named maps as described in Using named maps in nftables .
For example, you can use an anonymous map to route both TCP and UDP packets of the IPv4 and IPv6
protocol to different chains to count incoming TCP and UDP packets separately.
Procedure
71
Red Hat Enterprise Linux 9 Configuring firewalls and packet filters
6. Create a chain for incoming traffic. For example, to create a chain named incoming_traffic in
example_table that filters incoming traffic:
# nft add chain inet example_table incoming_traffic { type filter hook input priority 0 \;
}
# nft add rule inet example_table incoming_traffic ip protocol vmap { tcp : jump
tcp_packets, udp : jump udp_packets }
The anonymous map distinguishes the packets and sends them to the different counter chains
based on their protocol.
chain udp_packets {
counter packets 10 bytes 1559
}
chain incoming_traffic {
type filter hook input priority filter; policy accept;
ip protocol vmap { tcp : jump tcp_packets, udp : jump udp_packets }
}
}
The counters in the tcp_packets and udp_packets chain display both the number of received
packets and bytes.
When you create a named map, you must specify the type of elements:
ipv4_addr for a map whose match part contains an IPv4 address, such as [Link].
ipv6_addr for a map whose match part contains an IPv6 address, such as [Link].
ether_addr for a map whose match part contains a media access control (MAC) address, such
as [Link].
inet_proto for a map whose match part contains an internet protocol type, such as tcp.
inet_service for a map whose match part contains an internet services name port number, such
as ssh or 22.
mark for a map whose match part contains a packet mark. A packet mark can be any positive
72
CHAPTER 2. GETTING STARTED WITH NFTABLES
mark for a map whose match part contains a packet mark. A packet mark can be any positive
32-bit integer value (0 to 2147483647).
counter for a map whose match part contains a counter value. The counter value can be any
positive 64-bit integer value.
quota for a map whose match part contains a quota value. The quota value can be any positive
64-bit integer value.
For example, you can allow or drop incoming packets based on their source IP address. Using a named
map, you require only a single rule to configure this scenario while the IP addresses and actions are
dynamically stored in the map.
Procedure
1. Create a table. For example, to create a table named example_table that processes IPv4
packets:
# nft add chain ip example_table example_chain { type filter hook input priority 0 \; }
IMPORTANT
To prevent the shell from interpreting the semicolons as the end of the
command, you must escape the semicolons with a backslash.
3. Create an empty map. For example, to create a map for IPv4 addresses:
4. Create rules that use the map. For example, the following command adds a rule to
example_chain in example_table that applies actions to IPv4 addresses which are both
defined in example_map:
This example defines the mappings of IPv4 addresses to actions. In combination with the rule
created above, the firewall accepts packet from [Link] and drops packets from [Link].
6. Optional: Enhance the map by adding another IP address and action statement:
73
Red Hat Enterprise Linux 9 Configuring firewalls and packet filters
chain example_chain {
type filter hook input priority filter; policy accept;
ip saddr vmap @example_map
}
}
IMPORTANT
This example is only for demonstration purposes and describes a scenario with specific
requirements.
Firewall scripts highly depend on the network infrastructure and security requirements.
Use this example to learn the concepts of nftables firewalls when you write scripts for
your own environment.
The internet interface of the router has both a static IPv4 address ([Link]) and IPv6
address ([Link]) assigned.
The clients in the internal LAN use only private IPv4 addresses from the range [Link]/24.
Consequently, traffic from the LAN to the internet requires source network address translation
(SNAT).
74
CHAPTER 2. GETTING STARTED WITH NFTABLES
The administrator PCs in the internal LAN use the IP addresses [Link] and [Link].
The DMZ uses public IP addresses from the ranges [Link]/24 and [Link]/56.
The web server in the DMZ uses the IP addresses [Link] and [Link].
The router acts as a caching DNS server for hosts in the LAN and DMZ.
The PCs of the administrators must be able to access the router and every server in the DMZ
using SSH.
Prerequisites
75
Red Hat Enterprise Linux 9 Configuring firewalls and packet filters
Procedure
Using this configuration, the rsyslog service logs dropped packets to the /var/log/[Link]
file instead of /var/log/messages.
/var/log/[Link] {
size +10M
maxage 30
sharedscripts
postrotate
/usr/bin/systemctl kill -s HUP [Link] >/dev/null 2>&1 || true
endscript
}
The maxage 30 setting defines that logrotate removes rotated logs older than 30 days during
the next rotation operation.
Additional resources
WARNING
This nftables firewall script is only for demonstration purposes. Do not use it
without adapting it to your environments and security requirements.
Prerequisites
76
CHAPTER 2. GETTING STARTED WITH NFTABLES
Procedure
77
Red Hat Enterprise Linux 9 Configuring firewalls and packet filters
oifname lo accept
# IPv4 access from LAN and internet to the HTTPS server in the DMZ
iifname { $LAN_DEV, $INET_DEV } oifname $DMZ_DEV ip daddr [Link] tcp dport
443 accept
include "/etc/nftables/[Link]"
78
CHAPTER 2. GETTING STARTED WITH NFTABLES
Verification
2. Try to perform an access that the firewall prevents. For example, try to access the router using
SSH from the DMZ:
# ssh [Link]
ssh: connect to host [Link] port 22: Network is unreachable
For example, if your web server does not have a public IP address, you can set a port forwarding rule on
your firewall that forwards incoming packets on port 80 and 443 on the firewall to the web server. With
this firewall rule, users on the internet can access the web server using the IP or host name of the
firewall.
Procedure
# nft -- add chain ip nat prerouting { type nat hook prerouting priority -100 \; }
NOTE
79
Red Hat Enterprise Linux 9 Configuring firewalls and packet filters
NOTE
Pass the -- option to the nft command to prevent the shell from interpreting the
negative priority value as an option of the nft command.
3. Add a rule to the prerouting chain that redirects incoming packets on port 8022 to the local
port 22:
# nft add rule ip nat prerouting tcp dport 8022 redirect to :22
For example, you can forward incoming IPv4 packets on the local port 443 to the same port number on
the remote system with the [Link] IP address.
Prerequisites
You are logged in as the root user on the system that should forward the packets.
Procedure
# nft -- add chain ip nat prerouting { type nat hook prerouting priority -100 \; }
# nft add chain ip nat postrouting { type nat hook postrouting priority 100 \; }
NOTE
Pass the -- option to the nft command to prevent the shell from interpreting the
negative priority value as an option of the nft command.
3. Add a rule to the prerouting chain that redirects incoming packets on port 443 to the same port
on [Link]:
# nft add rule ip nat prerouting tcp dport 443 dnat to [Link]
80
CHAPTER 2. GETTING STARTED WITH NFTABLES
Procedure
# nft add chain inet filter input { type filter hook input priority 0 \; }
# nft add set inet filter limit-ssh { type ipv4_addr\; flags dynamic \;}
4. Add a rule to the input chain that allows only two simultaneous incoming connections to the
SSH port (22) from an IPv4 address and rejects all further connections from the same IP:
# nft add rule inet filter input tcp dport ssh ct state new add @limit-ssh { ip saddr ct
count over 2 } counter reject
Verification
1. Establish more than two new simultaneous SSH connections from the same IP address to the
host. Nftables refuses connections to the SSH port if two connections are already established.
The elements entry displays addresses that currently match the rule. In this example, elements
lists IP addresses that have active connections to the SSH port. Note that the output does not
display the number of active connections or if connections were rejected.
2.9.2. Blocking IP addresses that attempt more than ten new incoming TCP
81
Red Hat Enterprise Linux 9 Configuring firewalls and packet filters
2.9.2. Blocking IP addresses that attempt more than ten new incoming TCP
connections within one minute
You can temporarily block hosts that are establishing more than ten IPv4 TCP connections within one
minute.
Procedure
# nft add chain ip filter input { type filter hook input priority 0 \; }
# nft add set ip filter denylist { type ipv4_addr \; flags dynamic, timeout \; timeout 5m \;
}
This command creates a dynamic set for IPv4 addresses. The timeout 5m parameter defines
that nftables automatically removes entries after five minutes to prevent that the set fills up
with stale entries.
4. Add a rule that automatically adds the source IP address of hosts that attempt to establish
more than ten new TCP connections within one minute to the denylist set:
# nft add rule ip filter input ip protocol tcp ct state new, untracked add @denylist { ip
saddr limit rate over 10/minute } drop
Additional resources
For more information about a procedure that adds a counter to an existing rule, see Adding a
counter to an existing rule.
Prerequisites
Procedure
1. Add a new rule with the counter parameter to the chain. The following example adds a rule with
82
CHAPTER 2. GETTING STARTED WITH NFTABLES
1. Add a new rule with the counter parameter to the chain. The following example adds a rule with
a counter that allows TCP traffic on port 22 and counts the packets and traffic that match this
rule:
# nft add rule inet example_table example_chain tcp dport 22 counter accept
For more information about a procedure that adds a new rule with a counter, see Creating a rule
with the counter.
Prerequisites
Procedure
2. Add the counter by replacing the rule but with the counter parameter. The following example
replaces the rule displayed in the previous step and adds a counter:
# nft replace rule inet example_table example_chain handle 4 tcp dport 22 counter
accept
83
Red Hat Enterprise Linux 9 Configuring firewalls and packet filters
Prerequisites
Procedure
2. Add the tracing feature by replacing the rule but with the meta nftrace set 1 parameters. The
following example replaces the rule displayed in the previous step and enables tracing:
# nft replace rule inet example_table example_chain handle 4 tcp dport 22 meta nftrace
set 1 accept
3. Use the nft monitor command to display the tracing. The following example filters the output of
the command to display only entries that contain inet example_table example_chain:
WARNING
Depending on the number of rules with tracing enabled and the amount of
matching traffic, the nft monitor command can display a lot of output. Use
grep or other utilities to filter the output.
84
CHAPTER 2. GETTING STARTED WITH NFTABLES
You can backup nftables rules to a file and later restoring them. Also, administrators can use a file with
the rules to, for example, transfer the rules to a different server.
Procedure
In JSON format:
Procedure
If the file to restore is in the format produced by nft list ruleset or contains nft commands
directly:
# nft -f [Link]
# nft -j -f [Link]
85
Red Hat Enterprise Linux 9 Configuring firewalls and packet filters
The xdp-filter utility allows or drops incoming network packets using XDP. You can create rules to filter
traffic to or from specific:
IP addresses
MAC addresses
Ports
Note that, even if xdp-filter has a significantly higher packet-processing rate, it does not have the same
capabilities as, for example, nftables. Consider xdp-filter a conceptual utility to demonstrate packet
filtering using XDP. Additionally, you can use the code of the utility for a better understanding of how to
write your own XDP applications.
IMPORTANT
On other architectures than AMD and Intel 64-bit, the xdp-filter utility is provided as a
Technology Preview only. Technology Preview features are not supported with Red Hat
production Service Level Agreements (SLAs), might not be functionally complete, and
Red Hat does not recommend using them for production. These previews provide early
access to upcoming product features, enabling customers to test functionality and
provide feedback during the development process.
See Technology Preview Features Support Scope on the Red Hat Customer Portal for
information about the support scope for Technology Preview features.
The allow policy of xdp-filter defines that all traffic is allowed and the filter drops only network packets
that match a particular rule. For example, use this method if you know the source IP addresses of
packets you want to drop.
Prerequisites
86
CHAPTER 3. USING XDP-FILTER FOR HIGH-PERFORMANCE TRAFFIC FILTERING TO PREVENT DDOS ATTACKS
Procedure
By default, xdp-filter uses the allow policy, and the utility drops only traffic that matches any
rule.
Optionally, use the -f feature option to enable only particular features, such as tcp, ipv4, or
ethernet. Loading only the required features instead of all of them increases the speed of
packet processing. To enable multiple features, separate them with a comma.
If the command fails with an error, the network driver does not support XDP programs.
# xdp-filter port 22
This command adds a rule that matches TCP and UDP traffic. To match only a particular
protocol, use the -p protocol option.
Verification
Use the following command to display statistics about dropped and allowed packets:
# xdp-filter status
Additional resources
If you are a developer and interested in the code of xdp-filter, download and install the
corresponding source RPM (SRPM) from the Red Hat Customer Portal.
87
Red Hat Enterprise Linux 9 Configuring firewalls and packet filters
To do so, use the deny policy of xdp-filter which defines that the filter drops all network packets except
the ones that match a particular rule. For example, use this method if you do not know the source IP
addresses of packets you want to drop.
WARNING
If you set the default policy to deny when you load xdp-filter on an interface, the
kernel immediately drops all packets from this interface until you create rules that
allow certain traffic. To avoid being locked out from the system, enter the
commands locally or connect through a different network interface to the host.
Prerequisites
You are logged in to the host either locally or using a network interface for which you do not plan
to filter the traffic.
Procedure
Optionally, use the -f feature option to enable only particular features, such as tcp, ipv4, or
ethernet. Loading only the required features instead of all of them increases the speed of
packet processing. To enable multiple features, separate them with a comma.
If the command fails with an error, the network driver does not support XDP programs.
# xdp-filter port 22
This command adds a rule that matches TCP and UDP traffic. To match only a particular
protocol, pass the -p protocol option to the command.
88
CHAPTER 3. USING XDP-FILTER FOR HIGH-PERFORMANCE TRAFFIC FILTERING TO PREVENT DDOS ATTACKS
# xdp-filter ip [Link]
IMPORTANT
The xdp-filter utility does not support stateful packet inspection. This requires
that you either do not set a mode using the -m mode option or you add explicit
rules to allow incoming traffic that the machine receives in reply to outgoing
traffic.
Verification
Use the following command to display statistics about dropped and allowed packets:
# xdp-filter status
Additional resources
If you are a developer and you are interested in the code of xdp-filter, download and install the
corresponding source RPM (SRPM) from the Red Hat Customer Portal.
89
Backing up nftables involves saving the current rule set to a file using `nft list ruleset > file.nft` for native format or `nft -j list ruleset > file.json` for JSON format. Restoring nftables rules can be done using `nft -f file.nft` or `nft -j -f file.json` depending on the backup format. These actions ensure that firewall configurations can be reverted or transferred, aiding in recovery and maintaining consistency across different systems, which is crucial for effective firewall management .
Network security can be enhanced by configuring firewall zones to control inbound and outbound traffic based on specific security levels. The process involves enabling the firewalld service, listing available firewall zones using the command `firewall-cmd --get-zones`, and selecting the desired zone. Next, modify the firewall settings by adding or removing services, such as using `firewall-cmd --add-service=ssh --zone=<your_chosen_zone>` to allow SSH. Then, assign a network interface to the firewall zone, making the configuration permanent if needed. Finally, verify the updated settings with `firewall-cmd --zone=<your_chosen_zone> --list-all` .
Using nftables for NAT involves creating a table and adding chains with rules for translating network addresses. For example, to redirect traffic to a specific server, use `# nft add rule nat prerouting iifname <interface> tcp dport { 80, 443 } dnat to <server-IP>`. Choosing between SNAT and masquerading depends on IP address assignment. Use masquerading for dynamic IPs (`# nft add rule nat postrouting oifname <interface> masquerade`) and SNAT for static IPs (`# nft add rule nat postrouting oifname <interface> snat to <static-IP>`). These considerations are crucial for efficient address translation based on network architecture .
Setting a target for a firewall zone is significant because it dictates how packets that do not match any specific rules are handled. The options include ACCEPT, REJECT, or DROP. REJECT informs the source machine about the packet rejection, whereas DROP silently discards the packets without notifying the origin. Setting an appropriate target is crucial for controlling network traffic as it directly impacts how unauthorized or unintended traffic is processed, influencing network security and efficiency .
The tracing feature in nftables enhances network traffic monitoring by allowing administrators to display packets that match a specific rule, providing detailed insights into traffic flow. To enable tracing, first display existing rules with handles using `nft --handle list chain <address_family> <table_name> <chain_name>`. Replace the rule with `nft replace rule <address_family> <table_name> <chain_name> handle <rule_handle> <rule_conditions> meta nftrace set 1`. Use `nft monitor` to observe the packets matching the traced rule. This setup is essential for debugging and monitoring specific traffic patterns .
Predefined services in firewalld simplify managing firewall rules by allowing users to open or close ports for services without needing to know the protocol and port numbers. To implement these services, check that the service isn't already allowed using `firewall-cmd --list-services`, list all predefined services with `firewall-cmd --get-services`, and add the service using `firewall-cmd --add-service=<service_name>`. Persist the changes with `firewall-cmd --runtime-to-permanent` to update the permanent firewall configuration .
Using nftables to create and manage basic firewall rules involves several components: tables, chains, and rules. First, create a table using `# nft add table inet <table_name>`, followed by adding a chain with `# nft add chain inet <table_name> <chain_name>`. Lastly, add rules to the chain using `# nft add rule inet <table_name> <chain_name> <rule>`, specifying the conditions and actions. Essential components include defining address families and hooks, and ensuring the correct setup for desired packet filtration and traffic management .
The procedure for removing a source from a firewall zone involves listing allowed sources using `firewall-cmd --zone=<zone-name> --list-sources`, then using `firewall-cmd --zone=<zone-name> --remove-source=<source>` to remove the source permanently. Persist changes with `firewall-cmd --runtime-to-permanent`. After removal, traffic originating from the source no longer follows the zone's rules and instead reverts to the default zone or the rules of the associated interface. This ensures tighter control of traffic flow and reduces the risk of unauthorized access if the source's trust status changes .
Policy objects in firewalld are used to control the flow of network data between different zones by defining rules and policies, managing access control for local and remote networks. This relationship affects traffic by allowing administrators to implement access controls that determine how traffic is allowed or blocked between zones, optimizing the flow for security and performance while ensuring compliance with security policies .
To allow a specific source IP address in a trusted zone, first list all available zones with `firewall-cmd --get-zones`. Then, use `firewall-cmd --zone=trusted --add-source=<source IP>` to add the IP address to the trusted zone in a permanent mode. Persist the configuration with `firewall-cmd --runtime-to-permanent`. This configuration allows network traffic from the specified IP without restriction according to the zone's configuration, which can be beneficial for trusted internal sources but poses a risk if the IP address becomes compromised .