「どこに繋がっているか」でルールを変える
こんにちは!「リナックス先生」です。
Firewalld講座、第3回へようこそ。
前回はコマンド操作の基礎を学びましたが、今回はFirewalldの真骨頂である「ゾーン(Zone)の使い分け」に踏み込みます。
「Webサーバーなら全部 public でいいんじゃないの?」と思っているなら、それは少しもったいない(そして少し危険な)考え方かもしれません。
例えば、あなたの家の玄関(インターネット側)は厳重にロックすべきですが、家の中の部屋のドア(内部ネットワーク側)までオートロックにする必要はありませんよね?
今回は、そんな「場所に応じた使い分け」をコマンドで実装する方法をマスターしましょう。
先生、VPSだとLANケーブル(インターフェース)が1本しかないことが多いですよね?
それでもゾーンを切り替える必要ってあるんですか?
鋭い質問ね。
確かにインターフェースが1つの場合は public だけで運用することも多いわ。
でも、「メンテナンス中だけ自分を trusted(全許可)扱いにしたい」とか、将来的に「データベースサーバーと専用回線で繋ぐ」といった時に、この知識がないと手詰まりになるのよ。
1. 現在の「所属ゾーン」を確認する
まずは、今の自分のサーバーのLANケーブル(インターフェース)が、どのゾーンに属しているかを確認しましょう。
前回使った --list-all でも見れますが、ゾーン情報だけをピンポイントで見るコマンドがあります。
アクティブなゾーンを確認
sudo firewall-cmd --get-active-zones
▼実行結果(一般的なVPSの例)
public interfaces: eth0
これは、「インターフェース eth0 は、現在 public ゾーンのルールで守られていますよ」という意味です。
もしインターフェースが複数ある場合(eth0とeth1など)、それぞれが別の行に表示されます。
2. インターフェースのゾーンを変更する
では、実験としてこのサーバーを「自宅ネットワーク内にある安全なサーバー」だと仮定して、ゾーンを public(低信頼)から home(中信頼)に変更してみましょう。
インターフェースのゾーン移動には --change-interface オプションを使います。
2-1. 一時的に変更する(Runtime)
まずは再起動すると元に戻る「一時的な変更」で試します。
sudo firewall-cmd --zone=home --change-interface=eth0
▼実行結果
success
確認してみましょう。
sudo firewall-cmd --get-active-zones
home interfaces: eth0
public から home に変わりましたね!
この状態で firewall-cmd --list-all --zone=home を見ると、homeゾーンの設定が適用されていることがわかります。
2-2. 永続的に変更する(Permanent)
サーバーを再起動してもこの設定を維持したい場合は、--permanent をつけます。
AlmaLinux 9(NetworkManager管理下)では、以下のコマンドを実行すると、ネットワーク設定ファイル自体が書き換えられます。
sudo firewall-cmd --permanent --zone=home --change-interface=eth0
へぇ!
「このLANポートは安全地帯用」って決めたら、こうやってゾーンごと変えてしまえば、個別にポートを開け閉めしなくて済むんですね。
3. 「デフォルトゾーン」という命綱
もし、新しいLANカードを挿したり、仮想ネットワークインターフェース(Dockerなど)が勝手に作られたりした場合、それらはどのゾーンに入るのでしょうか?
答えは「デフォルトゾーン」に入ります。
初期状態では public がデフォルトになっています。
デフォルトゾーンの確認
sudo firewall-cmd --get-default-zone
▼実行結果
public
デフォルトゾーンの変更
「うちは完全に社内LAN(閉域網)の中にあるサーバーだから、何もしなければ全部 trusted(全許可)にしたい」といった特殊なケースでは、デフォルトを変更します。
sudo firewall-cmd --set-default-zone=trusted
※注意: インターネットに繋がっているVPSでこれをやると、一瞬で全てのポートが全開放され、攻撃の的になります。
通常のWebサーバー運用では、デフォルトは必ず public か drop にしておくことを強く推奨します。
4. 【実践】マルチインターフェース環境の設計
ここからは少し上級編です。
本格的なシステムでは、サーバーに2つのLANポート(NIC)を持たせることがあります。
- eth0(インターネット側): 世界中からアクセスが来る。
- → Zone: public を割り当て。Web(80/443)だけ許可。
- eth1(データベース側): 裏にあるDBサーバーとだけ通信する。
- → Zone: internal を割り当て。DB接続(3306)やデータ転送を許可。
このように設定すると、万が一インターネット側(eth0)からデータベースポートへの攻撃があっても、そもそもゾーンが違うため「入り口」で遮断されます。
これが「多層防御」の考え方です。
設定例
それぞれのインターフェースにゾーンを割り当てます。
# インターネット側をpublicに固定 sudo firewall-cmd --permanent --zone=public --change-interface=eth0 # 裏側の通信用をinternalに固定 sudo firewall-cmd --permanent --zone=internal --change-interface=eth1 # 設定反映 sudo firewall-cmd --reload
確認してみましょう。
sudo firewall-cmd --get-active-zones
▼実行結果のイメージ
internal interfaces: eth1 public interfaces: eth0
これで、「正面玄関(public)」と「勝手口(internal)」で異なるセキュリティチェックを行うことができるようになりました。
素晴らしいわ。
初心者のうちは public だけで運用しがちだけど、システムが大きくなると「ゾーン分割」が必須になるの。
「信頼度=ゾーン」という感覚を忘れないでね。
まとめ:場所が変わればルールも変わる
今回は「ゾーン」の操作方法について解説しました。
- 現在使っているインターフェースがどのゾーンにいるかは
--get-active-zonesで確認。 - インターフェースの所属替えは
--change-interfaceを使う。 - インターネット公開サーバーは、デフォルトを
publicのままにしておくのが安全。 - NICが複数ある場合は、それぞれ適切なゾーンに割り振ることでセキュリティを高められる。
さて、土台となる「ゾーン」の設定は完璧です。
次回(第4回)は、いよいよそのゾーンに対して「具体的なサービス(WebやSSH)を許可する方法」や「独自のポート番号(8080番など)を開ける方法」を学びます。
ここからが一番実用的な設定になります。お楽しみに!
▼マルチインターフェース構成も組めるVPS
本格的なネットワーク設計を学ぶなら、複数の仮想ネットワークを組めるクラウドやVPSが最適です。AlmaLinux 9対応のおすすめはこちら。



コメント