UFW ファイアウォールの設定

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

はじめに

コンピューターを家にたとえてみましょう。初期状態では、ドアや窓が開いていて、誰でも入れるかもしれません。家を安全にするには、ルールに基づいて出入りを管理する警備員が必要です。

Linux では、UFW(Uncomplicated Firewall)がこの警備員の役割を果たします。UFW は、低レベルのファイアウォールシステムを操作しやすくするインターフェースとして設計されています。UFW を使うと、システムへの接続を許可する相手と、許可しない相手を定義できます。

ここで重要なのは、UFW はファイアウォールエンジンそのものではなく、管理レイヤーだという点です。低レベルのパケットフィルタリングルールを直接記述しなくても、ネットワークアクセスを制御するポリシーを初心者にも分かりやすい形で設定できます。

ただし、LabEx のようなクラウド環境でファイアウォールを設定する場合は注意が必要です。デフォルトですべての受信接続をブロックすると、一般的なセキュリティ対策ではありますが、LabEx 環境への接続まで誤って切断してしまう可能性があります。

この実験では、安全な方法を使用します。

  1. ロックアウトを防ぐため、デフォルトポリシーで受信接続を Allow に設定します。
  2. Web アプリケーション用に、ポート 8080 の通信を明示的に許可します。
  3. ファイアウォールを有効にします。

この手順により、ワークスペースへのアクセスを失わずに UFW ルールを管理する方法を学べます。

ファイアウォールのステータスを確認する

変更を加える前に、アプリケーションとファイアウォールの現在の状態を確認することが重要です。

ポート 8080 で簡単な Web サーバーが動作しています。まず、アプリケーションにアクセスできることを確認します。

次のコマンドを実行してください。

curl -I 127.0.0.1:8080

次のような HTTP レスポンスが表示されます。

HTTP/1.0 200 OK
Server: SimpleHTTP/0.6 Python/3.10.6
...

この結果は、Web アプリケーションが実行中で、ローカルから到達できることを示しています。

ファイアウォールを変更する前にサービスを確認すると、アプリケーションの問題とネットワークポリシーの問題を切り分けられます。サービスがローカルですでに失敗している場合、最初に疑うべきなのはファイアウォールではありません。

次に、UFW が現在有効かどうかを確認します。

sudo ufw status

通常、次のように表示されます。

Status: inactive

これは、UFW がインストールされているものの、現在はルールを適用していないことを示します。そのため、すべての通信が自由に通過できます。

ファイアウォールのルールセットは、ネットワークアクセスのポリシーです。「Inactive」はソフトウェアが壊れているという意味ではなく、現在そのポリシーが適用されていないという意味です。

デフォルトポリシーとルールを設定する

ここでは、ファイアウォールが通信を処理する方法を設定します。

デフォルトポリシーを Allow に設定する

UFW は通常、デフォルトで受信接続をすべて拒否するように設定されています。ローカルマシンでは安全な設定です。しかし、LabEx のオンライン環境で受信接続をすべてブロックすると、ブラウザーと実験環境の接続が切断される可能性があります。

これを防ぐため、受信通信のデフォルトポリシーを ALLOW に設定します。

sudo ufw default allow incoming

出力:

Default incoming policy changed to 'allow'
(be sure to update your rules accordingly)

ポート 8080 を許可する

次に、ポート 8080 で動作している Web アプリケーションへの通信を明示的に許可するルールを作成します。デフォルトポリシーが「allow」であっても、これはよい習慣です。許可の意図を記録でき、将来デフォルトポリシーを「deny」に変更する場合にも備えられます。

セキュリティでは、このように意図を明示することが重要です。明確なルールがあれば、後からポートが開いている理由や、その公開がまだ必要かどうかを理解しやすくなります。

sudo ufw allow 8080

システムにより、次のように確認されます。

Rules updated
Rules updated (v6)

これで、安全な基本設定を確立し、アプリケーション用の具体的なルールを追加できました。

ファイアウォールを有効にする

ルールの設定が完了したので、ファイアウォールを有効にします。

次のコマンドを実行して UFW を有効にしてください。

sudo ufw enable

デフォルトポリシーを ALLOW に設定しているため、デフォルトが deny の場合によく表示される「SSH 接続が中断される可能性がある」という警告は表示されず、UFW はすぐに有効になります。

次のように表示されます。

Firewall is active and enabled on system startup

これで、ファイアウォールという警備員が実際に「有効」になりました。

この時点で、UFW はルールを保存しているだけではなく、ルールを適用しています。設定されたポリシーと、実際に有効なポリシーを区別することは、多くのシステムに共通する重要なセキュリティ概念です。

ファイアウォールの設定を確認する

最後に、ファイアウォールが有効で、ルールが正しく適用されていることを確認します。

もう一度ステータスを確認してください。

sudo ufw status

ステータスが active になり、作成したルールも表示されます。

Status: active

To                         Action      From
--                         ------      ----
8080                       ALLOW       Anywhere
8080 (v6)                  ALLOW       Anywhere (v6)

接続をテストする

ファイアウォールを有効にした後も、Web アプリケーションにアクセスできることを確認します。

curl -I 127.0.0.1:8080

先ほどと同じ HTTP/1.0 200 OK レスポンスが返るはずです。

これにより、次のことを確認できます。

  1. ファイアウォールが有効になっている。
  2. ルールが想定どおりに機能している。
  3. アプリケーションに引き続きアクセスできる。

まとめ

この実験では、UFW ファイアウォールを正常に設定して有効化しました。

次の方法を学びました。

  1. ファイアウォールのステータスを確認する:sudo ufw status を使用して、ファイアウォールが有効かどうかを確認します。
  2. 安全なデフォルト設定を行う:sudo ufw default allow incoming を使用して、クラウド環境での誤ったロックアウトを防ぎます。
  3. ルールを追加する:sudo ufw allow 8080 を使用して、特定のポートへの通信を許可します。
  4. ファイアウォールを有効にする:sudo ufw enable を使用して、ルールを有効にします。

本番環境では通常、受信通信のデフォルトポリシーを deny に設定し、必要なポートだけを明示的に許可します。たとえば、SSH 用の 22 番ポートや HTTP 用の 80 番ポートなどです。ただし、これらのルールを安全に管理する方法を理解することが、システムを保護するための第一歩です。