GNU/Linux >> Linux の 問題 >  >> Linux

CentOS/RHEL 8 で Firewalld ポートを開く際の問題

問題

新しいポートを開くか、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 で構成します。


Linux
  1. CentOS/RHEL 7 で IPset ルールを IPtables から Firewalld に変更する

  2. RHEL/CentOS 7 で Apache のデフォルト ポートを変更する方法

  3. CentOS / RHEL 6 :iptables ルールを保存する方法

  1. CentOS / RHEL 7 :firewalld から iptables に切り替える方法

  2. CentOS / RHEL :ネットワーク ポートが開いているかどうかを確認する方法は?

  3. CentOS / RHEL :iptable ルールを追加する方法

  1. CentOS / RHEL 7 :firewalld の初心者向けガイド

  2. CentOS / RHEL 7 :firewall-cmd を使用してファイアウォールでポートを開く方法は?

  3. CentOS / RHEL 7 :FirewallD を使用して Samba サーバーのファイアウォール ポートを開く方法