firewall-cmd で permanent 設定を忘れて再起動時に設定が消える問題

  • URLをコピーしました!
目次

概要

firewall-cmd コマンドでポート開放などの設定を行った際、--permanent オプションを付け忘れると、再起動後に設定が消える という問題がよく発生します。
これは、runtime 設定(実行中のみ有効)permanent 設定(永続的に保存される設定) の違いによるものです。

再起動後も設定を維持したい場合は、必ず --permanent オプションを付けて設定したうえで、--reload を実行する必要があります。

原因

🔹 firewall-cmd の設定モード

モード内容保存される場所再起動後の状態
Runtime(デフォルト)一時的に反映メモリ上のみ消える
Permanent永続的に保存/etc/firewalld/ 配下継続する

つまり、firewall-cmd --add-port=80/tcp のように --permanent を指定しない場合、設定は一時的にしか反映されません。

現象例

症状

再起動後に通信が通らなくなり、ポートが閉じている。

確認コマンド

sudo firewall-cmd --list-ports

正常例(ポートが恒久的に開いている)

80/tcp 443/tcp

異常例(再起動後に消えている)

(空欄)

この場合、設定が permanent に保存されていない可能性が高いです。

原因の特定手順

  1. runtime 設定の確認 sudo firewall-cmd --list-ports → 一時的に開放されているポートを表示。
  2. permanent 設定の確認 sudo firewall-cmd --permanent --list-ports → 永続的に保存されているポートを表示。

出力例:

# runtime
80/tcp 443/tcp

# permanent
(空欄)

このように permanent 側に設定がない場合、再起動後に設定が失われます。

解決方法

✅ 解決手順(正しい設定の流れ)

  1. 永続設定として追加 sudo firewall-cmd --permanent --add-port=80/tcp sudo firewall-cmd --permanent --add-port=443/tcp
  2. 設定を反映 sudo firewall-cmd --reload
  3. 確認 sudo firewall-cmd --permanent --list-ports 出力: 80/tcp 443/tcp

--permanent で保存しただけでは即時反映されません。
必ず --reload で runtime に反映させる必要があります。

✅ runtime 設定を permanent にコピーする(再設定が面倒な場合)

一時設定を permanent に反映したい場合:

sudo firewall-cmd --runtime-to-permanent
sudo firewall-cmd --reload

これで現在の runtime 状態がそのまま永続設定に保存されます。

応用:設定が反映されない場合のトラブル確認

1️⃣ firewalld の有効状態を確認

sudo systemctl status firewalld

異常例

● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)

→ 対応:

sudo systemctl enable --now firewalld

2️⃣ ゾーンが異なる場合

sudo firewall-cmd --get-active-zones

例:

public
  interfaces: eth0

→ 該当ゾーンに対して設定する必要があります。
例:

sudo firewall-cmd --zone=public --permanent --add-port=8080/tcp
sudo firewall-cmd --reload

対応表

現象主な原因解決コマンド
再起動後にポートが閉じる--permanent を付け忘れfirewall-cmd --permanent --add-port=xx/tcp--reload
runtime と permanent の内容が異なる保存先が異なるfirewall-cmd --runtime-to-permanent
反映されない--reload 未実行firewall-cmd --reload
設定は正しいのに通信できないfirewalld 無効 / ゾーン不一致systemctl enable --now firewalld / firewall-cmd --get-active-zones

まとめ

  • firewall-cmd の設定には「一時(runtime)」と「永続(permanent)」の2種類がある。
  • 永続化するには --permanent オプションを付けて設定し、--reload で反映する。
  • 忘れても --runtime-to-permanent コマンドで復元可能。
  • firewalld のゾーンや有効状態も確認することで、再起動後の通信トラブルを防げます。
目次