目次
概要
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 に保存されていない可能性が高いです。
原因の特定手順
- runtime 設定の確認
sudo firewall-cmd --list-ports
→ 一時的に開放されているポートを表示。 - permanent 設定の確認
sudo firewall-cmd --permanent --list-ports
→ 永続的に保存されているポートを表示。
出力例:
# runtime
80/tcp 443/tcp
# permanent
(空欄)
このように permanent 側に設定がない場合、再起動後に設定が失われます。
解決方法
✅ 解決手順(正しい設定の流れ)
- 永続設定として追加
sudo firewall-cmd --permanent --add-port=80/tcp sudo firewall-cmd --permanent --add-port=443/tcp
- 設定を反映
sudo firewall-cmd --reload
- 確認
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 のゾーンや有効状態も確認することで、再起動後の通信トラブルを防げます。
あわせて読みたい


firewalld でポートが開かないときの対処方法
Linux サーバでサービスを公開しようとして firewalld を設定したのに、外部からアクセスできない…。そんなときに確認すべきポイントをまとめます。 1. firewalld の基…
あわせて読みたい


fail2ban による誤BAN が原因で SSH / HTTP 接続できないときの解除方法
概要 Linuxサーバーで突然 SSH や HTTP にアクセスできなくなる場合、fail2ban による誤BAN(誤検出) が原因のことがあります。これは、特定IPアドレスからのアクセス…