Il problema
Abbiamo aperto una nuova porta o aggiunto un servizio in firewalld fail senza errori. Nel server, la porta 80 viene aperta come indicato di seguito:
# 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:
Ma quando si tenta di connettersi da un altro host, viene segnalato l'errore seguente:
$ nc -v [SERVER_IP_ADDRESS] 80 Ncat: Version 7.50 ( https://nmap.org/ncat ) Ncat: No route to host.
La soluzione
Per impostazione predefinita, il backend firewalld è configurato su nftables. Le regole dirette utilizzate da firewalld potrebbero influire sul modo in cui vengono applicate le regole:
Le regole dirette che ACCETTANO i pacchetti in realtà non fanno sì che i pacchetti vengano accettati immediatamente dal sistema. Questi pacchetti sono ancora soggetti al set di regole nftables di firewalld. Per le regole dirette che rilasciano pacchetti, i pacchetti vengono immediatamente eliminati. Se una regola generale DROP o REJECT è configurata come l'ultima delle regole dirette, tutte le regole di nftables verranno ignorate.
L'ultima riga del comando seguente è un esempio:
# 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
Si può anche verificare che sia configurato nelle regole dirette del firewall:
# 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>
Verifica se le regole dirette sono davvero necessarie, probabilmente le regole importanti sono già configurate in regole “normali”. Per rimuovere completamente le regole dirette, rimuovi il file /etc/firewalld/direct.xml .
# mv /etc/firewalld/direct.xml /etc/firewalld/direct.xml_bck
Se sono necessarie regole dirette, rimuovi l'ultima regola della risorsa, con REJECT, nelle regole dirette e configurala in nftables/firewalld.