UbuntuでUFWを使用してファイアウォールを設定する方法

導入

UFW、またはUncomplicated Firewallは、ファイアウォールの構成プロセスを簡素化することを目的としたiptablesのインターフェースです。 iptablesは堅牢で柔軟なツールですが、初心者がファイアウォールを適切に構成する方法を学ぶのは難しい場合があります。 ネットワークのセキュリティを確保し始めたいが、どのツールを使用すべきかわからない場合は、UFWが適切な選択肢になるかもしれません。

このチュートリアルでは、Ubuntu v18.04以降でUFWを使用してファイアウォールを設定する方法を紹介します。

前提条件

Ubuntuバージョン16.04またはそれ以下を使用している場合は、これらのバージョンに対するサポートがUbuntuによって提供されなくなったため、より新しいバージョンにアップグレードすることをお勧めします。 このガイドのコレクションを使用して、Ubuntuバージョンをアップグレードする手順を確認してください。

このチュートリアルに従うには、次のものが必要です:

  • sudo特権を持つ非ルートユーザーとともにUbuntuを実行するサーバー。これらを設定する手順については、このリストからディストリビューションを選択し、初期サーバーセットアップガイドに従ってください。

  • UbuntuにはデフォルトでUFWがインストールされています。何らかの理由でアンインストールされている場合は、sudo apt install ufwを使用してインストールできます。

UFWでUbuntuファイアウォールを設定する

  1. IPv6を有効にする
  2. デフォルトポリシーを設定する
  3. SSH接続を許可する
  4. UFWを有効にする
  5. その他必要な接続を許可する
  6. 接続を拒否する
  7. ファイアウォールルールの削除
  8. UFWのステータスとルールの確認
  9. Ubuntuでファイアウォールを無効にする方法

ステップ1 — IPv6が有効であることを確認する

最近のバージョンのUbuntuでは、IPv6がデフォルトで有効になっています。実際には、サーバーに追加されたほとんどのファイアウォールルールにはIPv4とIPv6の両方が含まれます。後者はUFWのステータスコマンドの出力内でv6で識別されます。IPv6が有効になっていることを確認するには、UFWの設定ファイルである/etc/default/ufwを確認できます。このファイルをnanoまたはお気に入りのコマンドラインエディタで開きます:

  1. sudo nano /etc/default/ufw

次に、IPV6の値がyesに設定されていることを確認します。次のように表示されるはずです:

/etc/default/ufw excerpt
  1. IPV6=yes

ファイルを保存して閉じます。もしnanoを使用している場合は、CTRL+Xを入力し、次にYを押して確認します。

このガイドの後の手順でUFWが有効になっている場合、IPv4とIPv6の両方のファイアウォールルールを書き込むように構成されます。

ステップ2 — デフォルトポリシーの設定

UFWを始めたばかりの場合、まずはデフォルトのファイアウォールポリシーを確認するのが良い第一歩です。これらのルールは、明示的に他のルールに一致しないトラフィックの処理方法を制御します。

デフォルトでは、UFWはすべての着信接続を拒否し、すべての送信接続を許可するように設定されています。これは、サーバーに到達しようとする人は接続できない一方で、サーバー内のアプリケーションは外部と通信できることを意味します。特定のサービスやポートを許可する追加のルールは、この一般的なポリシーの例外として含まれています。

このチュートリアルの残りの部分について確実に追跡できるようにするために、今度はUFWのデフォルトの着信および送信トラフィックのポリシーを設定します。

デフォルトのUFW着信ポリシーをdenyに設定するには、次のコマンドを実行します:

  1. sudo ufw default deny incoming
Output
Default incoming policy changed to 'deny' (be sure to update your rules accordingly)

デフォルトのUFW送信ポリシーをallowに設定するには、次のコマンドを実行します:

  1. sudo ufw default allow outgoing
Output
Default outgoing policy changed to 'allow' (be sure to update your rules accordingly)

これらのコマンドは、着信を拒否し、送信を許可するデフォルトを設定します。これらのファイアウォールのデフォルトだけで個人用コンピューターに十分かもしれませんが、通常、サーバーは外部のユーザーからの着信要求に応答する必要があります。次にその方法を見ていきます。

ステップ3 — SSH接続の許可

現時点でUFWファイアウォールを有効にすると、すべての着信接続が拒否されます。これは、SSHやHTTP接続などの正当な着信接続を明示的に許可するルールを作成する必要があることを意味します。たとえば、サーバーがそのようなリクエストに応答する場合、SSH接続またはHTTP接続を許可するルールを作成する必要があります。クラウドサーバーを使用している場合、サーバーに接続して管理するためにSSH接続を許可する必要があるでしょう。

