23.5. firewalld の使用および設定


ファイアウォール は、外部からの不要なトラフィックからマシンを保護する方法です。ファイアウォールルール セットを定義することで、ホストマシンへの着信ネットワークトラフィックを制御できます。このようなルールは、着信トラフィックを分類して、拒否または許可するために使用されます。

firewalld は、D-Bus インターフェイスを使用して、動的にカスタマイズできるホストベースのファイアウォールを提供するファイアウォールサービスデーモンです。ルールが変更するたびに、ファイアウォールデーモンを再起動しなくても、ルールの作成、変更、および削除を動的に可能にします。

firewalld は、ゾーンおよびサービスの概念を使用して、トラフィック管理を簡素化します。ゾーンは、事前定義したルールセットです。ネットワークインターフェイスおよびソースをゾーンに割り当てることができます。許可されているトラフィックは、コンピューターが接続するネットワークと、このネットワークが割り当てられているセキュリティーレベルに従います。ファイアウォールサービスは、特定のサービスに着信トラフィックを許可するのに必要なすべての設定を扱う事前定義のルールで、ゾーンに適用されます。

サービスは、ネットワーク接続に 1 つ以上のポートまたはアドレスを使用します。ファイアウォールは、ポートに基づいて接続のフィルターを設定します。サービスに対してネットワークトラフィックを許可するには、そのポートを開く必要があります。firewalld は、明示的に開いていないポートのトラフィックをすべてブロックします。trusted などのゾーンでは、デフォルトですべてのトラフィックを許可します。

nftables バックエンドを使用した firewalld が、--direct オプションを使用して、カスタムの nftables ルールを firewalld に渡すことに対応していないことに注意してください。

23.5.1. firewalld、nftables、または iptables を使用する場合

以下は、次のユーティリティーのいずれかを使用する必要があるシナリオの概要です。

  • firewalld:簡単なファイアウォールのユースケースには、firewalld ユーティリティーを使用します。このユーティリティーは、使いやすく、このようなシナリオの一般的な使用例に対応しています。
  • nftables:nftables ユーティリティーを使用して、ネットワーク全体など、複雑なパフォーマンスに関する重要なファイアウォールを設定します。
  • iptables:Red Hat Enterprise Linux の iptables ユーティリティーは、legacy バックエンドの代わりに nf_tables カーネル API を使用します。nf_tables API は、iptables コマンドを使用するスクリプトが、Red Hat Enterprise Linux で引き続き動作するように、後方互換性を提供します。新しいファイアウォールスクリプトの場合には、Red Hat は nftables を使用することを推奨します。
重要

さまざまなファイアウォール関連サービス (firewalldnftables、または iptables) が相互に影響を与えないようにするには、RHEL ホストでそのうち 1 つだけを実行し、他のサービスを無効にします。

23.5.2. ファイアウォールゾーン

firewalld ユーティリティーを使用すると、ネットワーク内のインターフェイスおよびトラフィックに対する信頼レベルに応じて、ネットワークをさまざまなゾーンに分離できます。接続は 1 つのゾーンにしか指定できませんが、そのゾーンは多くのネットワーク接続に使用できます。

firewalld はゾーンに関して厳格な原則に従います。

  1. トラフィックは 1 つのゾーンのみに流入します。
  2. トラフィックは 1 つのゾーンのみから流出します。
  3. ゾーンは信頼のレベルを定義します。
  4. ゾーン内トラフィック (同じゾーン内) はデフォルトで許可されます。
  5. ゾーン間トラフィック (ゾーンからゾーン) はデフォルトで拒否されます。

原則 4 と 5 は原則 3 の結果です。

原則 4 は、ゾーンオプション --remove-forward を使用して設定できます。原則 5 は、新しいポリシーを追加することで設定できます。

NetworkManager は、firewalld にインターフェイスのゾーンを通知します。次のユーティリティーを使用して、ゾーンをインターフェイスに割り当てることができます。

  • NetworkManager
  • firewall-config ユーティリティー
  • firewall-cmd ユーティリティー
  • RHEL Web コンソール

RHEL Web コンソール、firewall-config、および firewall-cmd は、 適切な NetworkManager 設定ファイルのみを編集できます。Web コンソール、firewall-cmd または firewall-config を使用してインターフェイスのゾーンを変更する場合、リクエストは NetworkManager に転送され、⁠firewalld では処理されません。

/usr/lib/firewalld/zones/ ディレクトリーには事前定義されたゾーンが保存されており、利用可能なネットワークインターフェイスに即座に適用できます。このファイルは、修正しないと /etc/firewalld/zones/ ディレクトリーにコピーされません。事前定義したゾーンのデフォルト設定は以下のようになります。

block
  • 適した例: IPv4 の場合は icmp-host-prohibited メッセージ、IPv6 の場合は icmp6-adm-prohibited メッセージで、すべての着信ネットワーク接続が拒否されます。
  • 受け入れる接続: システム内から開始したネットワーク接続のみ。
dmz
  • 適した例: パブリックにアクセス可能で、内部ネットワークへのアクセスが制限されている DMZ 内のコンピューター。
  • 受け入れる接続: 選択した着信接続のみ。
drop

適した例: 着信ネットワークパケットは、通知なしで遮断されます。

  • 受け入れる接続: 発信ネットワーク接続のみ。
external
  • 適した例: マスカレードを特にルーター用に有効にした外部ネットワーク。ネットワーク上の他のコンピューターを信頼できない状況。
  • 受け入れる接続: 選択した着信接続のみ。
home
  • 適した例: ネットワーク上の他のコンピューターをほぼ信頼できる自宅の環境。
  • 受け入れる接続: 選択した着信接続のみ。
internal
  • 適した例: ネットワーク上の他のコンピューターをほぼ信頼できる内部ネットワーク。
  • 受け入れる接続: 選択した着信接続のみ。
public
  • 適した例: ネットワーク上の他のコンピューターを信頼できないパブリックエリア。
  • 受け入れる接続: 選択した着信接続のみ。
trusted
  • 受け入れる接続: すべてのネットワーク接続。
work

適した例: ネットワーク上の他のコンピューターをほぼ信頼できる職場の環境。

  • 受け入れる接続: 選択した着信接続のみ。

このゾーンのいずれかを デフォルト ゾーンに設定できます。インターフェイス接続を NetworkManager に追加すると、デフォルトゾーンに割り当てられます。インストール時は、firewalld のデフォルトゾーンは public ゾーンです。デフォルトゾーンは変更できます。

注記

ユーザーがすぐに理解できるように、ネットワークゾーン名は分かりやすい名前にしてください。

セキュリティー問題を回避するために、ニーズおよびリスク評価に合わせて、デフォルトゾーンの設定の見直しを行ったり、不要なサービスを無効にしてください。

関連情報

  • システム上の firewalld.zone (5) man ページ

23.5.3. ファイアウォールポリシー

ファイアウォールポリシーは、ネットワークの望ましいセキュリティー状態を指定します。これらのポリシーは、さまざまなタイプのトラフィックに対して実行するルールとアクションの概要を示します。通常、ポリシーには次のタイプのトラフィックに対するルールが含まれます。

  • 着信トラフィック
  • 送信トラフィック
  • 転送トラフィック
  • 特定のサービスとアプリケーション
  • ネットワークアドレス変換 (NAT)

ファイアウォールポリシーは、ファイアウォールゾーンの概念を使用します。各ゾーンは、許可するトラフィックを決定する特定のファイアウォールルールのセットに関連付けられます。ポリシーは、ステートフルかつ一方向にファイアウォールルールを適用します。つまり、トラフィックの一方向のみを考慮します。firewalld のステートフルフィルタリングにより、トラフィックのリターンパスは暗黙的に許可されます。

ポリシーは、イングレスゾーンとエグレスゾーンに関連付けられます。イングレスゾーンは、トラフィックが発生する (受信される) 場所です。エグレスゾーンは、トラフィックが出る (送信される) 場所です。

ポリシーで定義されたファイアウォールのルールは、ファイアウォールゾーンを参照して、複数のネットワークインターフェイス全体に一貫した設定を適用できます。

23.5.4. ファイアウォールのルール

ファイアウォールのルールを使用して、ネットワークトラフィックを許可またはブロックする特定の設定を実装できます。その結果、ネットワークトラフィックのフローを制御して、システムをセキュリティーの脅威から保護できます。

ファイアウォールのルールは通常、さまざまな属性に基づいて特定の基準を定義します。属性は次のとおりです。

  • ソース IP アドレス
  • 宛先 IP アドレス
  • 転送プロトコル (TCP、UDP など)
  • ポート
  • ネットワークインターフェイス

firewalld ユーティリティーは、ファイアウォールのルールをゾーン (publicinternal など) とポリシーに整理します。各ゾーンには、特定のゾーンに関連付けられたネットワークインターフェイスのトラフィック自由度のレベルを決定する独自のルールセットがあります。

23.5.5. ゾーンの設定ファイル

firewalld ゾーン設定ファイルには、ゾーンに対する情報があります。これは、XML ファイル形式で、ゾーンの説明、サービス、ポート、プロトコル、icmp-block、マスカレード、転送ポート、およびリッチ言語ルールです。ファイル名は zone-name.xml となります。zone-name の長さは 17 文字に制限されます。ゾーンの設定ファイルは、/usr/lib/firewalld/zones/ ディレクトリーおよび /etc/firewalld/zones/ ディレクトリーに置かれています。

以下の例は、TCP プロトコルまたは UDP プロトコルの両方に、1 つのサービス (SSH) および 1 つのポート範囲を許可する設定を示します。

<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>My Zone</short>
  <description>Here you can describe the characteristic features of the zone.</description>
  <service name="ssh"/>
  <port protocol="udp" port="1025-65535"/>
  <port protocol="tcp" port="1025-65535"/>
</zone>

関連情報

  • firewalld.zone man ページ

