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.