Firewalld の基本とゾーン

LinuxBeginner
オンラインで実践に進む

はじめに

この実験では、多くの Linux ディストリビューションで利用できる最新のファイアウォール管理ツール、Firewalld について学びます。

ファイアウォールは、システムへのネットワーク通信、またはシステムから外部へのネットワーク通信のうち、許可するものを制御します。従来のパケットフィルタリングルールは、初心者にとって扱いにくい場合があります。Firewalld は、より高いレベルで管理できる仕組みを提供し、管理者がポリシーをより安全かつ動的に調整できるようにします。

Firewalld の中心的な概念は ゾーン です。ゾーンを使うと、ネットワークインターフェースや接続ごとに異なる信頼レベルを適用できます。

  • Home ゾーン: 自宅のリビングルームのようなものです。ここにいる人(デバイス)を信頼するため、ドアはほとんど開いています。
  • Public ゾーン: カフェのようなものです。周囲にいる他の人(デバイス)を信頼しないため、ドアを施錠し、非常に限定された通信だけを許可します。

Firewalld では、異なるネットワーク接続(インターフェース)をこれらのゾーンに割り当てられます。

この実験を終えると、次のことができるようになります。

  1. Firewalld サービスを安全にインストールして起動する。
  2. どのセキュリティ「ゾーン」がアクティブか確認する。
  3. ゾーン内のルールを確認する。
  4. ネットワークインターフェースを別のゾーンへ移動する。

Firewalld のインストールと起動

このステップでは、Firewalld ソフトウェアをインストールし、実行中であることを確認します。

重要な安全手順: このリモート実験環境では、ターミナルへの接続はネットワークが開いていることに依存しています。デフォルト設定(通常は Public または Drop)のままファイアウォールを起動すると、接続がブロックされ、すぐにアクセスできなくなる可能性があります。これを防ぐため、Firewalld が接続に Trusted ゾーンを使用するよう明示的に設定します。

これは重要な運用上の教訓です。ファイアウォールの作業は攻撃対象領域を減らす一方で、ネットワークポリシーを不用意に変更すると、自分自身のアクセスも遮断する可能性があります。優れた管理者は、ネットワーク制御を変更する前に、復旧方法と現在のアクセス経路を検討します。

まず、パッケージをインストールします。

sudo apt-get update
sudo systemctl mask firewalld
sudo apt-get install firewalld -y

マスクすることで、パッケージのインストール時に firewalld が自動的に起動するのを防ぎます。サービスを起動する前に、firewall-offline-cmd を使用してデフォルトゾーンを trusted に設定し、eth0 をそのゾーンに割り当てます。このクライアントは firewalld が停止している状態で動作します。これらの永続的な管理用設定を保存してから、サービスのマスクを解除してください。

sudo firewall-offline-cmd --set-default-zone=trusted
sudo firewall-offline-cmd --zone=trusted --add-interface=eth0
sudo systemctl unmask firewalld
sudo systemctl start firewalld
sudo firewall-cmd --reload

サービスが起動時に自動的に開始されるように設定します。

sudo systemctl enable firewalld

最後に、Firewalld が実行中であることを確認します。

sudo firewall-cmd --state

出力に running と表示されれば成功です。

アクティブなゾーンの確認

このステップでは、Firewalld が実行中になったので、ゾーンを確認します。

ゾーンは、Firewalld の主要な抽象化レイヤーです。大量のパケットルールを個別に覚える代わりに、インターフェースを信頼レベルごとにまとめ、ゾーンによってその環境の基本ポリシーを表現します。

現在使用されているゾーンを確認するには、次のコマンドを実行します。

sudo firewall-cmd --get-active-zones

前のステップで設定したため、次のように表示されます。

trusted
  interfaces: eth0

これは次のことを示しています。

  • trusted ゾーンがアクティブである。
  • ネットワークインターフェース eth0(メインの接続)がこのゾーン内に安全に割り当てられている。

ほかにどのようなゾーンが存在するか確認したい場合は、利用可能なゾーンをすべて一覧表示できます。

sudo firewall-cmd --get-zones

block、home、work、public などの名前が表示されます。

ゾーン設定の一覧表示

このステップでは、アクティブなゾーンの詳細なルールを確認します。

ここで、Firewalld がより具体的に理解できるようになります。ゾーンは public や trusted などの単なるラベルではありません。デフォルトターゲット、許可されたサービス、ポート、転送動作など、実際のポリシー設定をまとめたものです。

--list-all オプションを使って、現在のデフォルトゾーン(trusted)の完全な設定を表示します。

sudo firewall-cmd --list-all

設定内容が出力されます。trusted ゾーンで重要な項目は次のとおりです。

  • target: ACCEPT。これは「すべてを受け入れる」という意味です。

この設定により、接続が安全であることを確認できます。

別のゾーン、たとえば public ゾーンのルールを確認したい場合は、ゾーン名を指定します。

sudo firewall-cmd --zone=public --list-all

public ゾーンのほうが、はるかに制限が厳しいことを確認できます。

インターフェースのゾーン変更

このステップでは、インターフェースを別のゾーンへ移動する練習をします。

インターフェースのゾーンを変更することは、そのインターフェースから到着する通信の信頼分類を変更することです。そのため、同じホストでも、すべてのルールを最初から書き直すことなく、接続するネットワークごとに異なる動作をさせられます。

警告: メインインターフェース eth0 を work ゾーンへ移動すると、work ゾーンが Web ターミナル接続をブロックするため、すぐに接続が切れてしまいます。

安全に練習するため、仮想の「ダミー」ネットワークインターフェースを作成し、それを使って実験します。

まず、dummy0 という名前のダミーインターフェースを作成します。

sudo ip link add dummy0 type dummy
sudo ip link set dummy0 up

最初に、このインターフェースを public ゾーンへ追加します(割り当て先を設定するためです)。

sudo firewall-cmd --zone=public --add-interface=dummy0

ここで、dummy0 がノートパソコンの Wi-Fi カードで、オフィスに入ったところだと想像してください。このインターフェースを work ゾーンへ切り替えます。

sudo firewall-cmd --zone=work --change-interface=dummy0

変更を確認します。

sudo firewall-cmd --get-active-zones

次の 2 つのアクティブなゾーンが表示されます。

  • trusted: eth0 が含まれています(接続を維持します)。
  • work: dummy0 が含まれています(テスト用インターフェースです)。
trusted
  interfaces: eth0
work
  interfaces: dummy0

接続を切断することなく、ゾーンを変更する方法を習得できました。

まとめ

この実験では、Firewalld の基本を学びました。次の操作を行いました。

  1. サービスを インストールし、接続が切れないよう安全に設定しました。
  2. ゾーンがセキュリティプロファイルのように機能することを学びました。
  3. ゾーン内のルールを 確認しました。
  4. 仮想インターフェースを作成し、ゾーン間で切り替える練習をしました。

ゾーンを理解することは、Firewalld を使うための基礎です。次の実験では、特定のポートを開放してゾーンをカスタマイズする方法を学びます。