UbuntuおよびDebianクラウドサーバーでUFWを使用してファイアウォールを設定する方法

提供:Dev Guides
移動先:案内検索

序章

機能するファイアウォールを設定することは、クラウドサーバーを保護するために重要です。 以前は、ファイアウォールの設定は複雑または難解なユーティリティを介して行われました。 これらのユーティリティの多く(iptablesなど)には多くの機能が組み込まれていますが、ユーザーがそれらを学習して理解するには、余分な労力が必要です。

もう1つのオプションは、UFWまたはUncomplicatedFirewallです。 UFWはiptablesのフロントエンドであり、他のファイアウォール管理ユーティリティよりもユーザーフレンドリーなインターフェースを提供することを目的としています。 UFWはLinuxコミュニティで十分にサポートされており、通常、多くのディストリビューションにデフォルトでインストールされています。

このチュートリアルでは、UFWを使用してファイアウォールを設定し、UbuntuまたはDebianクラウドサーバーを保護します。 また、ポートとIPアドレスの接続を許可または拒否するUFWデフォルトルールを設定する方法、作成したルールを削除する方法、UFWを無効または有効にする方法、必要に応じてすべてをデフォルト設定にリセットする方法についても学習します。

前提条件

このチュートリアルに従うには、UbuntuまたはDebianのいずれかを実行しているサーバーが必要です。 サーバーには、sudo権限を持つroot以外のユーザーが必要です。 これをUbuntuに設定するには、 Ubuntu20.04を使用したサーバーの初期設定に関するガイドに従ってください。 これをDebian用に設定するには、 Debian11を使用した初期サーバー設定に関するガイドに従ってください。 これらの初期サーバーセットアップガイドはどちらも、マシンにUFWがインストールされていることと、ファイアウォールルールの作成を練習するために使用できる安全な環境があることを確認します。

UFWでのIPv6の使用

仮想プライベートサーバー(VPS)がIPv6用に構成されている場合は、IPv4とIPv6の両方のファイアウォールルールを構成するように、UFWがIPv6をサポートするように構成されていることを確認してください。 これを行うには、好みのテキストエディタでUFW構成ファイルを開きます。 ここではnanoを使用します。

sudo nano /etc/default/ufw

IPV6yesに設定されていることを確認します。

/etc/default/ufw# /etc/default/ufw
#

# Set to yes to apply rules to support IPv6 (no means only IPv6 on loopback
# accepted). You will need to 'disable' and then 'enable' the firewall for
# the changes to take affect.
IPV6=yes
…

変更を加えたら、ファイルを保存して終了します。 nanoを使用している場合は、CTRL + XYENTERの順に押します。

次に、最初にファイアウォールを無効にして、ファイアウォールを再起動します。

sudo ufw disable
OutputFirewall stopped and disabled on system startup

次に、もう一度有効にします。

sudo ufw enable
OutputFirewall is active and enabled on system startup

これで、UFWファイアウォールが、必要に応じてIPv4とIPv6の両方のファイアウォールを構成するように設定されました。 次に、ファイアウォールへの接続のデフォルトルールを調整します。

UFWデフォルトの設定

接続を許可および拒否するためのデフォルトのルールを定義することにより、ファイアウォールの効率を向上させることができます。 UFWのデフォルトでは、すべての着信接続を拒否し、すべての発信接続を許可します。 つまり、サーバーにアクセスしようとするユーザーは接続できませんが、サーバー内のアプリケーションは外部に接続できます。 UFWによって設定されたデフォルトのルールを更新するには、最初に着信接続ルールに対処します。

sudo ufw default deny incoming
OutputDefault incoming policy changed to 'deny'
(be sure to update your rules accordingly)

次に、発信接続ルールに対処します。

sudo ufw default allow outgoing
OutputDefault outgoing policy changed to 'allow'
(be sure to update your rules accordingly)

