UbuntuおよびDebianクラウドサーバーでUFWを使用してファイアウォールを設定する方法
序章
機能するファイアウォールを設定することは、クラウドサーバーを保護するために重要です。 以前は、ファイアウォールの設定は複雑または難解なユーティリティを介して行われました。 これらのユーティリティの多く(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
IPV6
がyes
に設定されていることを確認します。
/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 + X
、Y
、ENTER
の順に押します。
次に、最初にファイアウォールを無効にして、ファイアウォールを再起動します。
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のガイドをご覧ください。