El problema
Hemos abierto un nuevo puerto o agregado un servicio en firewalld fail sin error. En el servidor, el puerto 80 se abre según el siguiente resultado:
# 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:
Pero al intentar conectarse desde otro host, se informa el siguiente error:
$ nc -v [SERVER_IP_ADDRESS] 80 Ncat: Version 7.50 ( https://nmap.org/ncat ) Ncat: No route to host.
La solución
De manera predeterminada, el backend de firewalld está configurado para nftables. Las reglas directas utilizadas por firewalld pueden afectar la forma en que se aplican las reglas:
Las reglas directas que ACCEPT paquetes en realidad no hacen que los paquetes sean aceptados inmediatamente por el sistema. Esos paquetes todavía están sujetos al conjunto de reglas nftables de firewalld. Para las reglas directas que DROP paquetes, los paquetes se descartan inmediatamente. Si se configura una regla general DROP o REJECT como la última de las reglas directas, hará que se ignoren todas las reglas de nftables.
La última línea del siguiente comando es un ejemplo:
# 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
También se puede comprobar que está configurado en reglas directas de firewalld:
# 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>
Verifique si las reglas directas son realmente necesarias, probablemente las reglas importantes ya estén configuradas en reglas "normales". Para eliminar completamente las reglas directas, elimine el archivo /etc/firewalld/direct.xml .
# mv /etc/firewalld/direct.xml /etc/firewalld/direct.xml_bck
Si se necesitan reglas directas, elimine la regla del último recurso, con REJECT, en las reglas directas y configúrela en nftables/firewalld.