「設定したはずなのに…」を防ぐための必須知識
こんにちは!「リナックス先生」です。
Firewalld講座、第5回へようこそ。
前回までは、ポートを開けたりゾーンを変えたりと、具体的な設定方法を学んできました。
しかし、ここで多くの初心者が一つの「壁」にぶつかります。
「苦労して設定したのに、サーバーを再起動したら全部消えてしまった!」
これはFirewalldのバグではありません。あなたがFirewalldの「2つの世界」を理解していないことが原因です。
今回は、この最重要概念である「Runtime」と「Permanent」について、その仕組みから徹底的に解説します。
ここを理解すれば、設定ミスによる「締め出し事故」も防げるようになりますよ。
先生、まさにそれです!
この前、SSHのポート番号を変える実験をしてたら、間違えて繋がらなくなっちゃって…。
焦ってサーバーを再起動したら、なぜか元に戻って助かったんですけど、あれは何だったんですか?
ふふ、それはコウ君が無意識のうちに「Runtime(一時的)」の設定をしていたからよ。
Firewalldは「安全装置」として、設定をすぐにディスクに書き込まない仕組みになっているの。
その仕組みを理解せずに本番環境を触るのは、命綱なしで綱渡りをするようなものよ。
1. Firewalldが持つ「2つの世界」
Firewalldには、設定を管理する場所が2つあります。
これを「パソコンでの作業」に例えてみましょう。
① Runtime(ランタイム):メモリ上の世界
- 例え: Excelを開いて、まだ「保存」ボタンを押していない状態。
- 特徴:
- コマンドを打つと、即座に反映されます。
- PCの電源を切る(サーバー再起動)と、編集内容は全て消えます。
- 用途: 一時的なテストや、設定ミスによる締め出しを防ぐための「お試し」設定。
② Permanent(パーマネント):ディスク上の世界
- 例え: Excelで「名前を付けて保存」したファイルそのもの。
- 特徴:
- コマンドを打っても、すぐには反映されません(ファイルに書き込まれただけ)。
- PCの電源を切っても、内容は消えません(永続化)。
- 反映させるには、ファイルを「開き直す(リロード)」作業が必要です。
- 用途: 本番環境での恒久的な設定。
この2つの違いを意識せずにコマンドを打っていると、「設定したのに動かない(Permanentに書いたけどリロードしてない)」や「再起動したら消えた(Runtimeにしか書いてない)」というトラブルが起こるのです。
2. コマンドでの使い分け
では、実際にコマンドでどう使い分けるのか見てみましょう。
違いはたった一つ、--permanent オプションをつけるかどうかです。
2-1. Runtime(一時的)設定
オプションを何もつけずに実行すると、自動的にRuntime設定になります。
例えば、一時的にWebサーバー(http)を許可してみます。
sudo firewall-cmd --add-service=http
success
この瞬間から、Webサイトにアクセスできるようになります。
しかし、サーバーを再起動したり、Firewalldをリロードすると、この設定は消えて元に戻ります。
2-2. Permanent(永続的)設定
設定を永続化したい場合は、必ず --permanent をつけます。
sudo firewall-cmd --permanent --add-service=http
success
【重要】ここがポイントです!
このコマンドを打った直後は、まだWebサイトにはアクセスできません。
なぜなら、「ディスク上のファイルに書き込んだだけ」で、メモリ上のFirewalldはまだ古い設定で動いているからです。
2-3. 設定を反映させる「リロード」
Permanentの設定を、現在のRuntime(メモリ上)に読み込ませるために、リロードコマンドを実行します。
sudo firewall-cmd --reload
success
これで初めて、永続設定が現在の動作に反映されます。
「–permanent で設定したら、必ず –reload する」。
これをセットで覚えてください。
理想的な作業手順はこうよ。
1. まずはRuntimeで試す(--add-service=http)
2. 実際にアクセスできるか確認する。
3. 問題なければ、同じ内容をPermanentで実行する(--permanent --add-service=http)
これなら、もし手順2でSSHが切断されても、再起動すれば元に戻るから安全でしょ?
3. 設定の確認方法
「今動いている設定(Runtime)」と「保存されている設定(Permanent)」が食い違っていないか、確認する方法を知っておきましょう。
現在の動作設定を見る(Runtime)
これまで使ってきたコマンドです。
sudo firewall-cmd --list-all
保存されている設定を見る(Permanent)
こちらも --permanent オプションをつけるだけです。
sudo firewall-cmd --permanent --list-all
▼実行結果の比較例
Runtimeでhttpを追加した直後の状態です。
| コマンド | services の表示 | 状態 |
|---|---|---|
--list-all |
ssh dhcpv6-client http | 今動いている(Webが見れる) |
--permanent --list-all |
ssh dhcpv6-client | 保存されていない(再起動で消える) |
この2つの出力結果が一致していない場合は、「リロード忘れ」か「Permanentへの書き込み忘れ」のどちらかです。
4. 設定ファイルの正体
Permanent設定は「ディスクに保存される」と言いましたが、具体的にはどこにあるのでしょうか?
AlmaLinux 9の場合、以下のディレクトリにXMLファイルとして保存されています。
/etc/firewalld/zones/
例えば、public ゾーンの設定ファイルを見てみましょう。
sudo cat /etc/firewalld/zones/public.xml
▼実行結果(例)
<?xml version="1.0" encoding="utf-8"?> <zone> <short>Public</short> <description>For use in public areas...</description> <service name="ssh"/> <service name="dhcpv6-client"/> <service name="http"/> </zone>
あなたが firewall-cmd --permanent ... というコマンドを打つたびに、Firewalldが裏でこのXMLファイルを安全に書き換えてくれているのです。
直接編集することも可能ですが、構文ミスを防ぐため、基本はコマンド経由での操作を推奨します。
5. 【裏技】RuntimeをPermanentに変換する
「Runtimeで色々テストして、完璧な設定ができた!
でも、これをもう一回 --permanent をつけて全部打ち直すのは面倒くさい…」
そんな時に使える便利なコマンドがあります。
現在のRuntime設定を、そのままPermanent設定として上書き保存するコマンドです。
sudo firewall-cmd --runtime-to-permanent
success
これで、メモリ上の設定がディスクに書き込まれました。
ただし、「今動いている設定が完全に正しい」という自信がある時だけ使ってください。間違った設定もそのまま永続化されてしまいます。
まとめ:2つの世界を意識しよう
第5回では、Firewalldの最重要概念である2つのモードについて学びました。
- Runtime(一時的): 即反映されるが、再起動で消える。テスト用。
- Permanent(永続的): 再起動しても消えないが、リロードするまで反映されない。本番用。
- Permanent設定をした後は、必ず
--reloadが必要。 - 不安な作業はまずRuntimeで試すのが、締め出しを防ぐコツ。
これで、設定が消えるミステリーは解決ですね。
次回(第6回)からは、いよいよ具体的なサーバー構築の事例に入ります。
まずは基本となる「Webサーバー(Apache/Nginx)の設計と設定」について、IPアドレス制限などの実践的なテクニックも含めて解説していきます。
基礎編はこれで終了です。ここからがエンジニアとしての腕の見せ所ですよ!
▼安全にテストができるVPS
RuntimeとPermanentの違いを理解するには、実際にサーバーを再起動して挙動を確かめるのが一番です。何度でもOS再インストールが可能な、学習に最適なVPSはこちら。


コメント