Debian 11でUFWを使用したファイアウォールのセットアップ方法

はじめに

UFW、またはUncomplicated Firewallは、iptablesnftablesなどの下位レベルのパケットフィルタリング技術の複雑さを隠す、簡略化されたファイアウォール管理インターフェースです。ネットワークをセキュリティで保護し始めたいが、どのツールを使用すべきかわからない場合、UFWが適切な選択肢になるかもしれません。

このチュートリアルでは、Debian 11でUFWを使用したファイアウォールの設定方法を示します。

前提条件

このチュートリアルに従うには、sudo権限を持つ非rootユーザーを1つ備えたDebian 11サーバーが必要です。これは、Debian 11の初期サーバーセットアップチュートリアルステップ1から3に従って設定できます。

ステップ1 – UFWのインストール

デビアンはデフォルトでUFWをインストールしません。 Initial Server Setup tutorial を完全に実行した場合、UFWがインストールおよび有効化されています。そうでない場合は、apt を使用して今すぐインストールしてください:

  1. sudo apt install ufw

以下の手順でUFWを設定し、有効にします。

ステップ 2 — IPv6をUFWと使用する(オプション)

このチュートリアルはIPv4を対象としていますが、IPv6でも動作します。デビアンサーバーがIPv6を有効にしている場合は、UFWがIPv6をサポートするように設定する必要があります。これにより、UFWがIPv4に加えてIPv6のファイアウォールルールを管理するようになります。これを設定するには、お気に入りのエディターである nano を使用して UFW 設定ファイル /etc/default/ufw を開きます:

  1. sudo nano /etc/default/ufw

ファイル内で IPV6 を見つけ、その値が yes になっていることを確認してください:

/etc/default/ufw excerpt
IPV6=yes

ファイルを保存して閉じます。 nano を使用している場合は、CTRL+XYENTER を押してファイルを保存して終了します。

これで、UFWが有効になると、IPv4およびIPv6のファイアウォールルールの書き込みが設定されます。ただし、UFWを有効にする前に、SSH経由で接続できるようにファイアウォールが構成されていることを確認する必要があります。デフォルトのポリシーの設定から始めます。

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

ファイアウォールを始めるばかりの場合、最初に定義するルールはデフォルトポリシーです。これらのルールは、明示的に他のルールと一致しないトラフィックを処理します。デフォルトでは、UFW はすべての受信接続を拒否し、すべての送信接続を許可するように設定されています。つまり、サーバーに到達しようとする人は接続できない一方、サーバー内のアプリケーションは外部の世界に到達できます。

このチュートリアルに従って進めることができるように、UFW のルールをデフォルトに戻します。UFW で使用されるデフォルトを設定するには、次のコマンドを使用します。

  1. sudo ufw default deny incoming
  2. sudo ufw default allow outgoing

次のような出力が表示されます。

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

これらのコマンドは、受信を拒否し、送信を許可するようにデフォルトを設定します。これらのファイアウォールのデフォルトだけで個人用コンピューターには十分かもしれませんが、サーバーは通常、外部ユーザーからの受信要求に応答する必要があります。次のステップでこのプロセスを開始します。

ステップ4 — SSH 接続を許可する

あなたのサーバーには、正当な入力接続(例えば、SSHまたはHTTP接続など)を明示的に許可するルールを作成する必要があるため、まだUFWファイアウォールを有効にすることはできません。クラウドサーバーを使用している場合は、サーバーに接続して管理するためにSSH接続を受け入れることができるようにしたいと思うでしょう。

サーバーを受信するSSH接続を許可するように構成するには、このコマンドを使用します:

  1. sudo ufw allow ssh

これにより、デフォルトでSSHデーモンがリッスンするポートであるポート22上のすべての接続を許可するファイアウォールルールが作成されます。UFWは、/etc/servicesファイルでサービスとしてリストされているポートがallow sshに紐づいていることを知っています。

ただし、サービス名の代わりにポートを指定して同等のルールを実際に書くことができます。たとえば、次のコマンドは上記のものと同じ結果を生み出します:

  1. sudo ufw allow 22

SSHデーモンを異なるポートに設定した場合は、適切なポートを指定する必要があります。たとえば、SSHサーバーがポート2222でリッスンしている場合、同じコマンドを使用して222222に置き換えることができます。

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

ステップ5 — UFWの有効化

UFWを有効にするには、このコマンドを使用します:

  1. sudo ufw enable

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

ファイアウォールがアクティブになりました。設定したルールを確認するには、このコマンドを実行してください:

  1. sudo ufw status verbose

このチュートリアルの残りの部分では、UFWの詳細な使用方法について説明します。これには、さまざまな種類の接続を許可または拒否する方法が含まれます。

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

