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

紹介

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

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

前提条件

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

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

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

  1. sudo apt install ufw

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

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

このチュートリアルはIPv4を前提としていますが、IPv6にも適用されます。DebianサーバーがIPv6を有効にしている場合、UFWがIPv6をサポートするように設定する必要があります。これにより、UFWがIPv4に加えてIPv6のファイアウォールルールを管理するようになります。これを設定するには、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接続を許可する

あなたのUFWファイアウォールを有効にすることはまだできません。なぜなら、それはあなたのサーバーへのアクセスを含むすべての受信接続を拒否するからです。したがって、あなたのサーバーがそのようなリクエストに応答するためには、SSHやHTTP接続などの正当な受信接続を明示的に許可するルールを作成する必要があります。クラウドサーバーを使用している場合、サーバーに接続して管理するために受信SSH接続を許可したいと思うでしょう。

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

  1. sudo ufw allow ssh

これにより、デフォルトでSSHデーモンがリッスンするポート22のすべての接続を許可するファイアウォールルールが作成されます。UFWは、/etc/servicesファイルにリストされているサービスとして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の場合と同様に、サービス名またはポートに基づいて接続を許可するルールを記述する方法を既に知っています。

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

  1. sudo ufw allow http

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

  1. sudo ufw allow https

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

  1. sudo ufw allow 80

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

特定のポート範囲

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

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接続を許可するルール 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

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

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のルールが構成されている場合、最初からやり直したい場合は、resetコマンドを使用できます:

  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-11-243261243130246d443771547031794d72784e6b36656d4a326e49732e