firewall

Table of Contents

AlmaLinux 9でfirewalldを使ったIPマスカレード

AlmaLinux 9のfirewalldで、外部ネットワークにつながるLinuxホストをIPv4ゲートウェイとして設定する例です。
以下では外部側をexternal、内部LAN側をinternalゾーンとします。
インターフェース名、NetworkManager接続名、内部ネットワークは実環境に合わせてください。

Internet / upstream router
          |
      external NIC
   [AlmaLinux 9 gateway]
       internal NIC
          |
      internal LAN

1. firewalldとネットワークの確認

リモート接続で設定する場合、誤ったゾーン設定で接続を失う可能性があります。
コンソール等の復旧手段を確保してから作業してください。

# dnf install firewalld
# systemctl enable --now firewalld
# nmcli connection show
# nmcli device status
# firewall-cmd --get-active-zones
# firewall-cmd --get-zones

NetworkManagerの接続プロファイルを確認し、外部・内部インターフェースがそれぞれ正しいゾーンに属するよう設定します。
次の接続名は例です。

# nmcli connection modify "外部接続名" connection.zone external
# nmcli connection modify "内部接続名" connection.zone internal
# nmcli connection up "外部接続名"
# nmcli connection up "内部接続名"

接続を再起動すると通信が一時的に切れることがあります。実際の接続名とIP設定を確認してから実行してください。
静的ルートやデフォルトゲートウェイは、ネットワーク設計に合わせて別途設定します。

2. IPv4フォワーディングを有効化

IPv4パケット転送を永続化します。

# printf 'net.ipv4.ip_forward = 1\n' > /etc/sysctl.d/90-ip-forward.conf
# sysctl --system
# sysctl net.ipv4.ip_forward

IPv6転送が必要な場合は、IPv6のアドレス、ルーティング、ファイアウォールを別途設計してください。
IPv4設定だけでIPv6も安全に転送できるわけではありません。

3. 外部ゾーンでマスカレードを設定

マスカレードは通常、外部向けインターフェースのゾーンだけに設定します。
内部ゾーンにも重ねて設定したり、同じNAT/FORWARD処理をdirectルールで追加したりしないでください。

# firewall-cmd --permanent --zone=external --add-masquerade

4. 内部から外部への転送を許可

内部ゾーンから外部ゾーンへの通信を許可するfirewalldポリシーを作成します。
ポリシー名が既に使われている場合は、--list-all-policiesで内容を確認してから編集してください。

# firewall-cmd --permanent --new-policy=internal-to-external
# firewall-cmd --permanent --policy=internal-to-external --add-ingress-zone=internal
# firewall-cmd --permanent --policy=internal-to-external --add-egress-zone=external
# firewall-cmd --permanent --policy=internal-to-external --set-target=ACCEPT
# firewall-cmd --reload

このポリシーは内部ゾーンから外部ゾーンへの転送を許可します。
内部LANのクライアントやサービスをさらに限定する場合は、ポリシーに送信元・宛先・サービス条件を追加してください。
外部から内部へ開始される新規接続を許可するルールは追加しないでください。

5. 設定確認

# firewall-cmd --get-active-zones
# firewall-cmd --zone=external --query-masquerade
# firewall-cmd --list-all-policies
# firewall-cmd --policy=internal-to-external --list-all
# sysctl net.ipv4.ip_forward

内部LANのクライアントから外部への通信を確認し、外部から内部への未承認の新規接続が拒否されることも確認します。
firewalldのルール確認に、旧式のdirectルールを混在させないでください。

参考資料

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です