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

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

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

1.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 の特殊なケースです。たとえば、サービスが標準ポートとは異なるポートで実行する場合は、標準ポートからこの特定のポートに着信トラフィックをリダイレクトすることができます。

1.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 をコマンドラインに渡します。

1.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>

関連情報

1.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>

関連情報