Centos

firewalld 在 CentOS 8 中不起作用:在 iptables 中根本沒有創建任何規則

  • December 24, 2019

我最近使用本教程將全新安裝的 CentOS 7 升級到 CentOS 8:

https://www.tecmint.com/upgrade-centos-7-to-centos-8/

我沒有安裝額外的軟體,只有基本安裝。升級後,我嘗試做的第一件事是只打開 SSH 和 HTTP 的門,所以我啟用並啟動了 firewalld:

systemctl enable firewalld
systemctl start firewalld
systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
  Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
  Active: active (running) since Tue 2019-12-24 11:05:50 -02; 10min ago
    Docs: man:firewalld(1)
Main PID: 7620 (firewalld)
   Tasks: 2 (limit: 17886)
  Memory: 22.1M
  CGroup: /system.slice/firewalld.service
          └─7620 /usr/libexec/platform-python -s /usr/sbin/firewalld --nofork --nopid

dez 24 11:05:49 renie.cc systemd[1]: Stopped firewalld - dynamic firewall daemon.
dez 24 11:05:49 renie.cc systemd[1]: Starting firewalld - dynamic firewall daemon...
dez 24 11:05:50 renie.cc systemd[1]: Started firewalld - dynamic firewall daemon.

然後添加 ssh 和 http 服務:

firewall-cmd --add-service http
firewall-cmd --add-service http --permanent
firewall-cmd --add-service ssh
firewall-cmd --add-service ssh --permanent
firewall-cmd --add-service ssh
firewall-cmd --list-all
public (active)
 target: default
 icmp-block-inversion: no
 interfaces: eth0
 sources: 
 services: http ssh
 ports: 
 protocols: 
 masquerade: no
 forward-ports: 
 source-ports: 
 icmp-blocks: 
 rich rules: 

但我在 IPTables 中根本看不到任何規則:

iptables -nvL
Chain INPUT (policy ACCEPT 143 packets, 13998 bytes)
pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 114 packets, 13295 bytes)
pkts bytes target     prot opt in     out     source               destination         

即使在重新啟動伺服器後,也不會創建任何規則。這可能是由 CentOS 7 → CentOS 8 升級引起的嗎?

在升級此伺服器之前,我沒有測試或使用 firewalld,但我有其他 CentOS 7 伺服器有工作的 firewalld。

有沒有我可以分析的日誌來調試問題?

提前致謝。

因為你沒有看到任何iptables規則,並不意味著firewalld沒有工作。實際上, firewalld轉而使用nftables作為後端。所以你可以找到你的規則,例如:

nft list ruleset

您為sshhttp添加的規則可能在鏈中filter_IN_public_allow

       chain filter_IN_public_allow {
               tcp dport ssh ct state new,untracked accept
               tcp dport http ct state new,untracked accept
       }

您可能還會在 的輸出中找到空的iptables規則(但被視為nftables規則)nft list ruleset,因為iptables使用的是nftables兼容性核心 API:

# iptables -V
iptables v1.8.2 (nf_tables)

有用的連結:Redhat - Firewalld: The Future is nftables

引用自:https://serverfault.com/questions/996664