Das Problem
Wir haben einen neuen Port geöffnet oder einen Dienst in Firewalld hinzugefügt, der ohne Fehler fehlschlägt. Im Server wird Port 80 gemäß der folgenden Ausgabe geöffnet:
# firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: ens3 sources: services: cockpit dhcpv6-client ssh ports: 80/tcp protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
Wenn Sie jedoch versuchen, eine Verbindung von einem anderen Host herzustellen, wird der folgende Fehler gemeldet:
$ nc -v [SERVER_IP_ADDRESS] 80 Ncat: Version 7.50 ( https://nmap.org/ncat ) Ncat: No route to host.
Die Lösung
Standardmäßig ist das Firewalld-Backend auf nftables konfiguriert. Direkte Regeln, die von firewalld verwendet werden, können sich auf die Art und Weise auswirken, wie die Regeln angewendet werden:
Direkte Regeln, die Pakete AKZEPTIEREN, bewirken nicht, dass die Pakete sofort vom System akzeptiert werden. Diese Pakete unterliegen weiterhin dem nftables-Regelsatz von firewalld. Bei direkten Regeln, die Pakete verwerfen, werden die Pakete sofort verworfen. Wenn eine allgemeine DROP- oder REJECT-Regel als letzte der direkten Regeln konfiguriert ist, werden alle nftables-Regeln ignoriert.
Die letzte Zeile im folgenden Befehl ist ein Beispiel:
# iptables -vnxL INPUT Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 2133 309423 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 27 1620 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 10 524 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 93 4740 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Es kann auch überprüft werden, ob es in den direkten Firewall-Regeln konfiguriert ist:
# grep -B4 INPUT /etc/firewalld/direct.xml <?xml version="1.0" encoding="utf-8"?> <direct> <passthrough ipv="ipv4">-N BareMetalInstanceServices</passthrough> <passthrough ipv="ipv4">-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT</passthrough> <passthrough ipv="ipv4">-A INPUT -p icmp -j ACCEPT</passthrough> <passthrough ipv="ipv4">-A INPUT -i lo -j ACCEPT</passthrough> <passthrough ipv="ipv4">-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT</passthrough> <passthrough ipv="ipv4">-A INPUT -j REJECT --reject-with icmp-host-prohibited</passthrough>
Überprüfen Sie, ob direkte Regeln wirklich notwendig sind, wahrscheinlich sind die wichtigen Regeln bereits in „normalen“ Regeln konfiguriert. Um direkte Regeln vollständig zu entfernen, entfernen Sie die Datei /etc/firewalld/direct.xml .
# mv /etc/firewalld/direct.xml /etc/firewalld/direct.xml_bck
Wenn direkte Regeln benötigt werden, entfernen Sie die letzte Ressourcenregel mit REJECT in den direkten Regeln und konfigurieren Sie sie in nftables/firewalld.