注:より制限を厳しくしたい場合は、すべての送信要求を拒否できます。 このオプションは、個人の好みに基づいています。 たとえば、公開されているクラウドサーバーがある場合は、あらゆる種類のリモートシェル接続を防ぐのに役立ちます。 ただし、すべての発信接続にもルールを設定する必要があるため、ファイアウォールの管理がより面倒になります。 次の方法で、これをデフォルトとして設定できます。

sudo ufw default deny outgoing

ファイアウォールへの接続を許可する

接続を許可するには、ファイアウォールルールを変更する必要があります。これは、ターミナルでコマンドを発行することで実行できます。 たとえば、今ファイアウォールをオンにすると、すべての着信接続が拒否されます。 SSH経由でサーバーに接続している場合は、サーバーからロックアウトされるため、これは問題になります。 サーバーへのSSH接続を有効にして、これが発生しないようにします。

sudo ufw allow ssh

変更が成功した場合は、次の出力が表示されます。

OutputRule added
Rule added (v6)

UFWには、前の例で使用したsshコマンドなどのデフォルトがいくつかあります。 または、ポート22/tcpへの着信接続を許可することもできます。この場合、伝送制御プロトコル(TCP)を使用して同じことを実行します。

 sudo ufw allow 22/tcp

ただし、allow sshを実行した後でこれを試してみると、ルールがすでに存在するため、次のメッセージが表示されます。

OutputSkipping adding existing rule
Skipping adding existing rule (v6)

SSHサーバーがポート2222で実行されている場合は、同じ構文で接続を許可できますが、ポート2222に置き換えてください。 ポート番号を単独で使用する場合は、tcpおよびudpにも影響することに注意してください。

sudo ufw allow 2222/tcp
OutputRule added
Rule added (v6)

Webサーバーの保護

ファイル転送プロトコル(FTP)アクセスでWebサーバーを保護するには、ポート80/tcpの接続を許可する必要があります。

ポート80の接続を許可すると、HTTP接続要求をリッスンするApacheやNginxなどのWebサーバーで役立ちます。 これを行うには、ポート80/tcpへの接続を許可します。

sudo ufw allow 80/tcp

UFWは通常、Webサーバーが機能するために必要なルールをプロファイルに提供します。 そうでない場合は、次の例のように、Webサーバープロファイルを「WWW」として保存し、ftpまたはtcpとして開くことができます。

sudo ufw allow www

ftpまたはポート21を使用して、FTP接続を許可することもできます。

sudo ufw allow ftp
sudo ufw allow 21/tcp

FTP接続の場合、ポート20の接続も許可する必要があります。

sudo ufw allow 20/tcp

調整は、開く必要のあるポートとサービスによって異なり、テストが必要になる場合があります。 SSH接続も許可したままにしておくことを忘れないでください。

ポート範囲の指定

UFWで許可または拒否するポートの範囲を指定することもできます。 これを行うには、最初に範囲の下限でポートを指定し、その後にコロン(:)を付けてから、範囲の上限でポートを指定する必要があります。 最後に、ルールを適用するプロトコル(tcpまたはudpのいずれか)を指定する必要があります。

たとえば、次のコマンドは、1000から2000までのすべてのポートへのTCPアクセスを許可します。

sudo ufw allow 1000:2000/tcp

同様に、次のコマンドは、1234から4321までのすべてのポートへのUDP接続を拒否します。

 sudo ufw deny 1234:4321/udp

IPアドレスの指定

次のような特定のIPアドレスからの接続を許可できます。 必ずIPアドレスを自分の情報に置き換えてください。

sudo ufw allow from your_server_ip

これらの例が示すように、特定のポートとIPアドレス接続を選択的に許可することにより、ファイアウォールルールを調整する際に多くの柔軟性があります。 固有のIPアドレスまたはサブネットからの着信接続を許可する方法の詳細については、ガイドをご覧ください。

接続を拒否する

サーバーのすべてのポート(は推奨されません)を開きたい場合は、すべての接続を許可してから、アクセスを許可しないポートを拒否することができます。 次の例は、ポート80へのアクセスを拒否する方法です。

