Le problème
Nous avons ouvert un nouveau port ou ajouté un service dans firewalld échouer sans erreur. Dans le serveur, le port 80 est ouvert comme indiqué ci-dessous :
# 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:
Mais lorsque vous essayez de vous connecter à partir d'un autre hôte, l'erreur ci-dessous est signalée :
$ nc -v [SERVER_IP_ADDRESS] 80 Ncat: Version 7.50 ( https://nmap.org/ncat ) Ncat: No route to host.
La solution
Par défaut, le backend firewalld est configuré sur nftables. Les règles directes utilisées par firewalld peuvent avoir un impact sur la manière dont les règles sont appliquées :
Les règles directes qui ACCEPTENT les paquets n'entraînent pas réellement l'acceptation immédiate des paquets par le système. Ces paquets sont toujours soumis au jeu de règles nftables de firewalld. Pour les règles directes qui abandonnent les paquets, les paquets sont immédiatement abandonnés. Si une règle générale DROP ou REJECT est configurée comme la dernière des règles directes, toutes les règles nftables seront ignorées.
La dernière ligne de la commande suivante en est un exemple :
# 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
Il peut également être vérifié qu'il est configuré dans les règles directes du pare-feu :
# 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>
Vérifiez si les règles directes sont vraiment nécessaires, probablement les règles importantes sont déjà configurées dans les règles « normales ». Pour supprimer complètement les règles directes, supprimez le fichier /etc/firewalld/direct.xml .
# mv /etc/firewalld/direct.xml /etc/firewalld/direct.xml_bck
Si des règles directes sont nécessaires, supprimez la dernière règle de ressource, avec REJECT, dans les règles directes et configurez-la dans nftables/firewalld.