23.5.6. 事前定義された firewalld サービス

firewalld サービスは、事前定義されたファイアウォールルールのセットで、特定のアプリケーションまたはネットワークサービスへのアクセスを定義します。各サービスは、次の要素の組み合わせを表します。

  • ローカルポート
  • ネットワークプロトコル
  • 関連するファイアウォールルール
  • ソースポートと宛先
  • サービスが有効になっている場合に自動的にロードされるファイアウォールヘルパーモジュール

サービスは複数のタスクを一度に実行するため、パケットのフィルタリングを簡素化し、時間を短縮します。たとえば、firewalld は次のタスクを一度に実行できます。

  • ポートを開く
  • ネットワークプロトコルを定義する
  • パケット転送を有効にする

サービス設定オプションと一般的なファイル情報については、システムの firewalld.service (5) man ページに記載されています。サービスは、個々の XML 設定ファイルを使用して指定し、名前は、service-name.xml のような形式になります。プロトコル名は、firewalld のサービス名またはアプリケーション名よりも優先されます。

次の方法で firewalld を設定できます。

  • 以下のユーティリティーを使用します。

    • firewall-config - グラフィカルユーティリティー
    • firewall-cmd - コマンドラインユーティリティー
    • firewall-offline-cmd - コマンドラインユーティリティー
  • /etc/firewalld/services/ ディレクトリー内の XML ファイルを編集します。

    サービスを追加または変更しない場合、対応する XML ファイルは /etc/firewalld/services/ に存在しません。/usr/lib/firewalld/services/ 内のファイルをテンプレートとして使用できます。

関連情報

  • システム上の firewalld.service (5) man ページ

23.5.7. ファイアウォールゾーンでの作業

ゾーンは、着信トラフィックをより透過的に管理する概念を表しています。ゾーンはネットワークインターフェイスに接続されているか、ソースアドレスの範囲に割り当てられます。各ゾーンは個別にファイアウォールルールを管理しますが、これにより、複雑なファイアウォール設定を定義してトラフィックに割り当てることができます。

23.5.7.1. 特定のゾーンのファイアウォール設定をカスタマイズすることによるセキュリティーの強化

ファイアウォール設定を変更し、特定のネットワークインターフェイスまたは接続を特定のファイアウォールゾーンに関連付けることで、ネットワークセキュリティーを強化できます。ゾーンの詳細なルールと制限を定義することで、意図したセキュリティーレベルに基づいて受信トラフィックと送信トラフィックを制御できます。

たとえば、次のような利点が得られます。

  • 機密データの保護
  • 不正アクセスの防止
  • 潜在的なネットワーク脅威の軽減

前提条件

  • firewalld サービスが実行している。

手順

  1. 利用可能なファイアウォールゾーンをリスト表示します。

    # firewall-cmd --get-zones

    firewall-cmd --get-zones コマンドは、システムで利用可能なすべてのゾーンを表示し、特定のゾーンの詳細は表示しません。すべてのゾーンの詳細情報を表示するには、firewall-cmd --list-all-zones コマンドを使用します。

  2. この設定に使用するゾーンを選択します。
  3. 選択したゾーンのファイアウォール設定を変更します。たとえば、SSH サービスを許可し、ftp サービスを削除するには、次のようにします。

    # firewall-cmd --add-service=ssh --zone=<your_chosen_zone>
    # firewall-cmd --remove-service=ftp --zone=<same_chosen_zone>
  4. ネットワークインターフェイスをファイアウォールゾーンに割り当てます。

    1. 使用可能なネットワークインターフェイスをリスト表示します。

      # firewall-cmd --get-active-zones

      ゾーンがアクティブかどうかは、その設定と一致するネットワークインターフェイスまたはソースアドレス範囲の存在によって決定します。デフォルトゾーンは、未分類のトラフィックに対してアクティブですが、ルールに一致するトラフィックがない場合は常にアクティブになるわけではありません。

    2. 選択したゾーンにネットワークインターフェイスを割り当てます。

      # firewall-cmd --zone=<your_chosen_zone> --change-interface=<interface_name> --permanent

      ネットワークインターフェイスをゾーンに割り当てることは、特定のインターフェイス (物理または仮想) 上のすべてのトラフィックに一貫したファイアウォール設定を適用する場合に適しています。

      firewall-cmd コマンドを --permanent オプションとともに使用すると、多くの場合、NetworkManager 接続プロファイルが更新され、ファイアウォール設定に対する変更が永続化します。この firewalld と NetworkManager の統合により、ネットワークとファイアウォールの設定に一貫性が確保されます。

検証

  1. 選択したゾーンの更新後の設定を表示します。

    # firewall-cmd --zone=<your_chosen_zone> --list-all

    コマンド出力には、割り当てられたサービス、ネットワークインターフェイス、ネットワーク接続 (ソース) を含むすべてのゾーン設定が表示されます。

23.5.7.2. デフォルトゾーンの変更

システム管理者は、設定ファイルのネットワークインターフェイスにゾーンを割り当てます。特定のゾーンに割り当てられないインターフェイスは、デフォルトゾーンに割り当てられます。firewalld サービスを再起動するたびに、firewalld は、デフォルトゾーンの設定を読み込み、それをアクティブにします。他のすべてのゾーンの設定は保存され、すぐに使用できます。

通常、ゾーンは NetworkManager により、NetworkManager 接続プロファイルの connection.zone 設定に従って、インターフェイスに割り当てられます。また、再起動後、NetworkManager はこれらのゾーンを "アクティブ化" するための割り当てを管理します。

前提条件

  • firewalld サービスが実行している。

手順

デフォルトゾーンを設定するには、以下を行います。

  1. 現在のデフォルトゾーンを表示します。

    # firewall-cmd --get-default-zone
  2. 新しいデフォルトゾーンを設定します。

    # firewall-cmd --set-default-zone <zone_name>
    注記

    この手順では、--permanent オプションを使用しなくても、設定は永続化します。

23.5.7.3. ゾーンへのネットワークインターフェイスの割り当て

複数のゾーンに複数のルールセットを定義して、使用されているインターフェイスのゾーンを変更することで、迅速に設定を変更できます。各インターフェイスに特定のゾーンを設定して、そのゾーンを通過するトラフィックを設定できます。

手順

特定インターフェイスにゾーンを割り当てるには、以下を行います。

  1. アクティブゾーン、およびそのゾーンに割り当てられているインターフェイスをリスト表示します。

    # firewall-cmd --get-active-zones
  2. 別のゾーンにインターフェイスを割り当てます。

    # firewall-cmd --zone=zone_name --change-interface=interface_name --permanent

23.5.7.4. nmcli を使用して接続にゾーンを割り当て

nmcli ユーティリティーを使用して、firewalld ゾーンを NetworkManager 接続に追加できます。

手順

  1. ゾーンを NetworkManager 接続プロファイルに割り当てます。

    # nmcli connection modify profile connection.zone zone_name
  2. 接続をアクティベートします。

    # nmcli connection up profile

23.5.7.5. 接続プロファイルファイルでネットワーク接続に手動でゾーンを割り当てる

nmcli ユーティリティーを使用して接続プロファイルを変更できない場合は、プロファイルに対応するファイルを手動で編集して、firewalld ゾーンを割り当てることができます。

注記

nmcli ユーティリティーを使用して接続プロファイルを変更し、firewalld ゾーンを割り当てる方が効率的です。詳細は、ゾーンへのネットワークインターフェイスの割り当て を参照してください。

手順

  1. 接続プロファイルへのパスとその形式を決定します。

    # nmcli -f NAME,FILENAME connection
    NAME    FILENAME
    enp1s0  /etc/NetworkManager/system-connections/enp1s0.nmconnection
    enp7s0  /etc/sysconfig/network-scripts/ifcfg-enp7s0

    NetworkManager は、さまざまな接続プロファイル形式に対して個別のディレクトリーとファイル名を使用します。

    • /etc/NetworkManager/system-connections/<connection_name>.nmconnection ファイル内のプロファイルは、キーファイル形式を使用します。
    • /etc/sysconfig/network-scripts/ifcfg-<interface_name> ファイル内のプロファイルは ifcfg 形式を使用します。
  2. 形式に応じて、対応するファイルを更新します。

    • ファイルがキーファイル形式を使用している場合は、/etc/NetworkManager/system-connections/<connection_name>.nmconnection ファイルの [connection] セクションに zone=<name> を追加します。

      [connection]
      ...
      zone=internal
    • ファイルが ifcfg 形式を使用している場合は、/etc/sysconfig/network-scripts/ifcfg-<interface_name> ファイルに ZONE=<name> を追加します。

      ZONE=internal
  3. 接続プロファイルを再読み込みします。

    # nmcli connection reload
  4. 接続プロファイルを再度アクティベートします。

    # nmcli connection up <profile_name>

検証

  • インターフェイスのゾーンを表示します。以下に例を示します。

    # firewall-cmd --get-zone-of-interface enp1s0
    internal

23.5.7.6. ifcfg ファイルでゾーンをネットワーク接続に手動で割り当て

NetworkManager で接続を管理する場合は、NetworkManager が使用するゾーンを認識する必要があります。すべてのネットワーク接続プロファイルに対してゾーンを指定できるため、ポータブルデバイスを備えたコンピューターの場所に応じて、さまざまなファイアウォール設定を柔軟に行うことができます。したがって、ゾーンおよび設定には、会社または自宅など、様々な場所を指定できます。

手順

  • 接続のゾーンを設定するには、/etc/sysconfig/network-scripts/ifcfg-connection_name ファイルを変更して、この接続にゾーンを割り当てる行を追加します。

    ZONE=zone_name

23.5.7.7. 新しいゾーンの作成

カスタムゾーンを使用するには、新しいゾーンを作成したり、事前定義したゾーンなどを使用したりします。新しいゾーンには --permanent オプションが必要となり、このオプションがなければコマンドは動作しません。

