【Firewalld講座 第3回】ゾーンを使い分けろ!自宅・社内・公開サーバーでセキュリティレベルを変える方法

「どこに繋がっているか」でルールを変える

こんにちは!「リナックス先生」です。
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 ゾーンのルールで守られていますよ」という意味です。
もしインターフェースが複数ある場合(eth0eth1など)、それぞれが別の行に表示されます。

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サーバー運用では、デフォルトは必ず publicdrop にしておくことを強く推奨します。

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対応のおすすめはこちら。

【2026年最新】Linuxサーバー構築におすすめのVPS比較3選!現役エンジニアが速度とコスパで厳選
Linuxの勉強、まだ「自分のPC」でやって消耗していませんか?「Linuxを覚えたいけど、環境構築でエラーが出て先に進めない…」「VirtualBoxを入れたらパソコンが重くなった…」これは、Linux学習を始める9割の人がぶつかる壁です...

コメント