OpenSSH UFWアプリケーションプロファイルの許可

インストール時に、ネットワーク接続に依存するほとんどのアプリケーションは、UFW内にアプリケーションプロファイルを登録します。これにより、ユーザーはサービスへの外部アクセスを素早く許可または拒否できます。現在UFWに登録されているプロファイルを確認するには、次のコマンドを使用します:

  1. sudo ufw app list
Output
Available applications: OpenSSH

OpenSSHアプリケーションプロファイルを有効にするには、次のコマンドを実行します:

  1. sudo ufw allow OpenSSH
Output
Rule added Rule added (v6)

これにより、SSHデーモンがデフォルトでリッスンしているポートであるポート22上のすべての接続を許可するファイアウォールルールが作成されます。

サービス名によるSSHの許可

UFWを設定して、着信SSH接続を許可する別の方法は、そのサービス名sshを参照することです。

  1. sudo ufw allow ssh
Output
Rule added Rule added (v6)

UFWは、/etc/servicesファイルに基づいてサービスが使用するポートとプロトコルを認識しています。

ポート番号によるSSHの許可

また、アプリケーションプロファイルやサービス名の代わりにポートを指定して同等のルールを記述することもできます。たとえば、次のコマンドは前述の例と同じく機能します:

  1. sudo ufw allow 22
Output
Rule added Rule added (v6)

SSHデーモンを別のポートで使用するように構成した場合は、適切なポートを指定する必要があります。たとえば、SSHサーバーがポート2222でリッスンしている場合、このコマンドを使用してそのポートでの接続を許可できます:

  1. sudo ufw allow 2222
Output
Rule added Rule added (v6)

ファイアウォールが着信SSH接続を許可するように設定されたので、これを有効にできます。

ステップ4 — UFWの有効化

ファイアウォールは、現在SSH接続を許可するように設定されています。まだファイアウォールが無効の場合でも、これまでに追加されたルールを確認するには、以下を使用できます:

  1. sudo ufw show added
Output
Added user rules (see 'ufw status' for running firewall): ufw allow OpenSSH

着信SSH接続を許可するルールがあることを確認した後、ファイアウォールを有効にするには、以下を使用します:

  1. sudo ufw enable
Output
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y Firewall is active and enabled on system startup

既存のSSH接続に影響を与える可能性があると警告が表示されます。すでにSSH接続を許可するファイアウォールルールを設定しているため、続行しても問題ありません。プロンプトにyと入力し、ENTERキーを押して応答してください。

ファイアウォールは現在アクティブです。ルールを確認するにはsudo ufw status verboseコマンドを実行してください。このチュートリアルの残りの部分では、UFWの詳細な使用方法について説明します。異なる種類の接続を許可または拒否する方法についても説明します。

ステップ5 — 他の接続を許可する

この時点で、サーバーが応答する必要がある他のすべての接続を許可する必要があります。許可する接続は、特定のニーズに基づきます。アプリケーションプロファイル、サービス名、またはポートに基づいて接続を許可するルールを書く方法はすでに知っています。これは、ポート22上のSSHに対してすでに行いました。HTTP(ポート80)は、暗号化されていないWebサーバーが使用するものであり、これに対してはsudo ufw allow httpまたはsudo ufw allow 80を使用できます。

  • ポート443上のHTTPSは、暗号化されたWebサーバーが使用するものです。sudo ufw allow httpsまたはsudo ufw allow 443を使用します。
  • HTTPとHTTPSの両方を備えたApacheを使用する場合、sudo ufw allow ‘Apache Full’を使用します。
  • HTTPとHTTPSの両方を備えたNginxを使用する場合、sudo ufw allow ‘Nginx Full’を使用します。

サーバーで利用可能なアプリケーションプロファイルを確認するには、sudo ufw app listを使用してください。

ポートや既知のサービス名を指定する以外に、接続を許可する他の方法がいくつかあります。次にいくつかを見てみましょう。

特定のポート範囲

UFWでは、ポート範囲を指定できます。一部のアプリケーションは、単一のポートではなく複数のポートを使用します。

たとえば、ポート60006007を使用するX11接続を許可するには、次のコマンドを使用します。

  1. sudo ufw allow 6000:6007/tcp
  2. sudo ufw allow 6000:6007/udp