前提条件

  • firewalld サービスが実行している。

手順

  1. 新しいゾーンを作成します。

    # firewall-cmd --permanent --new-zone=zone-name
  2. 新しいゾーンを使用可能にします。

    # firewall-cmd --reload

    このコマンドは、すでに実行中のネットワークサービスを中断することなく、最近の変更をファイアウォール設定に適用します。

検証

  • 作成したゾーンが永続設定に追加されたかどうかを確認します。

    # firewall-cmd --get-zones --permanent

23.5.7.8. Web コンソールを使用したゾーンの有効化

RHEL Web コンソールを使用して、事前定義された既存のファイアウォールゾーンを特定のインターフェイスまたは IP アドレスの範囲に適用できます。

前提条件

手順

  1. RHEL 8 Web コンソールにログインします。

    詳細は、Web コンソールへのログイン を参照してください。

  2. Networking をクリックします。
  3. ルールとゾーンの編集 ボタンをクリックします。

    Edit firewall rules and zones in the web console

    ルールとゾーンの編集 ボタンが表示されない場合は、管理者権限で Web コンソールにログインしてください。

  4. Firewall セクションの Add new zone をクリックします。
  5. ゾーンの追加 ダイアログボックスで、信頼レベル オプションからゾーンを選択します。

    Web コンソールには、firewalld サービスで事前定義されたすべてのゾーンが表示されます。

  6. インターフェイス で、選択したゾーンが適用されるインターフェイスを選択します。
  7. 許可されたサービス で、ゾーンを適用するかどうかを選択できます。

    • サブネット全体
    • または、以下の形式の IP アドレスの範囲

      • 192.168.1.0
      • 192.168.1.0/24
      • 192.168.1.0/24, 192.168.1.0
  8. Add zone ボタンをクリックします。

    Add a firewall zone

検証

  • Firewall セクションの設定を確認します。

    Active zones

23.5.7.9. Web コンソールを使用したゾーンの無効化

Web コンソールを使用して、ファイアウォール設定のファイアウォールゾーンを無効にできます。

前提条件

手順

  1. RHEL 8 Web コンソールにログインします。

    詳細は、Web コンソールへのログイン を参照してください。

  2. Networking をクリックします。
  3. ルールとゾーンの編集 ボタンをクリックします。

    cockpit edit rules and zones

    ルールとゾーンの編集 ボタンが表示されない場合は、管理者権限で Web コンソールにログインしてください。

  4. 削除するゾーンの オプションアイコン をクリックします。

    cockpit delete zone

  5. Delete をクリックします。

これでゾーンが無効になり、そのゾーンに設定されたオープンなサービスおよびポートがインターフェイスに含まれなくなります。

23.5.7.10. 着信トラフィックにデフォルトの動作を設定するゾーンターゲットの使用

すべてのゾーンに対して、特に指定されていない着信トラフィックを処理するデフォルト動作を設定できます。そのような動作は、ゾーンのターゲットを設定することで定義されます。4 つのオプションがあります。

  • ACCEPT:指定したルールで許可されていないパケットを除いた、すべての着信パケットを許可します。
  • REJECT:指定したルールで許可されているパケット以外の着信パケットをすべて拒否します。firewalld がパケットを拒否すると、送信元マシンに拒否について通知されます。
  • DROP:指定したルールで許可されているパケット以外の着信パケットをすべて破棄します。firewalld がパケットを破棄すると、ソースマシンにパケット破棄の通知がされません。
  • default:REJECT と似ていますが、特定のシナリオで特別な意味を持ちます。

前提条件

  • firewalld サービスが実行している。

手順

ゾーンにターゲットを設定するには、以下を行います。

  1. 特定ゾーンに対する情報をリスト表示して、デフォルトゾーンを確認します。

    # firewall-cmd --zone=zone-name --list-all
  2. ゾーンに新しいターゲットを設定します。

    # firewall-cmd --permanent --zone=zone-name --set-target=<default|ACCEPT|REJECT|DROP>

関連情報

  • システム上の firewall-cmd(1) man ページ

23.5.8. firewalld でネットワークトラフィックの制御

firewalld パッケージは、事前定義された多数のサービスファイルをインストールし、それらをさらに追加したり、カスタマイズしたりできます。さらに、これらのサービス定義を使用して、サービスが使用するプロトコルとポート番号を知らなくても、サービスのポートを開いたり閉じたりできます。

23.5.8.1. CLI を使用した事前定義サービスによるトラフィックの制御

トラフィックを制御する最も簡単な方法は、事前定義したサービスを firewalld に追加する方法です。これにより、必要なすべてのポートが開き、service definition file に従ってその他の設定が変更されます。

前提条件

  • firewalld サービスが実行している。

手順

  1. firewalld のサービスがまだ許可されていないことを確認します。

    # firewall-cmd --list-services
    ssh dhcpv6-client

    このコマンドは、デフォルトゾーンで有効になっているサービスをリスト表示します。

  2. firewalld のすべての事前定義サービスをリスト表示します。

    # firewall-cmd --get-services
    RH-Satellite-6 amanda-client amanda-k5-client bacula bacula-client bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client dns docker-registry ...

    このコマンドは、デフォルトゾーンで利用可能なサービスのリストを表示します。

  3. firewalld が許可するサービスのリストにサービスを追加します。

    # firewall-cmd --add-service=<service_name>

    このコマンドは、指定したサービスをデフォルトゾーンに追加します。

  4. 新しい設定を永続化します。

    # firewall-cmd --runtime-to-permanent

    このコマンドは、これらのランタイムの変更をファイアウォールの永続的な設定に適用します。デフォルトでは、これらの変更はデフォルトゾーンの設定に適用されます。

検証

  1. すべての永続的なファイアウォールのルールをリスト表示します。

    # firewall-cmd --list-all --permanent
    public
      target: default
      icmp-block-inversion: no
      interfaces:
      sources:
      services: cockpit dhcpv6-client ssh
      ports:
      protocols:
      forward: no
      masquerade: no
      forward-ports:
      source-ports:
      icmp-blocks:
      rich rules:

    このコマンドは、デフォルトのファイアウォールゾーン (public) の永続的なファイアウォールのルールを含む完全な設定を表示します。

  2. firewalld サービスの永続的な設定の有効性を確認します。

    # firewall-cmd --check-config
    success

    永続的な設定が無効な場合、コマンドは詳細を含むエラーを返します。

    # firewall-cmd --check-config
    Error: INVALID_PROTOCOL: 'public.xml': 'tcpx' not from {'tcp'|'udp'|'sctp'|'dccp'}

    永続的な設定ファイルを手動で検査して設定を確認することもできます。メインの設定ファイルは /etc/firewalld/firewalld.conf です。ゾーン固有の設定ファイルは /etc/firewalld/zones/ ディレクトリーにあり、ポリシーは /etc/firewalld/policies/ ディレクトリーにあります。

23.5.8.2. GUI を使用した事前定義サービスによるトラフィックの制御

グラフィカルユーザーインターフェイスを使用して、事前定義されたサービスでネットワークトラフィックを制御できます。Firewall Configuration アプリケーションは、コマンドラインユーティリティーに代わる、アクセスしやすくユーザーフレンドリーな代替手段を提供します。

前提条件

  • firewall-config パッケージがインストールされている。
  • firewalld サービスが実行している。

手順

  1. 事前定義したサービスまたはカスタマイズしたサービスを有効または無効にするには、以下を行います。

    1. firewall-config ユーティリティーを起動して、サービスを設定するネットワークゾーンを選択します。
    2. Zones タブを選択してから、下の Services タブを選択します。
    3. 信頼するサービスのタイプごとにチェックボックスをオンにするか、チェックボックスをオフにして、選択したゾーンのサービスをブロックします。
  2. サービスを編集するには、以下を行います。

    1. firewall-config ユーティリティーを起動します。
    2. Configuration メニューから Permanent を選択します。Services ウィンドウの下部に、その他のアイコンおよびメニューボタンが表示されます。
    3. 設定するサービスを選択します。

PortsProtocolsSource Port のタブでは、選択したサービスのポート、プロトコル、およびソースポートの追加、変更、ならびに削除が可能です。モジュールタブは、Netfilter ヘルパーモジュールの設定を行います。Destination タブは、特定の送信先アドレスとインターネットプロトコル (IPv4 または IPv6) へのトラフィックが制限できます。

注記

Runtime モードでは、サービス設定を変更できません。

検証

  • Super キーを押して、アクティビティーの概要に入ります。
  • Firewall Configuration ユーティリティーを選択します。

    • コマンドラインで firewall-config コマンドを入力して、グラフィカルファイアウォール設定ユーティリティーを起動することもできます。
  • ファイアウォールの設定のリストを表示します。

    ファイアウォール設定

Firewall Configuration ウィンドウが開きます。このコマンドは通常のユーザーとして実行できますが、監理者パスワードが求められる場合もあります。

23.5.8.3. Web コンソールを使用したファイアウォールのサービスの有効化

デフォルトでは、サービスはデフォルトのファイアウォールゾーンに追加されます。他のネットワークインターフェイスで別のファイアウォールゾーンも使用する場合は、最初にゾーンを選択してから、そのサービスをポートとともに追加する必要があります。

RHEL 8 Web コンソールには、事前定義の firewalld サービスが表示され、それらをアクティブなファイアウォールゾーンに追加することができます。

重要

RHEL 8 Web コンソールは、firewalld サービスを設定します。

また、Web コンソールは、Web コンソールに追加されていない一般的な firewalld ルールを許可しません。

前提条件

手順

  1. RHEL 8 Web コンソールにログインします。

    詳細は、Web コンソールへのログイン を参照してください。

  2. Networking をクリックします。
  3. ルールとゾーンの編集 ボタンをクリックします。

    cockpit edit rules and zones

    ルールとゾーンの編集 ボタンが表示されない場合は、管理者権限で Web コンソールにログインしてください。

  4. Firewall セクションで、サービスを追加するゾーンを選択し、Add Services をクリックします。

    cockpit add services

  5. サービスの追加 ダイアログボックスで、ファイアウォールで有効にするサービスを見つけます。
  6. シナリオに応じてサービスを有効にします。

    cockpit add service

  7. Add Services をクリックします。