この段階では、サーバーが正常に機能するために必要な他のすべての接続を許可する必要があります。許可する接続は、特定のニーズに応じて異なります。すでにサービス名やポートに基づいて接続を許可するルールを書く方法を知っています。これはSSHのポート22に対して行いました。

これはHTTPのポート80に対して行うこともできます。これは、非暗号化のウェブサーバーで使用されます。このタイプのトラフィックを許可するには、次のように入力します:

  1. sudo ufw allow http

これはHTTPSのポート443に対しても行うことができます。これは、暗号化されたウェブサーバーで使用されます。このタイプのトラフィックを許可するには、次のように入力します:

  1. sudo ufw allow https

両方のシナリオで、ポートを指定することもでき、HTTPは80であり、HTTPSは443です。例:

  1. sudo ufw allow 80

ただし、ポートまたは既知のサービスを指定する以外にも、接続を許可する方法があります。これについては、次に説明します。

特定のポート範囲

UFWではポート範囲を指定することができます。たとえば、いくつかのアプリケーションは単一のポートではなく複数のポートを使用します。

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

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

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

特定のIPアドレス

UFWを使用する際に、IPアドレスを指定することもできます。たとえば、特定のIPアドレス(例:203.0.113.4の職場や自宅のIPアドレス)からの接続を許可したい場合は、fromとその後にIPアドレスを指定する必要があります:

  1. sudo ufw allow from 203.0.113.4

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

  1. sudo ufw allow from 203.0.113.4 to any port 22

サブネット

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

  1. sudo ufw allow from 203.0.113.0/24

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

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

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

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

続行する前に、ネットワークインターフェースを調べると役立ちます。次のコマンドを使用してください:

  1. ip addr
Output
. . . 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トラフィックを許可できます:

  1. sudo ufw allow in on eth0 to any port 80

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

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

  1. sudo ufw allow in on eth1 to any port 3306

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

ステップ7 — 接続の拒否

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

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

denyルールを記述するには、上記のコマンドを使用し、allowdenyに置き換えます。

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

  1. sudo ufw deny http

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

  1. sudo ufw deny from 203.0.113.4

これで、削除ルールの実装方法を学ぶことができます。

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

ファイアウォールルールを削除する方法を知っていることは、それを作成する方法と同じくらい重要です。削除するルールを指定する方法は2つあります: ルール番号またはルール自体によって。これは、ルールが作成されたときに指定された方法と似ています。

ルール番号による

ファイアウォールルールを削除するためにルール番号を使用している場合、まず最初にファイアウォールルールのリストを取得する必要があります。UFWのstatusコマンドにはnumberedオプションがあり、各ルールの隣に番号が表示されます:

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

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

  1. sudo ufw delete 2

これには確認プロンプトが表示され、y/nで回答できます。 yを入力すると、ルール2が削除されます。 IPv6が有効になっている場合は、対応するIPv6ルールも削除する必要があります。

実際のルールによる

代替としての規則番号は、削除する実際の規則を指定することです。たとえば、allow http ルールを削除したい場合は、次のように書くことができます:

  1. sudo ufw delete allow http

また、サービス名の代わりに allow 80 を使用してルールを指定することもできます:

  1. sudo ufw delete allow 80

この方法では、IPv4 および IPv6 の両方のルールが存在する場合に削除されます。

ステップ 9 — UFW のステータスとルールを確認する

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

  1. sudo ufw status verbose

UFW が無効になっている場合(これがデフォルトです)、出力は次のようになります:

Output
Status: inactive

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

Output
Status: active To Action From -- ------ ---- 22/tcp ALLOW IN Anywhere

ファイアウォールの設定を確認する場合は、status コマンドを使用してください。

ステップ 10 — UFW の無効化またはリセット(オプション)

UFW を使用しないことを決定した場合は、次のコマンドで無効にできます:

  1. sudo ufw disable

UFWで作成したルールはもはや有効ではありません。後で有効にする必要がある場合は、常にsudo ufw enableを実行できます。

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

  1. sudo ufw reset

これにより、UFWが無効になり、以前に定義したルールが削除されます。ただし、デフォルトのポリシーは、いつでも元の設定に変更されないことに注意してください。これにより、UFWをリフレッシュした状態で開始できます。

結論

ファイアウォールは今や(少なくとも)SSH接続を許可するように構成されています。サーバーが必要とする他の受信接続を許可し、不必要な接続を制限するようにしてください。これにより、サーバーが機能し、安全であることが保証されます。

より一般的なUFW構成について学ぶには、UFW Essentials: Common Firewall Rules and Commandsのチュートリアルを参照してください。

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