UFWでポート範囲を指定する場合は、適用するプロトコル(tcpまたはudp)を指定する必要があります。これまで言及していなかったのは、プロトコルを指定しないと自動的に両方のプロトコルが許可されるためですが、ほとんどの場合は問題ありません。

特定のIPアドレス

UFWを使用する際は、ルール内でIPアドレスを指定することもできます。たとえば、特定のIPアドレス(作業用または自宅のIPアドレスなど)からの接続を許可したい場合は、fromパラメーターを使用して、許可するIPアドレスを指定する必要があります:

  1. sudo ufw allow from 203.0.113.4
Output
Rule added

IPアドレスが接続を許可されるポートも指定できます。ポート番号の後にto any portを追加します。たとえば、203.0.113.4がポート22(SSH)に接続することを許可したい場合は、次のコマンドを使用します:

  1. sudo ufw allow from 203.0.113.4 to any port 22
Output
Rule added

サブネット

IPアドレスのサブネットを許可する場合は、CIDR表記を使用してネットマスクを指定できます。たとえば、203.0.113.1から203.0.113.254までのすべてのIPアドレスを許可したい場合は、次のコマンドを使用できます:

  1. sudo ufw allow from 203.0.113.0/24
Output
Rule added

同様に、サブネット203.0.113.0/24が接続を許可される宛先ポートも指定できます。再び、ポート22(SSH)を例にします:

  1. sudo ufw allow from 203.0.113.0/24 to any port 22
Output
Rule added

特定のネットワークインターフェースへの接続

特定のネットワークインターフェースにのみ適用されるファイアウォールルールを作成したい場合は、「allow in on」に続いてネットワークインターフェースの名前を指定します。

続行する前にネットワークインターフェースを調べる必要があります。次のコマンドを使用してください:

  1. ip addr
Output Excerpt
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state . . . 3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default . . .

ハイライトされた出力はネットワークインターフェースの名前を示しています。通常、それらはeth0enp3s2などの名前が付けられています。

したがって、サーバーにeth0という名前のパブリックネットワークインターフェースがある場合、次のコマンドでHTTPトラフィック(ポート80)を許可できます:

  1. sudo ufw allow in on eth0 to any port 80
Output
Rule added Rule added (v6)

これにより、サーバーがパブリックインターネットからのHTTPリクエストを受信できるようになります。

または、MySQLデータベースサーバー(ポート3306)がプライベートネットワークインターフェースeth1で接続を受け付けるようにしたい場合は、次のコマンドを使用できます:

  1. sudo ufw allow in on eth1 to any port 3306
Output
Rule added Rule added (v6)

これにより、プライベートネットワーク上の他のサーバーがMySQLデータベースに接続できるようになります。

ステップ6 — 接続の拒否

デフォルトの受信接続ポリシーを変更していない場合、UFWはすべての受信接続を拒否するように構成されています。一般的には、これにより特定のポートとIPアドレスを明示的に許可するルールを作成する必要があるため、セキュアなファイアウォールポリシーの作成プロセスが簡素化されます。

しかしながら、時々特定の接続を拒否したくなる場合があります。たとえば、ソースIPアドレスまたはサブネットに基づいて、おそらくサーバーがそこから攻撃を受けていることを知っているためです。また、デフォルトの受信ポリシーを許可に変更したい場合(これは推奨されませんが)、接続を許可したくないサービスやIPアドレスに対して拒否ルールを作成する必要があります。

拒否ルールを記述するには、以前に説明したコマンドを使用し、許可拒否に置き換えます。

たとえば、HTTP接続を拒否する場合、次のコマンドを使用できます:

  1. sudo ufw deny http
Output
Rule added Rule added (v6)

または、203.0.113.4からのすべての接続を拒否したい場合、次のコマンドを使用できます:

  1. sudo ufw deny from 203.0.113.4
Output
Rule added

場合によっては、サーバーからの送信接続をブロックしたい場合もあります。サーバー上のポート(たとえばSMTPトラフィックのポート25)の使用をすべてのユーザーに拒否するには、ポート番号に続いてdeny outを使用できます:

  1. sudo ufw deny out 25
Output
Rule added Rule added (v6)

これにより、サーバー上のすべての送信SMTPトラフィックがブロックされます。

ステップ7 — ルールの削除

ファイアウォールルールを削除する方法を知ることは、それを作成する方法と同じくらい重要です。削除するルールを指定する方法は、ルール番号または人が読みやすい名前(ルールが作成されたときと同様の方法)で指定できます。

番号でUFWルールを削除する