この時点で、RHEL 8 Web コンソールは、ゾーンの Services リストにサービスを表示します。

23.5.8.4. Web コンソールを使用したカスタムポートの設定

RHEL Web コンソールを使用して、サービスのカスタムポートを追加および設定できます。

前提条件

手順

  1. RHEL 8 Web コンソールにログインします。

    詳細は、Web コンソールへのログイン を参照してください。

  2. Networking をクリックします。
  3. ルールとゾーンの編集 ボタンをクリックします。

    cockpit edit rules and zones

    ルールとゾーンの編集 ボタンが表示されない場合は、Web コンソールに管理者権限でログインしてください。

  4. ファイアウォール セクションで、カスタムポートを設定するゾーンを選択し、サービスの追加 をクリックします。

    RHEL web console: Add services

  5. サービスの追加 ダイアログボックスで、カスタムポート ラジオボタンをクリックします。
  6. TCP フィールドおよび UDP フィールドに、例に従ってポートを追加します。以下の形式でポートを追加できます。

    • ポート番号 (22 など)
    • ポート番号の範囲 (5900-5910 など)
    • エイリアス (nfs、rsync など)
    注記

    各フィールドには、複数の値を追加できます。値はコンマで区切り、スペースは使用しないでください。8080,8081,http

  7. TCP filed、UDP filed、またはその両方にポート番号を追加した後、Name フィールドでサービス名を確認します。

    名前 フィールドには、このポートを予約しているサービスの名前が表示されます。このポートが無料で、サーバーがこのポートで通信する必要がない場合は、名前を書き換えることができます。

  8. 名前 フィールドに、定義されたポートを含むサービスの名前を追加します。
  9. Add Ports ボタンをクリックします。

    RHEL web console: Add ports

設定を確認するには、ファイアウォール ページに移動し、ゾーンの サービス リストでサービスを見つけます。

RHEL web console: Active zones

23.5.8.5. セキュアな Web サーバーのホストを可能にする firewalld の設定

ポートは、オペレーティングシステムがネットワークトラフィックを受信して区別し、システムサービスに転送できるようにする論理サービスです。このシステムサービスは、ポートをリッスンし、ポートに入るトラフィックを待機するデーモンによって表されます。

通常、システムサービスは、サービスに予約されている標準ポートでリッスンします。httpd デーモンは、たとえば、ポート 80 をリッスンします。ただし、システム管理者は、サービス名の代わりにポート番号を直接指定できます。

firewalld サービスを使用して、データをホストするためのセキュアな Web サーバーへのアクセスを設定できます。

前提条件

  • firewalld サービスが実行している。

手順

  1. 現在アクティブなファイアウォールゾーンを確認します。

    # firewall-cmd --get-active-zones
  2. HTTPS サービスを適切なゾーンに追加します。

    # firewall-cmd --zone=<zone_name> --add-service=https --permanent
  3. ファイアウォール設定を再読み込みします。

    # firewall-cmd --reload

検証

  1. firewalld でポートが開いているかどうかを確認します。

    • ポート番号を指定してポートを開いた場合は、次のように入力します。

      # firewall-cmd --zone=<zone_name> --list-all
    • サービス定義を指定してポートを開いた場合は、次のように入力します。

      # firewall-cmd --zone=<zone_name> --list-services

23.5.8.6. ネットワークのセキュリティーを強化するための不使用または不要なポートの閉鎖

開いているポートが不要になった場合は、firewalld ユーティリティーを使用してポートを閉じることができます。

重要

不要なポートをすべて閉じて、潜在的な攻撃対象領域を減らし、不正アクセスや脆弱性悪用のリスクを最小限に抑えてください。

手順

  1. 許可されているポートのリストを表示します。

    # firewall-cmd --list-ports

    デフォルトでは、このコマンドはデフォルトゾーンで有効になっているポートをリスト表示します。

    注記

    このコマンドでは、ポートとして開かれているポートのみが表示されます。サービスとして開かれているポートは表示されません。その場合は、--list-ports の代わりに --list-all オプションの使用を検討してください。

  2. 許可されているポートのリストからポートを削除し、着信トラフィックに対して閉じます。

    # firewall-cmd --remove-port=port-number/port-type

    このコマンドは、ゾーンからポートを削除します。ゾーンを指定しない場合は、デフォルトゾーンからポートが削除されます。

  3. 新しい設定を永続化します。

    # firewall-cmd --runtime-to-permanent

    ゾーンを指定しない場合、このコマンドは、ランタイムの変更をデフォルトゾーンの永続的な設定に適用します。

検証

  1. アクティブなゾーンをリスト表示し、検査するゾーンを選択します。

    # firewall-cmd --get-active-zones
  2. 選択したゾーンで現在開いているポートをリスト表示し、不使用または不要なポートが閉じているかどうかを確認します。

    # firewall-cmd --zone=<zone_to_inspect> --list-ports

23.5.8.7. CLI を使用したトラフィックの制御

firewall-cmd コマンドを使用すると、次のことが可能です。

  • ネットワークトラフィックの無効化
  • ネットワークトラフィックの有効化

その結果、たとえばシステムの防御を強化したり、データのプライバシーを確保したり、ネットワークリソースを最適化したりすることができます。

重要

パニックモードを有効にすると、ネットワークトラフィックがすべて停止します。したがって、そのマシンへの物理アクセスがある場合、またはシリアルコンソールを使用してログインする場合に限り使用してください。

手順

  1. ネットワークトラフィックを直ちに無効にするには、パニックモードをオンにします。

    # firewall-cmd --panic-on
  2. パニックモードをオフにし、ファイアウォールを永続設定に戻します。パニックモードを無効にするには、次のコマンドを実行します。

    # firewall-cmd --panic-off

検証

  • パニックモードを有効または無効にするには、次のコマンドを実行します。

    # firewall-cmd --query-panic

23.5.8.8. GUI を使用してプロトコルを使用したトラフィックの制御

特定のプロトコルを使用してファイアウォールを経由したトラフィックを許可するには、GUI を使用できます。

前提条件

  • firewall-config パッケージがインストールされている

手順

  1. firewall-config ツールを起動し、設定を変更するネットワークゾーンを選択します。
  2. 右側で Protocols タブを選択し、Add ボタンをクリックします。Protocol ウィンドウが開きます。
  3. リストからプロトコルを選択するか、Other Protocol チェックボックスを選択し、そのフィールドにプロトコルを入力します。

23.5.9. ゾーンを使用し、ソースに応じた着信トラフィックの管理

ゾーンを使用して、そのソースに基づいて着信トラフィックを管理するゾーンを使用できます。このコンテキストでの着信トラフィックとは、システム宛てのデータ、または firewalld を実行しているホストを通過するデータです。ソースは通常、トラフィックの発信元の IP アドレスまたはネットワーク範囲を指します。その結果、着信トラフィックをソートして異なるゾーンに割り当て、そのトラフィックが到達できるサービスを許可または禁止することができます。

ソースアドレスによる一致は、インターフェイス名による一致よりも優先されます。ソースをゾーンに追加すると、ファイアウォールは、インターフェイスベースのルールよりも着信トラフィックに対するソースベースのルールを優先します。これは、着信トラフィックが特定のゾーンに指定されたソースアドレスと一致する場合、トラフィックが通過するインターフェイスに関係なく、ソースアドレスに関連付けられたゾーンによってトラフィックの処理方法が決定されることを意味します。一方、インターフェイスベースのルールは通常、特定のソースベースのルールに一致しないトラフィックのためのフォールバックです。これらのルールは、ソースがゾーンに明示的に関連付けられていないトラフィックに適用されます。これにより、特定のソース定義ゾーンがないトラフィックのデフォルトの動作を定義できます。

23.5.9.1. ソースの追加

着信トラフィックを特定のゾーンに転送する場合は、そのゾーンにソースを追加します。ソースは、CIDR (Classless Inter-domain Routing) 表記法の IP アドレスまたは IP マスクになります。

注記

ネットワーク範囲が重複している複数のゾーンを追加する場合は、ゾーン名で順序付けされ、最初のゾーンのみが考慮されます。

  • 現在のゾーンにソースを設定するには、次のコマンドを実行します。

    # firewall-cmd --add-source=<source>
  • 特定ゾーンのソース IP アドレスを設定するには、次のコマンドを実行します。

    # firewall-cmd --zone=zone-name --add-source=<source>

以下の手順は、信頼される ゾーンで 192.168.2.15 からのすべての着信トラフィックを許可します。

手順

  1. 利用可能なすべてのゾーンをリストします。

    # firewall-cmd --get-zones
  2. 永続化モードで、信頼ゾーンにソース IP を追加します。

    # firewall-cmd --zone=trusted --add-source=192.168.2.15
  3. 新しい設定を永続化します。

    # firewall-cmd --runtime-to-permanent

23.5.9.2. ソースの削除

ゾーンからソースを削除すると、当該ソースに指定したルールは、そのソースから発信されたトラフィックに適用されなくなります。代わりに、トラフィックは、その発信元のインターフェイスに関連付けられたゾーンのルールと設定にフォールバックするか、デフォルトゾーンに移動します。

手順

  1. 必要なゾーンに対して許可されているソースのリストを表示します。

    # firewall-cmd --zone=zone-name --list-sources
  2. ゾーンからソースを永続的に削除します。

    # firewall-cmd --zone=zone-name --remove-source=<source>
  3. 新しい設定を永続化します。

    # firewall-cmd --runtime-to-permanent

23.5.9.3. ソースポートの削除