sudo ufw deny 80/tcp

ルールの削除

管理したルールの一部を削除する場合は、deleteを使用して、削除するルールを指定します。

sudo ufw delete allow 80/tcp
OutputRule deleted
Rule deleted (v6)

ルールが長く複雑な場合は、別の2段階のアプローチがあります。 まず、現在のルールの番号付きリストを生成します。

sudo ufw status numbered

次に、この番号付きリストを使用して、現在許可されているルールを確認し、その番号を参照してルールを削除します。

sudo ufw delete number
OutputStatus: active

     To                         Action      From
     --                         ------      ----
[ 1] OpenSSH                    ALLOW IN    Anywhere
[ 2] 22/tcp                     ALLOW IN    Anywhere
[ 3] 2222/tcp                   ALLOW IN    Anywhere
[ 4] 80                         ALLOW IN    Anywhere
[ 5] 20/tcp                     ALLOW IN    Anywhere
…

たとえば、ポート80がリストの4番目の場合、次の構文を使用します。 操作を続行する場合は、質問が表示されることもあります。 はいyまたはいいえnを決定できます。

sudo ufw delete 4
OutputDeleting:
 allow 80
Proceed with operation (y|n)? y
Rule deleted (v6)

UFWの有効化

ファイアウォールに適用するすべてのルールを定義したら、UFWを有効にして、それらのルールの適用を開始できます。 SSH経由で接続している場合は、SSHポート(通常はポート22)を設定して、接続を受信できるようにしてください。 そうしないと、サーバーから自分をロックアウトする可能性があります。

sudo ufw enable
OutputFirewall is active and enabled on system startup

変更が完了したことを確認するには、ステータスを確認してルールのリストを確認します。

sudo ufw status
OutputStatus: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
22/tcp                     ALLOW       Anywhere
2222/tcp                   ALLOW       Anywhere
20/tcp                     ALLOW       Anywhere
80/tcp                     DENY        Anywhere
…

verboseを使用して、より包括的な出力を行うこともできます。

sudo ufw status verbose

UFWを無効にするには、次のコマンドを実行します。

sudo ufw disable
OutputFirewall stopped and disabled on system startup

デフォルト設定のリセット

何らかの理由でクラウドサーバーのルールをデフォルト設定にリセットする必要がある場合は、ufw resetコマンドを使用してリセットできます。 すべてをリセットする前に、yまたはnと入力するよう求めるプロンプトが表示されることに注意してください。リセットすると、既存のSSH接続が中断される可能性があります。

sudo ufw reset
OutputResetting 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.20220217_190530'
Backing up 'before.rules' to '/etc/ufw/before.rules.20220217_190530'
Backing up 'after.rules' to '/etc/ufw/after.rules.20220217_190530'
Backing up 'user6.rules' to '/etc/ufw/user6.rules.20220217_190530'
Backing up 'before6.rules' to '/etc/ufw/before6.rules.20220217_190530'
Backing up 'after6.rules' to '/etc/ufw/after6.rules.20220217_190530'

デフォルト設定にリセットすると、UFWが無効になり、以前に定義したルールがすべて削除されます。 ただし、デフォルト設定を変更しても、デフォルト設定は元の設定に変更されません。 これで、UFWを使い始めて、ルールと接続を好みに合わせてカスタマイズできます。

結論

このチュートリアルでは、ポートまたはIPアドレスのサブセットへのアクセスを許可または制限するようにクラウドサーバーをセットアップおよび構成する方法を学習しました。 さらに、不要になったルールを削除し、UFWファイアウォールを無効にしてから有効にすることで、それらの変更が考慮されていることを確認する練習をしました。 最後に、UFWファイアウォールをデフォルト設定にリセットする方法を学びました。 UFWで可能なことの詳細については、 UFW Essentials:Common Firewall Rules andCommandsのガイドをご覧ください。