为什么 iptables 看不到使用firewalld 添加的规则?

为什么 iptables 看不到使用firewalld 添加的规则?

我有一台 CentOS7 机器,我使用firewalld作为防火墙。最近我使用以下方法添加了一些规则firewall-cmd

# Removing DOCKER-USER CHAIN (it won't exist at first)
firewall-cmd --permanent --direct --remove-chain ipv4 filter DOCKER-USER

# Flush rules from DOCKER-USER chain (again, these won't exist at first; firewalld seems to remember these even if the chain is gone)
firewall-cmd --permanent --direct --remove-rules ipv4 filter DOCKER-USER

# Add the DOCKER-USER chain to firewalld
firewall-cmd --permanent --direct --add-chain ipv4 filter DOCKER-USER

# Add rules (see comments for details)
firewall-cmd --permanent --direct --add-rule ipv4 filter DOCKER-USER 0 -j REJECT -i eth0 -dport 27017

我重新启动并检查了direct.xml文件;规则在那里。我使用防火墙命令检查并查看了链和规则:

firewall-cmd --permanent --direct --get-rules ipv4 filter DOCKER-USER
0 -j REJECT -i eth0 -dport 27017

但是,如果我执行iptables -nvL,我在任何地方都看不到该链:

iptables -nvL |grep DOCKER
    0     0 DOCKER-ISOLATION  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
    0     0 DOCKER     all  --  *      docker0  0.0.0.0/0            0.0.0.0/0           
Chain DOCKER (1 references)
Chain DOCKER-ISOLATION (1 references)

如果我使用firewall-cmd,则看不到使用iptables其中任何一个出现的链。例如,我确实有一个f2b-sshd由 fail2ban 创建的链,但它没有返回任何内容:

firewall-cmd --permanent --direct --get-rules ipv4 filter f2b-sshd

发生了什么事?我认为 iptables 和 firewalld 都只是操纵了底层内核,它们只是同一事物的不同接口。为什么其中一个看不到另一个创建的规则?哪些规则占上风?

答案1

好的,我查看了错误日志。

firewalld[573]: ERROR: '/usr/sbin/iptables-restore -w -n' failed: iptables-restore v1.4.21: The -t option (seen in line 3) cannot be used in iptables-restore.

所以这就是规则没有出现的原因:它们没有被应用。

现在的问题是:如何使用firewalld向给定的表或链添加规则......

答案2

为了能够将 iptables 与 firewalld 一起使用,您需要确保将 firewalld.conf 文件配置为 FirewallBackend=iptables。它的默认值是 nftables,但如果您将其设置为 iptables 并重新启动 firewalld,您将能够像我们习惯的那样使用 iptables。

相关内容