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

導入

機能するファイアウォールの設定を行うことは、クラウドサーバーのセキュリティを確保する上で重要です。以前は、ファイアウォールの設定は複雑で難解なユーティリティを使用して行われていました。これらのユーティリティ(例:iptables)の多くには、多くの機能が組み込まれていますが、ユーザーがそれらを学習し理解するためには追加の努力が必要です。

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

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

前提条件

このチュートリアルに従うには、UbuntuまたはDebianが実行されているサーバーが必要です。サーバーには、sudo権限を持つ非rootユーザーがいる必要があります。これをUbuntuでセットアップするには、Ubuntu 20.04での初期サーバーセットアップガイドに従ってください。これをDebianでセットアップするには、Debian 11での初期サーバーセットアップガイドに従ってください。これらの初期サーバーセットアップガイドの両方が、マシンにUFWがインストールされており、ファイアウォールルールを作成するために使用できるセキュアな環境を確保します。

UFWを使用したIPv6

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

  1. 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 + XY、そして ENTER を押します。

次に、ファイアウォールを再起動します。まずは無効にします:

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

それから再度有効にします:

  1. sudo ufw enable
Output
Firewall is active and enabled on system startup

UFWファイアウォールがIPv4およびIPv6の両方に適切に設定されました。次に、ファイアウォールへの接続のデフォルトルールを調整します。

UFWデフォルトの設定

接続を許可または拒否するためのデフォルトルールを定義することで、ファイアウォールの効率を向上させることができます。UFWのデフォルトは、すべての着信接続を拒否し、すべての送信接続を許可することです。これは、サーバーにアクセスしようとする誰もが接続できない一方で、サーバー内のアプリケーションは外部に接続できることを意味します。UFWによって設定されたデフォルトルールを更新するには、まず着信接続のルールを検討してください:

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

次に、送信接続のルールを検討してください:

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

注意: より制限的にする場合、すべての送信リクエストを拒否することができます。このオプションは個人の好みに基づいています。たとえば、公開されたクラウドサーバーを持っている場合、リモートシェル接続の種類を防ぐのに役立つかもしれません。ただし、すべての送信接続に対するルールを設定する必要があるため、ファイアウォールの管理がより煩雑になります。次のように、これをデフォルトに設定できます:

  1. sudo ufw default deny outgoing

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

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

  1. sudo ufw allow ssh

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

Output
Rule added Rule added (v6)

UFWには、前述の例で使用されたsshコマンドなど、いくつかのデフォルトが付属しています。代替として、同じことを達成するために22/tcpポートへの着信接続を許可することができます:Transmission Control Protocol (TCP)

  1. sudo ufw allow 22/tcp

ただし、すでにallow sshを実行した後にこれを試した場合は、ルールが既に存在するため、次のメッセージが表示されます:

Output
Skipping adding existing rule Skipping adding existing rule (v6)

SSHサーバーがポート2222で実行されている場合、同じ構文を使用して接続を許可できますが、ポート2222に置き換えます。ポート番号だけを使用すると、tcpudpにも影響しますので、ご注意ください:

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

Webサーバーのセキュリティ

FTP(File Transfer Protocol)アクセスでWebサーバーをセキュアにするには、ポート80/tcpへの接続を許可する必要があります。

ポート80への接続を許可することは、ApacheやNginxなどのHTTP接続要求を受け付けるWebサーバーにとって役立ちます。これを行うには、ポート80/tcpへの接続を許可します:

  1. sudo ufw allow 80/tcp

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

  1. sudo ufw allow www

FTP接続を許可するためにftpまたはポート21を使用することもできます:

  1. sudo ufw allow ftp
  1. sudo ufw allow 21/tcp

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

  1. sudo ufw allow 20/tcp

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

ポート範囲の指定

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

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

  1. sudo ufw allow 1000:2000/tcp

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

  1. sudo ufw deny 1234:4321/udp

IPアドレスの指定

次のように、特定のIPアドレスからの接続を許可することができます。IPアドレスは自分の情報で置き換えてください:

  1. sudo ufw allow from your_server_ip

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

接続の拒否

サーバーのすべてのポートを開放したい場合、お勧めしませんが、すべての接続を許可してからアクセスを許可したくないポートを拒否することができます。次の例は、ポート80へのアクセスを拒否する方法です:

  1. sudo ufw deny 80/tcp

ルールの削除

適用したルールの一部を削除したい場合は、deleteを使用して削除するルールを指定します:

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

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

  1. sudo ufw status numbered

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

  1. sudo ufw delete number
Output
Status: 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で「いいえ」を選択できます:

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

UFWの有効化

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

  1. sudo ufw enable
Output
Firewall is active and enabled on system startup

変更が反映されたかを確認するには、ルールのリストを確認するためにステータスをチェックしてください。

  1. sudo ufw status
Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 22/tcp ALLOW Anywhere 2222/tcp ALLOW Anywhere 20/tcp ALLOW Anywhere 80/tcp DENY Anywhere …

また、より包括的な出力にするにはverboseを使用できます。

  1. sudo ufw status verbose

UFWを無効にするには、次のコマンドを実行してください。

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

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

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

  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.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エッセンシャル:共通のファイアウォールルールとコマンドガイドをチェックしてください。

Source:
https://www.digitalocean.com/community/tutorials/how-to-setup-a-firewall-with-ufw-on-an-ubuntu-and-debian-cloud-server