Firewall重载报错

故障处理 / 2021-12-01

Firewall重载报错

1、报错信息

在为Keepalived配置防火墙规则时,我使用firewall-cmd执行了一条错误的命令,导致我每次重载firewall时都报错,如下所示:

[sanxi@sanxi-aero15sa ~]$ sudo firewall-cmd --reload
Error: COMMAND_FAILED: Direct: '/usr/bin/iptables-restore -w -n' failed: Bad argument `source'
Error occurred at line: 2                                                               

Try `iptables-restore -h' or 'iptables-restore --help' for more information.

2、开启调试模式

编辑firewalld.conf,将默认的no改为yes方便调试

vim /etc/firewalld/firewalld.conf
# IndividualCalls=yes

3、详细报错信息

开启调试模式后,发现是之前执行的命令有误,且被保存到规则文件中,导致每次重载时firewalld都会调用iptables建立该规则,因此每次重载都会报错。

Error: COMMAND_FAILED: Direct: '/usr/bin/iptables -w10 -t filter -I INPUT 1 source address=132.108.225.6 --destination 224.0.0.18 --protocol vrrp -j ACCEPT' failed: Bad argument `source'
Try `iptables -h' or 'iptables --help' for more information.

4、处理方法

找到这条错误的命令完整命令,根据命令的选项判断该命令被写入哪个xml规则文件中,也可以用土方法一个一个文件去看。

比如我当初使用了--direct选项,所以需要找到direct.xml,把残留的错误命令从xml文件中删除。

自定义firewall规则文件的目录为/etc/firewalld/

[sanxi@sanxi-aero15sa ~]$ tree /etc/firewalld/
/etc/firewalld/
├── direct.xml
├── firewalld.conf
├── helpers
├── icmptypes
├── ipsets
├── lockdown-whitelist.xml
├── policies
├── services
└── zones
    ├── public.xml
    ├── public.xml.bak
    └── public.xml.old

6 directories, 6 files

编辑direct.xml

将错误的rule直接删除,保存退出。

 <?xml version="1.0" encoding="utf-8"?>
<direct>
  <rule ipv="ipv4" table="filter" chain="INPUT" priority="0">source address=132.108.225.6 --destination 224.0.2.88 --protocol vrrp -j ACCEPT</rule>
</direct>

5、再次重载firewall

重载成功!

[sanxi@sanxi-aero15sa ~]$ sudo firewall-cmd --reload
success
世间微尘里 独爱茶酒中