Bugzilla will be upgraded to version 5.0. The upgrade date is tentatively scheduled for 2 December 2018, pending final testing and feedback.
Bug 1452137 - firewall-cmd: man page should mention that reload does not purge direct runtime rules
firewall-cmd: man page should mention that reload does not purge direct runti...
Status: CLOSED ERRATA
Product: Red Hat Enterprise Linux 7
Classification: Red Hat
Component: firewalld (Show other bugs)
7.3
x86_64 Unspecified
medium Severity medium
: rc
: ---
Assigned To: Phil Sutter
Tomas Dolezal
: ManPageChange
Depends On:
Blocks: 1472751
  Show dependency treegraph
 
Reported: 2017-05-18 08:21 EDT by lubomir.prda
Modified: 2018-04-10 06:31 EDT (History)
5 users (show)

See Also:
Fixed In Version: firewalld-0.4.4.4-11.el7
Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of:
Environment:
Last Closed: 2018-04-10 06:30:16 EDT
Type: Bug
Regression: ---
Mount Type: ---
Documentation: ---
CRM:
Verified Versions:
Category: ---
oVirt Team: ---
RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: ---


Attachments (Terms of Use)


External Trackers
Tracker ID Priority Status Summary Last Updated
Red Hat Product Errata RHEA-2018:0702 None None None 2018-04-10 06:31 EDT

  None (edit)
Description lubomir.prda 2017-05-18 08:21:22 EDT
When adding direct firewall rule to runtime, this does not get wiped on firewalld reload. Therefore custom admin user rules cannot be purged without restarting firewalld or removing rules one by one. (in our case puppet cannot get rid of any custom rules)

Version:0.4.3.2-8.1.el7_3.2

Reproduction steps:
1. First we add direct rule into firewalld:
# firewall-cmd --direct --add-rule ipv4 filter INPUT 120 -m state --state NEW -s 10.0.16.0/24 -m tcp -p tcp --dport 55555 -j ACCEPT

2. Check if the rule has been added correctly:
# firewall-cmd --direct --get-all-rules | grep 55555
ipv4 filter INPUT 120 -m state --state NEW -s 10.0.16.0/24 -m tcp -p tcp --dport 55555 -j ACCEPT

3. Reload firewalld so only permanent rules should reapply
# firewall-cmd --reload
-OR-
# systemctl reload firewalld
-OR-
# firewall-cmd --complete-reload

4. Check if the rule is still present:
# firewall-cmd --direct --get-all-rules | grep 55555
ipv4 filter INPUT 120 -m state --state NEW -s 10.0.16.0/24 -m tcp -p tcp --dport 55555 -j ACCEPT

- empty response was expected but the rule is still present. The rule is successfully removed only after restarting firewalld:
# systemctl restart firewalld
Comment 2 Thomas Woerner 2017-05-29 07:41:09 EDT
firewalld is trying to keep runtime only direct rules while reloading to minimize the need to recreate rules added by services and applications.
Comment 4 lubomir.prda 2017-05-29 09:01:01 EDT
There are multiple problems with this approach:

1. Is this documented somewhere? I have tried to find some mention of this in manpages, but was not successful. According them, everything, that is not in config should be purged after reload.

2. Even if this was true, firewalld should not retain rules put in runtime by itself. It should know, that the rule was not created by some service, but itself. Also we do not want other services to punch holes through firewall. That is why firewall is there in the first place.

3. So we are not able to purge  unwanted direct rules via remote management at all. No switch? Only complete restart of firewalld?
Comment 6 Eric Garver 2017-09-07 14:01:00 EDT
(In reply to lubomir.prda from comment #4)
> There are multiple problems with this approach:
> 
> 1. Is this documented somewhere? I have tried to find some mention of this
> in manpages, but was not successful. According them, everything, that is not
> in config should be purged after reload.

This caveat should probably be added to the man page under --reload/--complete-reload. I'll use this BZ as the work item for that.

> 
> 2. Even if this was true, firewalld should not retain rules put in runtime
> by itself. It should know, that the rule was not created by some service,
> but itself. Also we do not want other services to punch holes through
> firewall. That is why firewall is there in the first place.

Only applications authenticated via policy kit can add direct rules.

> 
> 3. So we are not able to purge  unwanted direct rules via remote management
> at all. No switch? Only complete restart of firewalld?

You can remove all rules in a given chain.
e.g.

   # firewall-cmd --direct --remove-rules ipv4 filter INPUT

Or do something like this to remove direct all rules:

   # firewall-cmd --direct --get-all-rules |while read LINE; do firewall-cmd --direct --remove-rule $LINE; done
Comment 12 errata-xmlrpc 2018-04-10 06:30:16 EDT
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory, and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

https://access.redhat.com/errata/RHEA-2018:0702

Note You need to log in before you can comment on or make changes to this bug.