ソースポートを削除して、送信元ポートに基づいてトラフィックの分類を無効にします。

手順

  • ソースポートを削除するには、次のコマンドを実行します。

    # firewall-cmd --zone=zone-name --remove-source-port=<port-name>/<tcp|udp|sctp|dccp>

23.5.9.4. ゾーンおよびソースを使用して特定ドメインのみに対してサービスの許可

特定のネットワークからのトラフィックを許可して、マシンのサービスを使用するには、ゾーンおよびソースを使用します。以下の手順では、他のトラフィックがブロックされている間に 192.0.2.0/24 ネットワークからの HTTP トラフィックのみを許可します。

警告

このシナリオを設定する場合は、default のターゲットを持つゾーンを使用します。192.0.2.0/24 からのトラフィックではネットワーク接続がすべて許可されるため、ターゲットが ACCEPT に設定されたゾーンを使用することは、セキュリティー上のリスクになります。

手順

  1. 利用可能なすべてのゾーンをリストします。

    # firewall-cmd --get-zones
    block dmz drop external home internal public trusted work
  2. IP 範囲を internal ゾーンに追加し、ソースから発信されるトラフィックをゾーン経由でルーティングします。

    # firewall-cmd --zone=internal --add-source=192.0.2.0/24
  3. http サービスを internal ゾーンに追加します。

    # firewall-cmd --zone=internal --add-service=http
  4. 新しい設定を永続化します。

    # firewall-cmd --runtime-to-permanent

検証

  • internal ゾーンがアクティブで、サービスが許可されていることを確認します。

    # firewall-cmd --zone=internal --list-all
    internal (active)
      target: default
      icmp-block-inversion: no
      interfaces:
      sources: 192.0.2.0/24
      services: cockpit dhcpv6-client mdns samba-client ssh http
      ...

関連情報

  • システムの firewalld.zones (5) man ページ

23.5.10. ゾーン間で転送されるトラフィックのフィルタリング

firewalld を使用すると、異なる firewalld ゾーン間のネットワークデータのフローを制御できます。ルールとポリシーを定義することで、これらのゾーン間を移動するトラフィックをどのように許可またはブロックするかを管理できます。

ポリシーオブジェクト機能は、firewalld で正引きフィルターと出力フィルターを提供します。firewalld を使用して、異なるゾーン間のトラフィックをフィルタリングし、ローカルでホストされている仮想マシンへのアクセスを許可して、ホストを接続できます。

23.5.10.1. ポリシーオブジェクトとゾーンの関係

ポリシーオブジェクトを使用すると、サービス、ポート、リッチルールなどの firewalld のプリミティブをポリシーに割り当てることができます。ポリシーオブジェクトは、ステートフルおよび一方向の方法でゾーン間を通過するトラフィックに適用することができます。

# firewall-cmd --permanent --new-policy myOutputPolicy

# firewall-cmd --permanent --policy myOutputPolicy --add-ingress-zone HOST

# firewall-cmd --permanent --policy myOutputPolicy --add-egress-zone ANY

HOST および ANY は、イングレスゾーンおよびエグレスゾーンのリストで使用されるシンボリックゾーンです。

  • HOST シンボリックゾーンは、firewalld を実行しているホストから発信されるトラフィック、またはホストへの宛先を持つトラフィックのポリシーを許可します。
  • ANY シンボリックゾーンは、現行および将来のすべてのゾーンにポリシーを適用します。ANY シンボリックゾーンは、すべてのゾーンのワイルドカードとして機能します。

23.5.10.2. 優先度を使用したポリシーのソート

同じトラフィックセットに複数のポリシーを適用できるため、優先度を使用して、適用される可能性のあるポリシーの優先順位を作成する必要があります。

ポリシーをソートする優先度を設定するには、次のコマンドを実行します。

# firewall-cmd --permanent --policy mypolicy --set-priority -500

この例では、-500 の優先度は低くなりますが、優先度は高くなります。したがって、-500 は、-100 より前に実行されます。

優先度の数値が小さいほど優先度が高く、最初に適用されます。

23.5.10.3. ポリシーオブジェクトを使用した、ローカルでホストされているコンテナーと、ホストに物理的に接続されているネットワークとの間でのトラフィックのフィルタリング

ポリシーオブジェクト機能を使用すると、ユーザーは Podman ゾーンと firewalld ゾーン間のトラフィックをフィルタリングできます。

注記

Red Hat は、デフォルトではすべてのトラフィックをブロックし、Podman ユーティリティーに必要なサービスを選択して開くことを推奨します。

手順

  1. 新しいファイアウォールポリシーを作成します。

    # firewall-cmd --permanent --new-policy podmanToAny
  2. Podman から他のゾーンへのすべてのトラフィックをブロックし、Podman で必要なサービスのみを許可します。

    # firewall-cmd --permanent --policy podmanToAny --set-target REJECT
    # firewall-cmd --permanent --policy podmanToAny --add-service dhcp
    # firewall-cmd --permanent --policy podmanToAny --add-service dns
    # firewall-cmd --permanent --policy podmanToAny --add-service https
  3. 新しい Podman ゾーンを作成します。

    # firewall-cmd --permanent --new-zone=podman
  4. ポリシーのイングレスゾーンを定義します。

    # firewall-cmd --permanent --policy podmanToHost --add-ingress-zone podman
  5. 他のすべてのゾーンのエグレスゾーンを定義します。

    # firewall-cmd --permanent --policy podmanToHost --add-egress-zone ANY

    エグレスゾーンを ANY に設定すると、Podman と他のゾーンの間でフィルタリングすることになります。ホストに対してフィルタリングする場合は、エグレスゾーンを HOST に設定します。

  6. firewalld サービスを再起動します。

    # systemctl restart firewalld

検証

  • 他のゾーンに対する Podman ファイアウォールポリシーを検証します。

    # firewall-cmd --info-policy podmanToAny
    podmanToAny (active)
      ...
      target: REJECT
      ingress-zones: podman
      egress-zones: ANY
      services: dhcp dns https
      ...

23.5.10.4. ポリシーオブジェクトのデフォルトターゲットの設定

ポリシーには --set-target オプションを指定できます。以下のターゲットを使用できます。

  • ACCEPT - パケットを受け入れます
  • DROP - 不要なパケットを破棄します
  • REJECT - ICMP 応答で不要なパケットを拒否します
  • CONTINUE (デフォルト) - パケットは、次のポリシーとゾーンのルールに従います。

    # firewall-cmd --permanent --policy mypolicy --set-target CONTINUE

検証

  • ポリシーに関する情報の確認

    # firewall-cmd --info-policy mypolicy

23.5.10.5. DNAT を使用して HTTPS トラフィックを別のホストに転送する

Web サーバーがプライベート IP アドレスを持つ DMZ で実行されている場合は、宛先ネットワークアドレス変換 (DNAT) を設定して、インターネット上のクライアントがこの Web サーバーに接続できるようにすることができます。この場合、Web サーバーのホスト名はルーターのパブリック IP アドレスに解決されます。クライアントがルーターの定義済みポートへの接続を確立すると、ルーターはパケットを内部 Web サーバーに転送します。

前提条件

  • DNS サーバーが、Web サーバーのホスト名をルーターの IP アドレスに解決している。
  • 次の設定を把握している。

    • 転送するプライベート IP アドレスおよびポート番号
    • 使用する IP プロトコル
    • パケットをリダイレクトする Web サーバーの宛先 IP アドレスおよびポート

手順

  1. ファイアウォールポリシーを作成します。

    # firewall-cmd --permanent --new-policy <example_policy>

    ポリシーは、ゾーンとは対照的に、入力、出力、および転送されるトラフィックのパケットフィルタリングを許可します。ローカルで実行されている Web サーバー、コンテナー、または仮想マシン上のエンドポイントにトラフィックを転送するには、このような機能が必要になるため、これは重要です。

  2. イングレストラフィックとエグレストラフィックのシンボリックゾーンを設定して、ルーター自体がローカル IP アドレスに接続し、このトラフィックを転送できるようにします。

    # firewall-cmd --permanent --policy=<example_policy> --add-ingress-zone=HOST
    # firewall-cmd --permanent --policy=<example_policy> --add-egress-zone=ANY

    --add-ingress-zone=HOST オプションは、ローカルで生成され、ローカルホストから送信されるパケットを参照します。--add-egress-zone=ANY オプションは、任意のゾーンに向かうトラフィックを参照します。

  3. トラフィックを Web サーバーに転送するリッチルールを追加します。

    # firewall-cmd --permanent --policy=<example_policy> --add-rich-rule='rule family="ipv4" destination address="192.0.2.1" forward-port port="443" protocol="tcp" to-port="443" to-addr="192.51.100.20"'

    リッチルールは、ルーターの IP アドレス (192.0.2.1) のポート 443 から Web サーバーの IP アドレス (192.51.100.20) のポート 443 に TCP トラフィックを転送します。

  4. ファイアウォール設定ファイルをリロードします。

    # firewall-cmd --reload
    success
  5. カーネルで 127.0.0.0/8 のルーティングを有効にします。

    • 変更を永続化するには、次を実行します。

      # echo "net.ipv4.conf.all.route_localnet=1" > /etc/sysctl.d/90-enable-route-localnet.conf

      このコマンドは、route_localnet カーネルパラメーターを永続的に設定し、システムの再起動後も設定が確実に保持されるようにします。

    • システムを再起動することなく直ちに設定を適用するには、次のコマンドを実行します。

      # sysctl -p /etc/sysctl.d/90-enable-route-localnet.conf

      sysctl コマンドは、オンザフライで変更を適用するのに便利ですが、システムを再起動すると設定は元に戻ります。

