問題
新しいポートを開くか、firewalld にサービスを追加しましたが、エラーは発生しません。サーバーでは、以下の出力のようにポート 80 が開かれます:
# 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:
しかし、別のホストから接続しようとすると、以下のエラーが報告されます:
$ nc -v [SERVER_IP_ADDRESS] 80 Ncat: Version 7.50 ( https://nmap.org/ncat ) Ncat: No route to host.
解決策
デフォルトでは、firewalld バックエンドは nftables に設定されています。 firewalld によって使用される直接ルールは、ルールの適用方法に影響を与える可能性があります:
パケットを ACCEPT するという直接的な規則では、実際にはパケットがシステムによってすぐに受け入れられることはありません。これらのパケットは引き続き、firewalld の nftables ルールセットの対象となります。パケットをドロップする直接ルールの場合、パケットはすぐにドロップされます。一般的な DROP または REJECT ルールが直接ルールの最後として構成されている場合、すべての nftables ルールが無視されます。
次のコマンドの最後の行は一例です:
# 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
また、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>
直接ルールが本当に必要かどうかを確認します。おそらく、重要なルールは「通常の」ルールですでに構成されています。直接ルールを完全に削除するには、ファイル /etc/firewalld/direct.xml を削除します .
# mv /etc/firewalld/direct.xml /etc/firewalld/direct.xml_bck
直接ルールが必要な場合は、直接ルールの REJECT を使用して最後のリソース ルールを削除し、nftables/firewalld で構成します。