導入
機能するファイアウォールの設定を行うことは、クラウドサーバーのセキュリティを確保する上で重要です。以前は、ファイアウォールの設定は複雑で難解なユーティリティを使用して行われていました。これらのユーティリティ(例: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
を使用します:
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
を押します。
次に、ファイアウォールを再起動します。まずは無効にします:
OutputFirewall stopped and disabled on system startup
それから再度有効にします:
OutputFirewall is active and enabled on system startup
UFWファイアウォールがIPv4およびIPv6の両方に適切に設定されました。次に、ファイアウォールへの接続のデフォルトルールを調整します。
UFWデフォルトの設定
接続を許可または拒否するためのデフォルトルールを定義することで、ファイアウォールの効率を向上させることができます。UFWのデフォルトは、すべての着信接続を拒否し、すべての送信接続を許可することです。これは、サーバーにアクセスしようとする誰もが接続できない一方で、サーバー内のアプリケーションは外部に接続できることを意味します。UFWによって設定されたデフォルトルールを更新するには、まず着信接続のルールを検討してください:
OutputDefault incoming policy changed to 'deny'
(be sure to update your rules accordingly)
次に、送信接続のルールを検討してください:
OutputDefault outgoing policy changed to 'allow'
(be sure to update your rules accordingly)
注意: より制限的にする場合、すべての送信リクエストを拒否することができます。このオプションは個人の好みに基づいています。たとえば、公開されたクラウドサーバーを持っている場合、リモートシェル接続の種類を防ぐのに役立つかもしれません。ただし、すべての送信接続に対するルールを設定する必要があるため、ファイアウォールの管理がより煩雑になります。次のように、これをデフォルトに設定できます:
ファイアウォールへの接続を許可する
接続を許可するには、ターミナルでコマンドを発行してファイアウォールのルールを変更する必要があります。たとえば、ファイアウォールを今すぐにオンにした場合、すべての着信接続を拒否します。サーバーにSSHで接続している場合、これは問題になります。なぜなら、サーバーからロックアウトされるからです。これを防ぐために、サーバーへのSSH接続を有効にします:
変更が成功した場合、次の出力が表示されます:
OutputRule added
Rule added (v6)
UFWには、前述の例で使用されたssh
コマンドなど、いくつかのデフォルトが付属しています。代替として、同じことを達成するために22/tcp
ポートへの着信接続を許可することができます:Transmission Control Protocol (TCP)
ただし、すでにallow ssh
を実行した後にこれを試した場合は、ルールが既に存在するため、次のメッセージが表示されます:
OutputSkipping adding existing rule
Skipping adding existing rule (v6)
SSHサーバーがポート2222
で実行されている場合、同じ構文を使用して接続を許可できますが、ポート2222
に置き換えます。ポート番号だけを使用すると、tcp
とudp
にも影響しますので、ご注意ください:
OutputRule added
Rule added (v6)
Webサーバーのセキュリティ
FTP(File Transfer Protocol)アクセスでWebサーバーをセキュアにするには、ポート80/tcp
への接続を許可する必要があります。
ポート80
への接続を許可することは、ApacheやNginxなどのHTTP接続要求を受け付けるWebサーバーにとって役立ちます。これを行うには、ポート80/tcp
への接続を許可します:
通常、UFWはWebサーバーが機能するために必要なルールを備えたプロファイルを提供します。そうでない場合、Webサーバープロファイルは次の例のように「WWW」として保存され、ftp
またはtcp
としてオープンされます:
FTP接続を許可するためにftp
またはポート21
を使用することもできます:
FTP接続の場合、ポート20
への接続も許可する必要があります:
あなたの調整は、開く必要のあるポートとサービスに応じて異なり、テストが必要な場合があります。SSH接続も許可されていることを忘れないでください。
ポート範囲の指定
UFWでは、ポートの範囲を指定して許可または拒否することもできます。これを行うには、まず範囲の下限のポートを指定し、次にコロン(:
)を続け、最後に適用するプロトコル(tcp
またはudp
)を指定する必要があります。
たとえば、次のコマンドは、1000
から2000
までのすべてのポートへのTCPアクセスを許可します:
同様に、次のコマンドは、1234
から4321
までのすべてのポートへのUDP接続を拒否します:
IPアドレスの指定
次のように、特定のIPアドレスからの接続を許可することができます。IPアドレスは自分の情報で置き換えてください:
これらの例が示すように、ファイアウォールルールを調整する際には、特定のポートやIPアドレス接続を選択的に許可するための多くの柔軟性があります。特定のIPアドレスやサブネットからの着信接続を許可する方法については、当社のガイドをご覧ください。
接続の拒否
サーバーのすべてのポートを開放したい場合、お勧めしませんが、すべての接続を許可してからアクセスを許可したくないポートを拒否することができます。次の例は、ポート80
へのアクセスを拒否する方法です:
ルールの削除
適用したルールの一部を削除したい場合は、delete
を使用して削除するルールを指定します:
OutputRule deleted
Rule deleted (v6)
ルールが長くて複雑な場合、代替手段として2段階のアプローチがあります。まず、現在のルールの番号付きリストを生成します:
次に、この番号付きリストで現在許可されているルールを確認し、その番号を参照してルールを削除します:
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
で「いいえ」を選択できます:
OutputDeleting:
allow 80
Proceed with operation (y|n)? y
Rule deleted (v6)
UFWの有効化
ファイアウォールに適用するすべてのルールを定義したら、それらを強制するためにUFWを有効にできます。SSH経由で接続している場合は、SSHポート(一般的にポート22
)を設定して、接続を受信できるようにします。そうしないと、サーバーからロックアウトされる可能性があります:
OutputFirewall is active and enabled on system startup
変更が反映されたかを確認するには、ルールのリストを確認するためにステータスをチェックしてください。
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
を使用できます。
UFWを無効にするには、次のコマンドを実行してください。
OutputFirewall stopped and disabled on system startup
デフォルト設定へのリセット
何らかの理由で、クラウドサーバーのルールをデフォルト設定にリセットする必要がある場合は、ufw reset
コマンドを使用して行うことができます。ただし、すべてをリセットすると既存のSSH接続が妨げられる可能性があるため、リセットの前にy
またはn
を入力するプロンプトが表示されます。
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エッセンシャル:共通のファイアウォールルールとコマンドガイドをチェックしてください。