検証

  1. Web サーバーに転送したルーターの IP アドレスおよびポートに接続します。

    # curl https://192.0.2.1:443
  2. オプション: net.ipv4.conf.all.route_localnet カーネルパラメーターがアクティブであることを確認します。

    # sysctl net.ipv4.conf.all.route_localnet
    net.ipv4.conf.all.route_localnet = 1
  3. <example_policy> がアクティブであり、必要な設定 (特にソース IP アドレスとポート、使用するプロトコル、宛先 IP アドレスとポート) が含まれていることを確認します。

    # firewall-cmd --info-policy=<example_policy>
    example_policy (active)
      priority: -1
      target: CONTINUE
      ingress-zones: HOST
      egress-zones: ANY
      services:
      ports:
      protocols:
      masquerade: no
      forward-ports:
      source-ports:
      icmp-blocks:
      rich rules:
    	rule family="ipv4" destination address="192.0.2.1" forward-port port="443" protocol="tcp" to-port="443" to-addr="192.51.100.20"

関連情報

23.5.11. firewalld を使用した NAT の設定

firewalld では、以下のネットワークアドレス変換 (NAT) タイプを設定できます。

  • マスカレーディング
  • 宛先 NAT (DNAT)
  • リダイレクト

23.5.11.1. ネットワークアドレス変換のタイプ

以下は、ネットワークアドレス変換 (NAT) タイプになります。

マスカレーディング

この NAT タイプのいずれかを使用して、パケットのソース IP アドレスを変更します。たとえば、インターネットサービスプロバイダー (ISP) は、プライベート IP 範囲 (10.0.0.0/8 など) をルーティングしません。ネットワークでプライベート IP 範囲を使用し、ユーザーがインターネット上のサーバーにアクセスできるようにする必要がある場合は、この範囲のパケットのソース IP アドレスをパブリック IP アドレスにマップします。

マスカレードは、出力インターフェイスの IP アドレスを自動的に使用します。したがって、出力インターフェイスが動的 IP アドレスを使用する場合は、マスカレードを使用します。

宛先 NAT (DNAT)
この NAT タイプを使用して、着信パケットの宛先アドレスとポートを書き換えます。たとえば、Web サーバーがプライベート IP 範囲の IP アドレスを使用しているため、インターネットから直接アクセスできない場合は、ルーターに DNAT ルールを設定し、着信トラフィックをこのサーバーにリダイレクトできます。
リダイレクト
このタイプは、パケットをローカルマシンの別のポートにリダイレクトする DNAT の特殊なケースです。たとえば、サービスが標準ポートとは異なるポートで実行する場合は、標準ポートからこの特定のポートに着信トラフィックをリダイレクトすることができます。

23.5.11.2. IP アドレスのマスカレードの設定

システムで IP マスカレードを有効にできます。IP マスカレードは、インターネットにアクセスする際にゲートウェイの向こう側にある個々のマシンを隠します。

手順

  1. external ゾーンなどで IP マスカレーディングが有効かどうかを確認するには、root で次のコマンドを実行します。

    # firewall-cmd --zone=external --query-masquerade

    このコマンドでは、有効な場合は yes と出力され、終了ステータスは 0 になります。無効の場合は no と出力され、終了ステータスは 1 になります。zone を省略すると、デフォルトのゾーンが使用されます。

  2. IP マスカレードを有効にするには、root で次のコマンドを実行します。

    # firewall-cmd --zone=external --add-masquerade
  3. この設定を永続化するには、--permanent オプションをコマンドに渡します。
  4. IP マスカレードを無効にするには、root で次のコマンドを実行します。

    # firewall-cmd --zone=external --remove-masquerade

    この設定を永続化するには、--permanent をコマンドラインに渡します。

23.5.11.3. DNAT を使用した着信 HTTP トラフィックの転送

宛先ネットワークアドレス変換 (DNAT) を使用して、着信トラフィックを 1 つの宛先アドレスおよびポートから別の宛先アドレスおよびポートに転送できます。通常、外部ネットワークインターフェイスからの着信リクエストを特定の内部サーバーまたはサービスにリダイレクトする場合に役立ちます。

前提条件

  • firewalld サービスが実行している。

手順

  1. 次の内容を含む /etc/sysctl.d/90-enable-IP-forwarding.conf ファイルを作成します。

    net.ipv4.ip_forward=1

    この設定によって、カーネルでの IP 転送が有効になります。これにより、内部 RHEL サーバーがルーターとして機能し、ネットワークからネットワークへパケットを転送するようになります。

  2. /etc/sysctl.d/90-enable-IP-forwarding.conf ファイルから設定をロードします。

    # sysctl -p /etc/sysctl.d/90-enable-IP-forwarding.conf
  3. 着信 HTTP トラフィックを転送します。

    # firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toaddr=198.51.100.10:toport=8080 --permanent

    上記のコマンドは、次の設定で DNAT ルールを定義します。

    • --zone=public - DNAT ルールを設定するファイアウォールゾーン。必要なゾーンに合わせて調整できます。
    • --add-forward-port - ポート転送ルールを追加することを示すオプション。
    • port=80 - 外部宛先ポート。
    • proto=tcp - TCP トラフィックを転送することを示すプロトコル。
    • toaddr=198.51.100.10 - 宛先 IP アドレス。
    • toport=8080 - 内部サーバーの宛先ポート。
    • --permanent - 再起動後も DNAT ルールを永続化するオプション。
  4. ファイアウォール設定をリロードして、変更を適用します。

    # firewall-cmd --reload

検証

  • 使用したファイアウォールゾーンの DNAT ルールを確認します。

    # firewall-cmd --list-forward-ports --zone=public
    port=80:proto=tcp:toport=8080:toaddr=198.51.100.10

    あるいは、対応する XML 設定ファイルを表示します。

    # cat /etc/firewalld/zones/public.xml
    <?xml version="1.0" encoding="utf-8"?>
    <zone>
      <short>Public</short>
      <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
      <service name="ssh"/>
      <service name="dhcpv6-client"/>
      <service name="cockpit"/>
      <forward-port port="80" protocol="tcp" to-port="8080" to-addr="198.51.100.10"/>
      <forward/>
    </zone>

関連情報

23.5.11.4. 非標準ポートからのトラフィックをリダイレクトして、標準ポートで Web サービスにアクセスできるようにする

リダイレクトメカニズムを使用すると、ユーザーが URL でポートを指定しなくても、非標準ポートで内部的に実行される Web サービスにアクセスできるようになります。その結果、URL はよりシンプルになり、ブラウジングエクスペリエンスが向上します。一方で、非標準ポートは依然として内部で、または特定の要件のために使用されます。

前提条件

  • firewalld サービスが実行している。

手順

  1. 次の内容を含む /etc/sysctl.d/90-enable-IP-forwarding.conf ファイルを作成します。

    net.ipv4.ip_forward=1

    この設定によって、カーネルでの IP 転送が有効になります。

  2. /etc/sysctl.d/90-enable-IP-forwarding.conf ファイルから設定をロードします。

    # sysctl -p /etc/sysctl.d/90-enable-IP-forwarding.conf
  3. NAT リダイレクトルールを作成します。

    # firewall-cmd --zone=public --add-forward-port=port=<standard_port>:proto=tcp:toport=<non_standard_port> --permanent

    上記のコマンドは、次の設定で NAT リダイレクトルールを定義します。

    • --zone=public - ルールを設定するファイアウォールゾーン。必要なゾーンに合わせて調整できます。
    • --add-forward-port=port=<non_standard_port> - 着信トラフィックを最初に受信するソースポートを使用したポート転送 (リダイレクト) ルールを追加することを示すオプション。
    • proto=tcp - TCP トラフィックをリダイレクトすることを示すプロトコル。
    • toport=<standard_port> - 着信トラフィックがソースポートで受信された後にリダイレクトされる宛先ポート。
    • --permanent - 再起動後もルールを永続化するオプション。
  4. ファイアウォール設定をリロードして、変更を適用します。

    # firewall-cmd --reload

検証

  • 使用したファイアウォールゾーンのリダイレクトルールを確認します。

    # firewall-cmd --list-forward-ports
    port=8080:proto=tcp:toport=80:toaddr=

    あるいは、対応する XML 設定ファイルを表示します。

    # cat /etc/firewalld/zones/public.xml
    <?xml version="1.0" encoding="utf-8"?>
    <zone>
      <short>Public</short>
      <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
      <service name="ssh"/>
      <service name="dhcpv6-client"/>
      <service name="cockpit"/>
      <forward-port port="8080" protocol="tcp" to-port="80"/>
      <forward/>
    </zone>

関連情報

23.5.12. ICMP リクエストの管理

Internet Control Message Protocol (ICMP) は、テスト、トラブルシューティング、診断のために、さまざまなネットワークデバイスによって使用されるサポート対象のプロトコルです。ICMP は、システム間でデータを交換するのに使用されていないため、TCP、UDP などの転送プロトコルとは異なります。

ICMP メッセージ (特に echo-request および echo-reply) を利用して、ネットワークに関する情報を明らかにし、その情報をさまざまな不正行為に悪用することが可能です。したがって、firewalld は、ネットワーク情報を保護するため、ICMP リクエストを制御できます。

23.5.12.1. ICMP フィルタリングの設定

ICMP フィルタリングを使用すると、ファイアウォールでシステムへのアクセスを許可または拒否する ICMP のタイプとコードを定義できます。ICMP のタイプとコードは、ICMP メッセージの特定のカテゴリーとサブカテゴリーです。

ICMP フィルタリングは、たとえば次の分野で役立ちます。

  • セキュリティーの強化 - 潜在的に有害な ICMP のタイプとコードをブロックして、攻撃対象領域を縮小します。
  • ネットワークパフォーマンス - 必要な ICMP タイプのみを許可してネットワークパフォーマンスを最適化し、過剰な ICMP トラフィックによって引き起こされる潜在的なネットワーク輻輳を防ぎます。
  • トラブルシューティングの制御 - ネットワークのトラブルシューティングに不可欠な ICMP 機能を維持し、潜在的なセキュリティーリスクとなる ICMP タイプをブロックします。