UFWルールを番号で削除するには、まずファイアウォールルールの番号付きリストを取得する必要があります。 UFWステータスコマンドには、各ルールの横に番号を表示するオプションがあります。以下に示すように:

  1. sudo ufw status numbered
Numbered Output:
Status: active To Action From -- ------ ---- [ 1] 22 ALLOW IN 15.15.15.0/24 [ 2] 80 ALLOW IN Anywhere

ポート80(HTTP)接続を許可するルール番号2を削除することを決定した場合、次のようにUFW削除コマンドで指定できます:

  1. sudo ufw delete 2
Output
Deleting: allow 80 Proceed with operation (y|n)? y Rule deleted

これにより、確認が求められ、HTTP接続を許可するルール2が削除されます。 IPv6が有効になっている場合は、対応するIPv6ルールも削除する必要があることに注意してください。

名前でUFWルールを削除する

ルール番号を使用する代わりに、ルールを人間が読み取れる名称で参照することもできます。これは、ルールのタイプ(通常は allow または deny )と、このルールの対象となるサービス名またはポート番号、または使用されたアプリケーションプロファイル名に基づきます。たとえば、以前に有効になっていた Apache Full というアプリケーションプロファイルの allow ルールを削除したい場合は、次のようにします:

  1. sudo ufw delete allow "Apache Full"
Output
Rule deleted Rule deleted (v6)

deleteコマンドは、サービスを名前やポートで参照して作成されたルールに対して同じように機能します。例えば、以前にsudo ufw allow httpでHTTP接続を許可するルールを設定した場合、次のようにしてそのルールを削除できます:

  1. sudo ufw delete allow http
Output
Rule deleted Rule deleted (v6)

サービス名はルールを指定する際にポート番号と交換可能なため、同じルールをallow 80ではなくallow httpとしても参照できます:

  1. sudo ufw delete allow 80
Output
Rule deleted Rule deleted (v6)

名前でUFWルールを削除する際には、IPv4およびIPv6の両方のルールが存在する場合に削除されます。

ステップ8 — UFWのステータスとルールの確認

いつでも、次のコマンドでUFWのステータスを確認できます:

  1. sudo ufw status verbose

デフォルトでは無効になっている場合、UFWが無効になっていることが表示されます:

Output
Status: inactive

UFWがアクティブである場合、ステップ3に従った場合は、アクティブであり、設定されているルールが表示されます。例えば、ファイアウォールがどこからでもSSH(ポート22)接続を許可するように設定されている場合、出力は次のようになります:

Output
Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), disabled (routed) New profiles: skip To Action From -- ------ ---- 22/tcp ALLOW IN Anywhere

ファイアウォールの構成を確認したい場合はstatusコマンドを使用してください。

ステップ9 — ファイアウォールの無効化またはリセット

UFWファイアウォールを使用したくない場合は、次のコマンドで無効にできます:

  1. sudo ufw disable
Output
Firewall stopped and disabled on system startup

UFWで作成したルールは無効になります。後で必要に応じてsudo ufw enableを実行して有効にすることができます。

すでにUFWルールが構成されているが、最初からやり直したい場合は、リセットコマンドを使用できます:

  1. sudo ufw reset
Output
Resetting all rules to installed defaults. This may disrupt existing ssh connections. Proceed with operation (y|n)? y Backing up 'user.rules' to '/etc/ufw/user.rules.20210729_170353' Backing up 'before.rules' to '/etc/ufw/before.rules.20210729_170353' Backing up 'after.rules' to '/etc/ufw/after.rules.20210729_170353' Backing up 'user6.rules' to '/etc/ufw/user6.rules.20210729_170353' Backing up 'before6.rules' to '/etc/ufw/before6.rules.20210729_170353' Backing up 'after6.rules' to '/etc/ufw/after6.rules.20210729_170353'

これにより、UFWが無効になり、以前に定義されたルールが削除されます。これにより、UFWで新しいスタートができます。ただし、デフォルトのポリシーは、いつでも変更されず、元の設定に戻りません。いつか修正した場合は注意してください。

DigitalOcean App Platformを使用してGitHubからフロントエンドアプリケーションを展開します。DigitalOceanにアプリのスケーリングを任せましょう。

結論

ファイアウォールは、少なくともSSH接続を許可するように構成されました。サーバーが機能し、セキュリティが確保されるよう、サーバーが必要とする他のすべての着信接続を許可し、不必要な接続を制限してください。

UFWの設定についてもっと学ぶには、UFW Essentials: 一般的なファイアウォールのルールとコマンド チュートリアルをチェックしてください。

Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-22-04