背景

使用firewall-cmd --reload想要重新加载防火墙配置的时候,提示以下错误:

Error: COMMAND_FAILED: Direct: '/usr/sbin/iptables-restore -w -n' failed: Bad argument `destination'
Error occurred at line: 2
Try `iptables-restore -h' or 'iptables-restore --help' for more information.

清除iptables规则

自己认为既然是Iptabels-restore报错,显然是iptables规则写的不对引起的,干脆全部清了规则,在一翻

iptables -F -t nat
iptables -F -t mangle
iptables -F -t security
iptables -F -t raw
iptables -F -t filter
iptables -F
iptables -X
iptables -Z

重新安装iptables和firewalld

操作后仍然不能解决问题,还是提示那个问题,自己还是认为要么是iptables规则没有清空,要么是firewalld没有清空,干脆重新安装Iptables和firewalld

yum reinstall iptables
yum reinstall firewalld

还是不行,我把/etc/firewall/zone/public.xml内容全部删除,仍然不行。

仍不放弃

昨天弄了一天没有搞定,本来想放弃,想着使用systemctl restart firewalld还是可以重新加载配置的,不过,想想仍心有不甘,继续谷歌,无意间又发现了网友的一个提醒: image.png 想到我也有加过direct的规则,于是查看direct的规则文件

[root@localhost-203-root-all apaas]# cat /etc/firewalld/direct.xml
<?xml version="1.0" encoding="utf-8"?>
<direct>
  <rule priority="0" table="filter" ipv="ipv4" chain="OUTPUT">destination address=10.10.10.100 port protocol=tcp port=80 reject</rule>
  <rule priority="0" table="filter" ipv="ipv4" chain="OUTPUT">-p tcp -m tcp --dport 80 -j reject</rule>
</direct>

发现貌似上面有一条有问题,将第一条给删除掉,再次执行firewall-cmd --reload,提示还报错,干脆两条都删除,重新加载,提示success

总结

看来还是学艺术不精,看网上写的direct规则随便拿来改,也不知道规则写错了,并且他的配置文件路径/etc/firewalld/direct.xml,之前要是能再去查找一下/etc/firewalld目录底下其他文件,说不定能发现问题

参考链接:https://serverfault.com/questions/901220/reset-firewalld-rules-to-default