前提条件

  • firewalld サービスが実行している。

手順

  1. 利用可能な ICMP のタイプとコードをリスト表示します。

    # firewall-cmd --get-icmptypes
    address-unreachable bad-header beyond-scope communication-prohibited destination-unreachable echo-reply echo-request failed-policy fragmentation-needed host-precedence-violation host-prohibited host-redirect host-unknown host-unreachable
    ...

    この事前定義されたリストから、許可またはブロックする ICMP のタイプとコードを選択します。

  2. 特定の ICMP タイプを次の方法でフィルタリングします。

    • 許可する ICMP タイプ:

      # firewall-cmd --zone=<target-zone> --remove-icmp-block=echo-request --permanent

      このコマンドは、エコーリクエスト ICMP タイプに対する既存のブロックルールを削除します。

    • ブロックする ICMP タイプ:

      # firewall-cmd --zone=<target-zone> --add-icmp-block=redirect --permanent

      このコマンドは、リダイレクトメッセージ ICMP タイプがファイアウォールによって確実にブロックされるようにします。

  3. ファイアウォール設定をリロードして、変更を適用します。

    # firewall-cmd --reload

検証

  • フィルタリングルールが有効であることを確認します。

    # firewall-cmd --list-icmp-blocks
    redirect

    コマンド出力には、許可またはブロックした ICMP のタイプとコードが表示されます。

関連情報

  • firewall-cmd(1) man ページ

23.5.13. firewalld を使用した IP セットの設定および制御

IP セットは、より柔軟かつ効率的にファイアウォールのルールを管理するために、IP アドレスとネットワークをセットにグループ化する RHEL 機能です。

IP セットは、たとえば次のようなシナリオで役立ちます。

  • 大きな IP アドレスリストを処理する場合
  • これらの大きな IP アドレスリストに動的更新を実装する場合
  • カスタムの IP ベースポリシーを作成して、ネットワークのセキュリティーと制御を強化する場合
警告

Red Hat では、firewall-cmd コマンドを使用して IP セットを作成および管理することを推奨します。

23.5.13.1. IP セットを使用した許可リストの動的更新の設定

ほぼリアルタイムで更新を行うことで、予測不可能な状況でも IP セット内の特定の IP アドレスまたは IP アドレス範囲を柔軟に許可できます。これらの更新は、セキュリティー脅威の検出やネットワーク動作の変化など、さまざまなイベントによってトリガーされます。通常、このようなソリューションでは自動化を活用して手動処理を減らし、素早く状況に対応することでセキュリティーを向上させます。

前提条件

  • firewalld サービスが実行している。

手順

  1. 分かりやすい名前で IP セットを作成します。

    # firewall-cmd --permanent --new-ipset=allowlist --type=hash:ip

    この allowlist という新しい IP セットには、ファイアウォールで許可する IP アドレスが含まれています。

  2. IP セットに動的更新を追加します。

    # firewall-cmd --permanent --ipset=allowlist --add-entry=198.51.100.10

    この設定により、新しく追加した、ネットワークトラフィックを渡すことがファイアウォールにより許可される IP アドレスで、allowlist の IP セットが更新されます。

  3. 先に作成した IP セットを参照するファイアウォールのルールを作成します。

    # firewall-cmd --permanent --zone=public --add-source=ipset:allowlist

    このルールがない場合、IP セットはネットワークトラフィックに影響を与えません。デフォルトのファイアウォールポリシーが優先されます。

  4. ファイアウォール設定をリロードして、変更を適用します。

    # firewall-cmd --reload

検証

  1. すべての IP セットをリスト表示します。

    # firewall-cmd --get-ipsets
    allowlist
  2. アクティブなルールをリスト表示します。

    # firewall-cmd --list-all
    public (active)
      target: default
      icmp-block-inversion: no
      interfaces: enp0s1
      sources: ipset:allowlist
      services: cockpit dhcpv6-client ssh
      ports:
      protocols:
      ...

    コマンドライン出力の sources セクションでは、どのトラフィックの発信元 (ホスト名、インターフェイス、IP セット、サブネットなど) が、特定のファイアウォールゾーンへのアクセスを許可または拒否されているかについて洞察が得られます。上記の場合、allowlist IP セットに含まれる IP アドレスが、public ゾーンのファイアウォールを通してトラフィックを渡すことが許可されています。

  3. IP セットの内容を調べます。

    # cat /etc/firewalld/ipsets/allowlist.xml
    <?xml version="1.0" encoding="utf-8"?>
    <ipset type="hash:ip">
      <entry>198.51.100.10</entry>
    </ipset>

次のステップ

  • スクリプトまたはセキュリティーユーティリティーを使用して脅威インテリジェンスのフィードを取得し、それに応じて allowlist を自動的に更新します。

関連情報

  • firewall-cmd(1) man ページ

23.5.14. リッチルールの優先度設定

デフォルトでは、リッチルールはルールアクションに基づいて設定されます。たとえば、許可 ルールよりも 拒否 ルールが優先されます。リッチルールで priority パラメーターを使用すると、管理者はリッチルールとその実行順序をきめ細かく制御できます。priority パラメーターを使用すると、ルールはまず優先度の値によって昇順にソートされます。多くのルールが同じ priority を持つ場合、ルールの順序はルールアクションによって決まります。アクションも同じである場合、順序は定義されない可能性があります。

23.5.14.1. priority パラメーターを異なるチェーンにルールを整理する方法

リッチルールの priority パラメーターは、-32768 から 32767 までの任意の数値に設定でき、数値が小さいほど優先度が高くなります。

firewalld サービスは、優先度の値に基づいて、ルールを異なるチェーンに整理します。

  • 優先度が 0 未満 - ルールは _pre 接尾辞が付いたチェーンにリダイレクトされます。
  • 優先度が 0 を超える - ルールは _post 接尾辞が付いたチェーンにリダイレクトされます。
  • 優先度が 0 - アクションに基づいて、ルールは、_log_deny、または _allow のアクションを使用してチェーンにリダイレクトされます。

このサブチェーンでは、firewalld は優先度の値に基づいてルールを分類します。

23.5.14.2. リッチルールの優先度の設定

以下は、priority パラメーターを使用して、他のルールで許可または拒否されていないすべてのトラフィックをログに記録するリッチルールを作成する方法を示しています。このルールを使用して、予期しないトラフィックにフラグを付けることができます。

手順

  • 優先度が非常に低いルールを追加して、他のルールと一致していないすべてのトラフィックをログに記録します。

    # firewall-cmd --add-rich-rule='rule priority=32767 log prefix="UNEXPECTED: " limit value="5/m"'

    このコマンドでは、ログエントリーの数を、毎分 5 に制限します。

検証

  • 前の手順のコマンドで作成した nftables ルールを表示します。

    # nft list chain inet firewalld filter_IN_public_post
    table inet firewalld {
      chain filter_IN_public_post {
        log prefix "UNEXPECTED: " limit rate 5/minute
      }
    }

23.5.15. ファイアウォールロックダウンの設定

ローカルのアプリケーションやサービスは、root で実行していれば、ファイアウォール設定を変更できます (たとえば libvirt)。管理者は、この機能を使用してファイアウォール設定をロックし、すべてのアプリケーションでファイアウォール変更を要求できなくするか、ロックダウンの許可リストに追加されたアプリケーションのみがファイアウォール変更を要求できるようにすることが可能になります。ロックダウン設定はデフォルトで無効になっています。これを有効にすると、ローカルのアプリケーションやサービスによるファイアウォールへの望ましくない設定変更を確実に防ぐことができます。

23.5.15.1. CLI を使用したロックダウンの設定

コマンドラインでロックダウン機能を有効または無効にすることができます。

手順

  1. ロックダウンが有効かどうかをクエリーするには、以下を実行します。

    # firewall-cmd --query-lockdown
  2. 次のいずれかの方法でロックダウン設定を管理します。

    • ロックダウンを有効にする場合:

      # firewall-cmd --lockdown-on
    • ロックダウンを無効にする場合:

      # firewall-cmd --lockdown-off

23.5.15.2. ロックダウン許可リスト設定ファイルの概要

デフォルトの許可リスト設定ファイルには、NetworkManager コンテキストと、libvirt のデフォルトコンテキストが含まれます。リストには、ユーザー ID (0) もあります。

許可リスト設定ファイルは /etc/firewalld/ ディレクトリーに保存されます。

<?xml version="1.0" encoding="utf-8"?>
	<whitelist>
		<command name="/usr/bin/python3 -s /usr/bin/firewall-config"/>
	  <selinux context="system_u:system_r:NetworkManager_t:s0"/>
	  <selinux context="system_u:system_r:virtd_t:s0-s0:c0.c1023"/>
	  <user id="0"/>
	</whitelist>

以下の許可リスト設定ファイルの例では、firewall-cmd ユーティリティーのコマンドと、ユーザー ID が 815 である user のコマンドをすべて有効にしています。

<?xml version="1.0" encoding="utf-8"?>
	<whitelist>
	  <command name="/usr/libexec/platform-python -s /bin/firewall-cmd*"/>
	  <selinux context="system_u:system_r:NetworkManager_t:s0"/>
	  <user id="815"/>
	  <user name="user"/>
	</whitelist>

この例では、user iduser name の両方が使用されていますが、実際にはどちらか一方のオプションだけが必要です。Python はインタープリターとしてコマンドラインに追加されています。

Red Hat Enterprise Linux では、すべてのユーティリティーが /usr/bin/ ディレクトリーに格納されており、/bin/ ディレクトリーは /usr/bin/ ディレクトリーへのシンボリックリンクとなります。つまり、rootfirewall-cmd のパスを実行すると /bin/firewall-cmd に対して解決しますが、/usr/bin/firewall-cmd が使用できるようになっています。新たなスクリプトは、すべて新しい格納場所を使用する必要があります。ただし、root で実行するスクリプトが /bin/firewall-cmd へのパスを使用するようになっているのであれば、これまでは root 以外のユーザーにのみ使用されていた /usr/bin/firewall-cmd パスに加え、このコマンドのパスも許可リストに追加する必要があります。

