サービスとポートの管理

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

はじめに

この実験では、firewalld を使ってシステムへの通信を制御する方法を詳しく学びます。

コンピューターを建物にたとえてみましょう。ファイアウォールは、初期状態ではすべてのドアを閉じています。Web 通信やファイル転送など、正当な訪問者を入れるには、特定のドアを開ける必要があります。ネットワークでは、このドアを「ポート」または「サービス」と呼びます。

ここでは、ルールを変更するための重要な 2 つの方法を学びます。

  1. 一時的(Runtime): ホワイトボードにメモを書くようなものです。すぐに有効になりますが、清掃担当者が来ると(システムの再起動や reload を行うと)メモは消えます。
  2. 永続的(Permanent): 石に標識を刻むようなものです。reload や再起動の後も残ります。

この runtime と permanent の区別は、Firewalld の最も重要な概念の 1 つです。管理者は、変更を保持すると決める前に、安全にテストできます。

この実験を終えると、テストのために Web 通信を一時的に許可し、特定のカスタムポートを永続的に開放し、変更を保存する方法を理解できるようになります。

サービスを一時的に許可する

このステップでは、HTTP サービスへの通信を許可します。

実験環境について: セットアップ時に、ターミナル接続を維持するため、デフォルトゾーンを trusted に設定しています。そのため、技術的にはすべてのポートがすでに開いています。ただし、ここではすべての通信がブロックされている安全なサーバーを操作しているものとして進め、ポートを開放するための正しいコマンドを学びます。

http ルールを runtime(一時的な)設定として追加します。

まず、現在のゾーンで明示的に許可されているサービスを確認します。

sudo firewall-cmd --list-services

最初は、表示されるサービスが少ない場合があります。次に、許可リストへ http サービスを追加します。

sudo firewall-cmd --add-service=http

成功すると、ターミナルには success とだけ表示されます。

もう一度サービスを一覧表示して、http が許可されたことを確認します。

sudo firewall-cmd --list-services

一覧に http が表示されます。ファイアウォールにこのルールを「永続的」にするよう指定していないため、このルールはホワイトボードのメモと同じで、現在はメモリ上にだけ存在することに注意してください。

ポートを永続的に開放する

このステップでは、名前付きのサービスではなく、特定の「ドア」の番号を直接開放する場合を扱います。たとえば、ポート 8080 は Web サーバーのテストによく使われます。

サービスとポートのどちらを指定するかには、概念上の違いもあります。サービスは、通常、1 つ以上の既知のポートに対応する名前付きのまとまりです。一方、ポートのルールを直接指定する方法は、より文字どおりで低レベルです。どちらも有効ですが、サービス名のほうが読みやすく、管理しやすいことがよくあります。

このルールは、サーバーを再起動しても残るようにします。そのため、--permanent フラグを使用します。

次のコマンドを実行して、TCP ポート 8080 を永続的に開放します。

sudo firewall-cmd --permanent --add-port=8080/tcp

出力には success と表示されます。

重要なポイント: --permanent を使用すると、設定ファイル(「石板」)を編集しますが、実行中のファイアウォールがすぐに変更されるわけではありません。

これを確認してみましょう。現在実行中の runtime ポートを確認します。

sudo firewall-cmd --list-ports

一覧は空、または 8080 が表示されないはずです。ファイアウォールは更新された設定ファイルをまだ読み込んでいないため、新しいルールを認識していません。

次に、ディスク上に永続設定が安全に保存されていることを確認します。

sudo firewall-cmd --permanent --list-ports

ここでは 8080/tcp が表示されます。これは、ファイアウォールが次回設定を読み込むときに適用されるルールとして保存されていることを示します。

ファイアウォールを reload する

このステップを始める時点では、次の状態になっています。

  • ステップ 1 で、http を許可する一時的なルールを追加しました。
  • ステップ 2 で、8080 を許可する永続的なルールを保存しましたが、まだ有効になっていません。

永続ルールを有効にするには、ファイアウォールを reload する必要があります。reload によって Firewalld が設定ファイルを再読み込みし、その内容を適用します。

reload は、runtime と permanent の設定が反映される境目です。ディスク上に定義された内容で、メモリ上の現在のルールセットを置き換えます。そのため、永続的に保存しなかった一時的な変更は消えます。

警告: reload を実行すると、ファイアウォールは設定ファイルに記載された状態に戻ります。http ルールは一時的な設定であり、設定ファイルには保存されていないため、失われます。

reload コマンドを実行します。

sudo firewall-cmd --reload

次に、何が起きたかを確認します。まず、ポート 8080 が有効になっているか確認します。

sudo firewall-cmd --list-ports

成功です。8080/tcp が表示されます。永続ルールが実行中のシステムに読み込まれました。

次に、http サービスに何が起きたか確認します。

sudo firewall-cmd --list-services

http サービスは表示されなくなっています。これは、reload によって runtime のみに存在する変更が消去されたことを示しています。これは初心者がよく遭遇する注意点です。重要なルールは、必ず永続的に設定するようにしてください。

設定全体を確認する

このステップでは、日常的なファイアウォール管理で最も役立つコマンドを使用します。サービスとポートを別々に確認する代わりに、アクティブなゾーンの設定全体を一度に表示できます。

この全体表示は重要です。ファイアウォールの動作は複数の種類のルールによって決まるため、設定の一部を見落とすと誤りにつながることがあります。ゾーン全体を確認すれば、そのリスクを減らせます。

--list-all オプションを使用して、設定全体を表示します。

sudo firewall-cmd --list-all

出力には、アクティブなゾーン(この実験環境では trusted)の完全な概要が表示されます。

  • target: ACCEPT。
  • interfaces: アクティブなネットワークインターフェース(例:eth0)。
  • services: 許可されている標準サービスの一覧。reload 後に失われたため、http が表示されていないことを確認してください。
  • ports: 開放されているカスタムポートの一覧(例:8080/tcp)。

このコマンドは、ファイアウォールが現在どのように動作しているかを正確に確認できるため、トラブルシューティングに非常に役立ちます。

まとめ

この実験では、一時的なファイアウォールルールと永続的なファイアウォールルールの違いを習得しました。次の内容を学びました。

  1. Runtime ルール: http のようなサービスを即座に、ただし一時的に追加する方法。
  2. Permanent ルール: --permanent フラグを使用して、ポート 8080 の開放などのルールを将来のために保存する方法。
  3. Reload: --reload を使って永続的な変更を runtime 環境に適用する方法と、その際に一時的なルールが破棄されること。
  4. 確認: --list-all を使用して、ファイアウォールの状態全体を確認する方法。

これで、ネットワークアクセスを安全かつ永続的に制御するための基礎を身につけました。