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