コマンドの名前属性の最後にある * は、その名前で始まるすべてのコマンドが一致することを意味します。*がなければ、コマンドと引数が完全に一致する必要があります。

23.5.16. firewalld ゾーン内の異なるインターフェイスまたはソース間でのトラフィック転送の有効化

ゾーン内転送は、firewalld ゾーン内のインターフェイスまたはソース間のトラフィック転送を可能にする firewalld 機能です。

23.5.16.1. ゾーン内転送と、デフォルトのターゲットが ACCEPT に設定されているゾーンの違い

ゾーン内転送を有効にすると、1 つの firewalld ゾーン内のトラフィックは、あるインターフェイスまたはソースから別のインターフェイスまたはソースに流れることができます。ゾーンは、インターフェイスおよびソースの信頼レベルを指定します。信頼レベルが同じ場合、トラフィックは同じゾーン内に留まります。

注記

firewalld のデフォルトゾーンでゾーン内転送を有効にすると、現在のデフォルトゾーンに追加されたインターフェイスおよびソースにのみ適用されます。

firewalld は、異なるゾーンを使用して着信トラフィックと送信トラフィックを管理します。各ゾーンには独自のルールと動作のセットがあります。たとえば、trusted ゾーンでは、転送されたトラフィックがデフォルトですべて許可されます。

他のゾーンでは、異なるデフォルト動作を設定できます。標準ゾーンでは、ゾーンのターゲットが default に設定されている場合、転送されたトラフィックは通常デフォルトで破棄されます。

ゾーン内の異なるインターフェイスまたはソース間でトラフィックを転送する方法を制御するには、ゾーンのターゲットを理解し、それに応じてゾーンのターゲットを設定する必要があります。

23.5.16.2. ゾーン内転送を使用したイーサネットと Wi-Fi ネットワーク間でのトラフィックの転送

ゾーン内転送を使用して、同じ firewalld ゾーン内のインターフェイスとソース間のトラフィックを転送することができます。この機能には次の利点があります。

  • 有線デバイスと無線デバイスの間のシームレスな接続性 (enp1s0 に接続されたイーサネットネットワークと wlp0s20 に接続された Wi-Fi ネットワークの間でトラフィックを転送可能)
  • 柔軟な作業環境のサポート
  • ネットワーク内の複数のデバイスまたはユーザーがアクセスして使用できる共有リソース (プリンター、データベース、ネットワーク接続ストレージなど)
  • 効率的な内部ネットワーク (スムーズな通信、レイテンシーの短縮、リソースへのアクセス性など)

この機能は、個々の firewalld ゾーンに対して有効にすることができます。

手順

  1. カーネルでパケット転送を有効にします。

    # echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf
    # sysctl -p /etc/sysctl.d/95-IPv4-forwarding.conf
  2. ゾーン内転送を有効にするインターフェイスが internal ゾーンにのみ割り当てられていることを確認します。

    # firewall-cmd --get-active-zones
  3. 現在、インターフェイスが internal 以外のゾーンに割り当てられている場合は、以下のように再割り当てします。

    # firewall-cmd --zone=internal --change-interface=interface_name --permanent
  4. enp1s0 および wlp0s20 インターフェイスを internal ゾーンに追加します。

    # firewall-cmd --zone=internal --add-interface=enp1s0 --add-interface=wlp0s20
  5. ゾーン内転送を有効にします。

    # firewall-cmd --zone=internal --add-forward

検証

次の検証では、両方のホストに nmap-ncat パッケージがインストールされている必要があります。

  1. ゾーン転送を有効にしたホストの enp1s0 インターフェイスと同じネットワーク上にあるホストにログインします。
  2. ncat で echo サービスを起動し、接続をテストします。

    # ncat -e /usr/bin/cat -l 12345
  3. wlp0s20 インターフェイスと同じネットワークにあるホストにログインします。
  4. enp1s0 と同じネットワークにあるホスト上で実行している echo サーバーに接続します。

    # ncat <other_host> 12345
  5. 何かを入力して Enter を押します。テキストが返送されることを確認します。

関連情報

  • システムの firewalld.zones (5) man ページ

23.5.17. RHEL システムロールを使用した firewalld の設定

RHEL システムロールは、Ansible 自動化ユーティリティーのコンテンツセットです。このコンテンツを、Ansible Automation ユーティリティーと組み合わせることで、複数のシステムを同時にリモートで管理するための一貫した設定インターフェイスが実現します。

rhel-system-roles パッケージには、rhel-system-roles.firewall RHEL システムロールが含まれています。このロールは、firewalld サービスの自動設定のために導入されました。

firewall RHEL システムロールを使用すると、次のようなさまざまな firewalld パラメーターを設定できます。

  • ゾーン
  • パケットを許可すべきサービス
  • ポートへのトラフィックアクセスの許可、拒否、またはドロップ
  • ゾーンのポートまたはポート範囲の転送

23.5.17.1. firewall RHEL システムロールを使用した firewalld 設定のリセット

時間が経つにつれて、ファイアウォール設定の更新が累積し、予想外のセキュリティーリスクが発生する可能性があります。firewall RHEL システムロールを使用すると、firewalld 設定を自動的にデフォルト状態にリセットできます。これにより、意図しない、またはセキュアでないファイアウォールルールを効率的に削除し、管理を簡素化できます。

前提条件

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Reset firewalld example
      hosts: managed-node-01.example.com
      tasks:
        - name: Reset firewalld
          ansible.builtin.include_role:
            name: rhel-system-roles.firewall
          vars:
            firewall:
              - previous: replaced

    サンプル Playbook で指定されている設定は次のとおりです。

    previous: replaced

    既存のユーザー定義設定をすべて削除し、firewalld 設定をデフォルトにリセットします。previous:replaced パラメーターを他の設定と組み合わせると、firewall ロールは新しい設定を適用する前に既存の設定をすべて削除します。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.firewall/README.md ファイルを参照してください。

  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml

検証

  • コントロールノードでこのコマンドを実行して、管理対象ノードのすべてのファイアウォール設定がデフォルト値にリセットされたことをリモートで確認します。

    # ansible managed-node-01.example.com -m ansible.builtin.command -a 'firewall-cmd --list-all-zones'

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.firewall/README.md ファイル
  • /usr/share/doc/rhel-system-roles/firewall/ ディレクトリー

23.5.17.2. firewall RHEL システムロールを使用して、firewalld の着信トラフィックをあるローカルポートから別のローカルポートに転送する

firewall RHEL システムロールを使用して、あるローカルポートから別のローカルポートへの着信トラフィックの転送をリモートで設定できます。

たとえば、同じマシン上に複数のサービスが共存し、同じデフォルトポートが必要な環境の場合、ポートの競合が発生する可能性があります。この競合によりサービスが中断され、ダウンタイムが発生する可能性があります。firewall RHEL システムロールを使用すると、トラフィックを効率的に別のポートに転送して、サービスの設定を変更せずにサービスを同時に実行できます。

前提条件

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Configure firewalld
      hosts: managed-node-01.example.com
      tasks:
        - name: Forward incoming traffic on port 8080 to 443
          ansible.builtin.include_role:
            name: rhel-system-roles.firewall
          vars:
            firewall:
              - forward_port: 8080/tcp;443;
                state: enabled
                runtime: true
                permanent: true

    サンプル Playbook で指定されている設定は次のとおりです。

    forward_port:8080/tcp;443
    TCP プロトコルを使用してローカルポート 8080 に送信されるトラフィックが、ポート 443 に転送されます。
    runtime: true

    ランタイム設定の変更を有効にします。デフォルトは true に設定されています。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.firewall/README.md ファイルを参照してください。

  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml

検証

  • コントロールノードで次のコマンドを実行して、管理対象ノードの転送ポートをリモートで確認します。

    # ansible managed-node-01.example.com -m ansible.builtin.command -a 'firewall-cmd --list-forward-ports'
    managed-node-01.example.com | CHANGED | rc=0 >>
    port=8080:proto=tcp:toport=443:toaddr=

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.firewall/README.md ファイル
  • /usr/share/doc/rhel-system-roles/firewall/ ディレクトリー

23.5.17.3. firewall RHEL システムロールを使用した firewalld DMZ ゾーンの設定

システム管理者は、firewall RHEL システムロールを使用して、enp1s0 インターフェイス上に dmz ゾーンを設定し、ゾーンへの HTTPS トラフィックを許可できます。これにより、外部ユーザーが Web サーバーにアクセスできるようにします。

前提条件

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Configure firewalld
      hosts: managed-node-01.example.com
      tasks:
        - name: Creating a DMZ with access to HTTPS port and masquerading for hosts in DMZ
          ansible.builtin.include_role:
            name: rhel-system-roles.firewall
          vars:
            firewall:
              - zone: dmz
                interface: enp1s0
                service: https
                state: enabled
                runtime: true
                permanent: true

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.firewall/README.md ファイルを参照してください。

  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml

検証

  • コントロールノードで次のコマンドを実行して、管理対象ノードの dmz ゾーンに関する情報をリモートで確認します。

    # ansible managed-node-01.example.com -m ansible.builtin.command -a 'firewall-cmd --zone=dmz --list-all'
    managed-node-01.example.com | CHANGED | rc=0 >>
    dmz (active)
      target: default
      icmp-block-inversion: no
      interfaces: enp1s0
      sources:
      services: https ssh
      ports:
      protocols:
      forward: no
      masquerade: no
      forward-ports:
      source-ports:
      icmp-blocks:

関連情報

  • /usr/share/ansible/roles/rhel-system-roles.firewall/README.md ファイル
  • /usr/share/doc/rhel-system-roles/firewall/ ディレクトリー
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.