Andy Kurth created VCL-1102:
-------------------------------
Summary: rules and chains are not being removed with older
versions of firewalld
Key: VCL-1102
URL: https://issues.apache.org/jira/browse/VCL-1102
Project: VCL
Issue Type: Bug
Components: vcld (backend)
Affects Versions: 2.5
Reporter: Andy Kurth
I had a CentOS 7.0 reservation and noticed someone pecking from a Chinese IP:
{panel}
{{Jun 26 13:32:39 centos7 sshd[5413]: Failed password for invalid user root
from *[CHINESE IP]* port 44276 ssh2}}
{panel}
This shouldn't be possible if the firewall is configured correctly. VCL
limits access to the reservation user's IP address once they connect.
The problem was that the *_vcl-reserved_* chain was still present after I
logged in and the request state was _inuse_. This chain should have been
deleted. This is a security problem because the vcl-reserved chain is what is
used to temporarily open access from any remote IP address.
Once a user connection is detected, the code adds another _*vcl-post_load*_
with IP restricted rules and deletes the _*vcl-reserved*_ chain. Based on the
vcld.log output, the VCL code appears to have done this:
{panel}
{{firewalld.pm:remove_direct_chain_rules|369|{color:#14892c}*removed direct
rule*{color} from 'vcl-reserved' chain in}}
{{'filter' table on vclv99-68: '0 --jump ACCEPT --protocol tcp --match comment
--comment 'VCL: allow traffic from any IP address to connect meth}}
{{od ports during reserved stage of reservation 3527645 (2018-06-26 15:03:35)'
--match tcp --dport 22'}}{panel}
{panel}
{{{color:#333333}firewalld.pm:delete_chain|440|{color:#14892c}*deleted
'vcl-reserved' chain*{color}{color} in 'filter' table on <VM>}}
{panel}
The previous commands use the *_--permanent_* argument, so afterwards the code
runs *firewall-cmd --reload* to enact the saved, permanent the configuration:
{panel}
{{firewalld.pm:save_configuration|261|reloaded firewalld configuration on
vclv99-101}}
{panel}
As an added check, the code makes sure no lines got left in direct.xml:
{panel}
{{no lines were pruned from /etc/firewalld/direct.xml matching pattern:
'filter.*jump\s+vcl-reserved'}}{panel}
So, it looks like the code is doing things correctly. I then tried to manually
ran the commands as root:
*iptables -nL*
{panel}
{{Chain vcl-reserved (1 references)}}
{{ target prot opt source destination}}
{{ ACCEPT tcp – 0.0.0.0/0 0.0.0.0/0 /* VCL: allow traffic from any IP address
to connect method ports during reserved stage of reservation 3527645
(2018-06-26 15:03:35) */ tcp dpt:22}}{panel}
*firewall-cmd --permanent --direct --remove-rule ipv4 filter vcl-reserved 0
--jump ACCEPT --protocol tcp --match comment --comment 'VCL: allow traffic from
any IP address to connect method ports during reserved stage of reservation
3527645 (2018-06-26 15:03:35)' --match tcp --dport 22*
**
{panel}
{color:#14892c}*{{success}}*{color}{panel}
*firewall-cmd --reload*
{panel}
firewall-cmd --complete-reload
success{panel}
Still there:
*iptables -nL*
{panel}
{{Chain vcl-reserved (1 references)}}
{{target prot opt source destination}}
{{ACCEPT tcp – 0.0.0.0/0 0.0.0.0/0 /* VCL: allow traffic from any IP address to
connect method ports during reserved stage of reservation 3527645 (2018-06-26
15:03:35) */ tcp dpt:22}}{panel}
Try --complete-reload:
*firewall-cmd --complete-reload*
**
{panel}
{color:#14892c}{{success}}{color}{panel}
Still there:
*iptables -nL*
{panel}
{{Chain vcl-reserved (1 references)}}
{{target prot opt source destination}}
{{ACCEPT tcp – 0.0.0.0/0 0.0.0.0/0 /* VCL: allow traffic from any IP address to
connect method ports during reserved stage of reservation 3527645 (2018-06-26
15:03:35) */ tcp dpt:22}}{panel}
Restart service:
*systemctl restart firewalld*
*iptables -nL*
vcl-reserved rule is gone.
This was an old 7.0 version of CentOS. I tried a revision of the same image
that had been updated to CentOS 7.3 and it behaved differently, not exhibiting
this problem. The vcl-reserved chain had been removed during the vcld steps.
So, it seems as though *firewall-cmd --reload* isn't sufficient for some older
versions of firewalld. The code needs to be extended with additional checks.
If the chain still exists after attempts to delete it seemed to be successful,
the firewalld service should be restarted.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)