UFWエッセンシャル:一般的なファイアウォールのルールとコマンド

紹介

UFW(uncomplicated firewall)は、Ubuntuディストリビューションにデフォルトで含まれるiptablesの上で実行されるファイアウォール構成ツールです。コマンドラインを介して一般的なファイアウォールの使用ケースを設定するための簡略化されたインタフェースを提供します。

このチートシートスタイルのガイドでは、ポート、ネットワークインタフェース、およびソースIPアドレスによってサービスを許可またはブロックする方法の一般的なUFWの使用ケースとコマンドについてのクイックリファレンスを提供します。

このガイドの使用方法

  • このガイドは、自己完結型のコマンドラインスニペットを使用したチートシート形式です。
  • 完了しようとしているタスクに関連するセクションに移動してください。
  • このガイドのコマンドでハイライトされたテキストを見た場合は、このテキストが自分のネットワークのIPアドレスを指す必要があることを覚えておいてください。

現在のUFWルールセットをsudo ufw statusまたはsudo ufw status verboseで確認できることを覚えておいてください。

DigitalOcean App Platformを使用してGitHubからフロントエンドアプリケーションを展開します。DigitalOceanにアプリのスケーリングを任せましょう。

UFWステータスの確認

ufw が有効かどうかを確認するには、次のコマンドを実行します:

  1. sudo ufw status
Output
Status: inactive

出力には、ファイアウォールがアクティブかどうかが示されます。

UFW を有効にする

ufw status を実行した際に Status: inactive というメッセージが表示された場合、ファイアウォールはまだシステムで有効になっていないことを意味します。それを有効にするためのコマンドを実行する必要があります。

デフォルトでは、有効になると UFW はサーバー上のすべてのポートへの外部アクセスをブロックします。実際には、SSH 経由でサーバーに接続している場合、SSH ポートを介したアクセスを許可する前に ufw を有効にすると、切断されます。その場合は、ファイアウォールを有効にする前にこのガイドのSSH アクセスを許可する方法のセクションに従ってください。

システムで UFW を有効にするには、次のコマンドを実行します:

  1. sudo ufw enable

次のような出力が表示されます:

Output
Firewall is active and enabled on system startup

現在ブロックされているか許可されているかを確認するには、ufw status を実行する際に verbose パラメーターを使用します:

  1. sudo ufw status
Output
Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), deny (routed) New profiles: skip

UFW を無効にする

何らかの理由で UFW を無効にする必要がある場合は、次のコマンドを使用します:

  1. sudo ufw disable

このコマンドは、システム上のファイアウォールサービスを完全に無効にしますので、注意してください。

IPアドレスをブロックする

特定のIPアドレスから発信されるすべてのネットワーク接続をブロックするには、次のコマンドを実行して、ハイライトされたIPアドレスをブロックしたいIPアドレスに置き換えます:

  1. sudo ufw deny from 203.0.113.100
Output
Rule added

この例では、from 203.0.113.100は“203.0.113.100”のソースIPアドレスを指定しています。

今すぐsudo ufw statusを実行すると、指定したIPアドレスが拒否されたと表示されます:

Output
Status: active To Action From -- ------ ---- Anywhere DENY 203.0.113.100

指定したIPアドレスに対して、着信または送信のすべての接続がブロックされます。

サブネットをブロックする

完全なサブネットをブロックする必要がある場合は、サブネットアドレスをfromパラメーターとしてufw denyコマンドで使用できます。この例では、サブネット203.0.113.0/24のすべてのIPアドレスをブロックします:

  1. sudo ufw deny from 203.0.113.0/24
Output
Rule added

ネットワークインターフェースへの着信接続をブロックする

特定のIPアドレスから特定のネットワークインターフェースへの受信接続をブロックするには、次のコマンドを実行してください。ハイライトされたIPアドレスをブロックしたいIPアドレスに置き換えてください:

  1. sudo ufw deny in on eth0 from 203.0.113.100
Output
Rule added

in パラメーターは、ufw にルールを適用するよう指示し、on eth0 パラメーターは、ルールが eth0 インターフェースにのみ適用されることを指定します。これは、複数のネットワークインターフェース(仮想含む)を持つシステムがあり、これらのインターフェースの一部への外部アクセスをブロックする必要があるが、すべてをブロックするわけではない場合に役立ちます。

IPアドレスの許可

特定のIPアドレスからのすべてのネットワーク接続を許可するには、次のコマンドを実行してください。ハイライトされたIPアドレスを許可したいIPアドレスに置き換えます:

  1. sudo ufw allow from 203.0.113.101
Output
Rule added

これで sudo ufw status を実行すると、追加したIPアドレスの横に ALLOW という単語が表示される出力が表示されます。

Output
Status: active To Action From -- ------ ---- ... Anywhere ALLOW 203.0.113.101

ホストの場合に対応するサブネットマスクを提供することで、ネットワークのサブネットからの接続も許可できます。例:203.0.113.0/24

ネットワークインターフェースへの受信接続の許可

特定のIPアドレスから特定のネットワークインターフェイスへの受信接続を許可するには、次のコマンドを実行してください。ハイライトされたIPアドレスを許可したいIPアドレスで置き換えます:

  1. sudo ufw allow in on eth0 from 203.0.113.102
Output
Rule added

inパラメータは、ufw受信接続にのみルールを適用するよう指示し、on eth0パラメータはルールがeth0インターフェースにのみ適用されることを指定します。

sudo ufw statusを実行すると、次のような出力が表示されます:

Output
Status: active To Action From -- ------ ---- ... Anywhere on eth0 ALLOW 203.0.113.102

UFWルールの削除

UFWで以前に設定したルールを削除するには、ufw deleteに続けてルール(allowまたはdeny)とターゲットの指定を使用します。次の例は、以前にIPアドレス203.0.113.101からのすべての接続を許可するように設定されたルールを削除します:

  1. sudo ufw delete allow from 203.0.113.101
Output
Rule deleted

削除するルールを指定する別の方法は、ルールIDを提供することです。この情報は次のコマンドで取得できます:

  1. sudo ufw status numbered
Output
Status: active To Action From -- ------ ---- [ 1] Anywhere DENY IN 203.0.113.100 [ 2] Anywhere on eth0 ALLOW IN 203.0.113.102

出力から、2つのアクティブなルールがあることがわかります。最初のルールは、ハイライトされた値で、IPアドレス203.0.113.100からのすべての接続を拒否します。2番目のルールは、eth0インターフェースでの接続を許可し、IPアドレス203.0.113.102から受信します。

デフォルトでは、UFWは明示的に許可されていない限り、すべての外部アクセスをブロックしますので、最初のルールは冗長です。そのため、それを削除することができます。ルールIDによってルールを削除するには、次のコマンドを実行します:

  1. sudo ufw delete 1

操作を確認し、提供されたIDが削除したい正しいルールを指していることを確認するように促されます。

Output
Deleting: deny from 203.0.113.100 Proceed with operation (y|n)? y Rule deleted

sudo ufw statusを使用して再びルールをリストアップすると、ルールが削除されたことがわかります。

利用可能なアプリケーションプロファイルの一覧

インストール時に、ネットワーク通信に依存するアプリケーションは通常、UFWプロファイルを設定します。これは、外部アドレスからの接続を許可するために使用できます。これは通常、ufw allow fromを実行するのと同じですが、サービスが使用する特定のポート番号を抽象化し、参照されるサービスにユーザーフレンドリーな用語を提供する利点があります。

現在利用可能なプロファイルをリストアップするには、次のコマンドを実行します:

  1. sudo ufw app list

Webサーバーやその他のネットワーク依存ソフトウェアなどのサービスをインストールし、UFWでプロファイルが利用できなかった場合は、まずサービスが有効になっていることを確認してください。リモートサーバーの場合、通常はOpenSSHがすぐに利用できるでしょう:

Output
Available applications: OpenSSH

アプリケーションプロファイルを有効にする

UFWアプリケーションプロファイルを有効にするには、sudo ufw app listコマンドで取得できるアプリケーションプロファイルの名前に続けてufw allowを実行します。次の例では、デフォルトのSSHポートでのすべての着信SSH接続を許可するOpenSSHプロファイルを有効にしています。

  1. sudo ufw allow “OpenSSH”
Output
Rule added Rule added (v6)

複数の単語で構成されるプロファイル名(Nginx HTTPSなど)は引用符で囲むことを忘れないでください。

アプリケーションプロファイルを無効にする

以前にUFW内で設定したアプリケーションプロファイルを無効にするには、それに対応するルールを削除する必要があります。例えば、sudo ufw statusからの次の出力を考えてみてください:

  1. sudo ufw status
Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx Full (v6) ALLOW Anywhere (v6)

この出力は、現在Nginx Fullアプリケーションプロファイルが有効になっており、WebサーバーへのHTTPおよびHTTPS経由のすべての接続を許可していることを示しています。WebサーバーからのHTTPSリクエストのみを許可したい場合は、最初に最も制限の厳しいルールを有効にする必要があります。この場合、Nginx HTTPSを有効にし、現在アクティブなNginx Fullルールを無効にする必要があります。

  1. sudo ufw allow "Nginx HTTPS"
  2. sudo ufw delete allow "Nginx Full"

覚えておいてください。利用可能なアプリケーションプロファイルは、sudo ufw app listを使用して一覧表示できます。

SSHを許可する

リモートサーバーで作業する場合は、SSHポートが接続に開かれていることを確認して、リモートでサーバーにログインできるようにする必要があります。

次のコマンドを使用して、OpenSSH UFWアプリケーションプロファイルを有効にし、サーバーのデフォルトのSSHポートへのすべての接続を許可します。

  1. sudo ufw allow OpenSSH
Output
Rule added Rule added (v6)

よりユーザーフレンドリーではありませんが、別の構文として、通常はデフォルトで22に設定されているSSHサービスの正確なポート番号を指定することもできます。

  1. sudo ufw allow 22
Output
Rule added Rule added (v6)

特定のIPアドレスまたはサブネットからのSSH受信を許可する

特定のIPアドレスまたはサブネットからの受信接続を許可するには、fromディレクティブを含めて接続のソースを定義します。これにより、toパラメーターで宛先アドレスも指定する必要があります。このルールをSSHに制限するには、proto(プロトコル)をtcpに制限し、portパラメーターを使用してSSHのデフォルトポートである22に設定します。

次のコマンドは、IPアドレス203.0.113.103からのSSH接続のみを許可します:

  1. sudo ufw allow from 203.0.113.103 proto tcp to any port 22
Output
Rule added

また、fromパラメータとしてサブネットアドレスを使用して、整数ネットワークからの着信SSH接続を許可できます:

  1. sudo ufw allow from 203.0.113.0/24 proto tcp to any port 22
Output
Rule added

特定のIPアドレスまたはサブネットからの着信Rsyncを許可する

Rsyncプログラムは、ポート873で実行され、コンピュータ間でファイルを転送するために使用できます。

特定のIPアドレスまたはサブネットからの着信rsync接続を許可するには、fromパラメータを使用してソースIPアドレスを指定し、portパラメータを使用して宛先ポート873を設定します。
次のコマンドは、IPアドレス203.0.113.103からのRsync接続のみを許可します:

  1. sudo ufw allow from 203.0.113.103 to any port 873
Output
Rule added

サーバーにrsyncするために203.0.113.0/24サブネット全体を許可するには、次のコマンドを実行します:

  1. sudo ufw allow from 203.0.113.0/24 to any port 873
Output
Rule added

Nginx HTTP / HTTPSを許可する

インストール後、Nginxウェブサーバーはサーバー内にいくつかの異なるUFWプロファイルを設定します。Nginxをインストールしてサービスとして有効にした後、次のコマンドを実行して利用可能なプロファイルを特定します:

  1. sudo ufw app list | grep Nginx
Output
Nginx Full Nginx HTTP Nginx HTTPS

HTTPとHTTPSの両方のトラフィックを有効にするには、Nginx Fullを選択してください。それ以外の場合は、HTTPのみを許可する場合はNginx HTTP、HTTPSのみを許可する場合はNginx HTTPSを選択してください。

次のコマンドは、サーバー上でHTTPとHTTPSの両方のトラフィックを許可します(ポート80および443):

  1. sudo ufw allow "Nginx Full"
Output
Rule added Rule added (v6)

Apache HTTP/HTTPSを許可

インストール後、Apacheウェブサーバーはサーバー内にいくつかの異なるUFWプロファイルを設定します。Apacheをインストールしてサービスとして有効にした後、次のコマンドを実行して利用可能なプロファイルを特定します:

  1. sudo ufw app list | grep Apache
Output
Apache Apache Full Apache Secure

HTTPとHTTPSの両方のトラフィックを有効にするには、Apache Fullを選択してください。それ以外の場合は、HTTPのみを許可する場合はApache、HTTPSのみを許可する場合はApache Secureを選択してください。

次のコマンドは、サーバー上でHTTPとHTTPSの両方のトラフィックを許可します(ポート80および443):

  1. sudo ufw allow "Nginx Full"
Output
Rule added Rule added (v6)

すべての着信HTTPを許可(ポート80

ウェブサーバー(例えばApacheやNginx)は通常、ポート80でHTTPリクエストを待ち受けます。もし着信トラフィックのデフォルトポリシーがドロップまたは拒否に設定されている場合、ポート80での外部アクセスを許可するUFWルールを作成する必要があります。このコマンドには、ポート番号またはサービス名(http)のいずれかをパラメータとして使用できます。

すべての着信HTTP(ポート80)接続を許可するには、次のコマンドを実行します:

  1. sudo ufw allow http
Output
Rule added Rule added (v6)

HTTPサービスのポート番号を指定する別の構文もあります:

  1. sudo ufw allow 80
Output
Rule added Rule added (v6)

すべての着信HTTPS(ポート443)を許可

通常、HTTPSはポート443で実行されます。もし着信トラフィックのデフォルトポリシーがドロップまたは拒否に設定されている場合、ポート443での外部アクセスを許可するUFWルールを作成する必要があります。このコマンドには、ポート番号またはサービス名(https)のいずれかをパラメータとして使用できます。

すべての着信HTTPS(ポート443)接続を許可するには、次のコマンドを実行します:

  1. sudo ufw allow https
Output
Rule added Rule added (v6)

HTTPSサービスのポート番号を指定する別の構文もあります:

  1. sudo ufw allow 443
Output
Rule added Rule added (v6)

すべての着信HTTPおよびHTTPSを許可

HTTPとHTTPSの両方のトラフィックを許可する場合は、両方のポートを許可する単一のルールを作成できます。この使用法では、protoパラメーターでプロトコルも定義する必要があります。この場合、tcpに設定する必要があります。

すべての着信HTTPおよびHTTPS(ポート80および443)接続を許可するには、次を実行します:

  1. sudo ufw allow proto tcp from any to any port 80,443
Output
Rule added Rule added (v6)

特定のIPアドレスまたはサブネットからのMySQL接続を許可

MySQLはクライアント接続をポート3306で待機しています。MySQLデータベースサーバーがリモートサーバー上のクライアントによって使用されている場合、そのアクセスを許可するUFWルールを作成する必要があります。

特定のIPアドレスまたはサブネットからの着信MySQL接続を許可するには、fromパラメーターを使用してソースIPアドレスを指定し、portパラメーターを使用して宛先ポート3306を設定します。

次のコマンドは、IPアドレス203.0.113.103がサーバーのMySQLポートに接続できるようにします:

  1. sudo ufw allow from 203.0.113.103 to any port 3306
Output
Rule added

MySQLサーバーに接続できるようにするために、203.0.113.0/24サブネット全体に接続を許可するには、次のコマンドを実行します:

  1. sudo ufw allow from 203.0.113.0/24 to any port 3306
Output
Rule added

特定のIPアドレスまたはサブネットからのPostgreSQL接続を許可する

PostgreSQLはポート5432でクライアント接続を待ち受けています。PostgreSQLデータベースサーバーがリモートサーバーのクライアントによって使用されている場合、そのトラフィックを許可する必要があります。

特定のIPアドレスまたはサブネットからの着信PostgreSQL接続を許可するには、fromパラメーターでソースを指定し、ポートを5432に設定します:

  1. sudo ufw allow from 203.0.113.103 to any port 5432
Output
Rule added

あなたのPostgreSQLサーバーに接続できるようにするために、203.0.113.0/24サブネット全体を許可するには、次のコマンドを実行します:

  1. sudo ufw allow from 203.0.113.0/24 to any port 5432
Output
Rule added

送信SMTPメールのブロック

SendmailやPostfixなどのメールサーバーは、通常、SMTPトラフィックにポート25を使用します。サーバーが送信SMTPメールを送信していない場合は、その種類のトラフィックをブロックしたい場合があります。送信SMTP接続をブロックするには、次のコマンドを実行します:

  1. sudo ufw deny out 25
Output
Rule added Rule added (v6)

これにより、ファイアウォールがポート25上のすべての送信トラフィックをドロップします。別のポート番号で送信接続を拒否する必要がある場合は、このコマンドを繰り返し実行し、25をブロックしたいポート番号に置き換えます。

結論

UFWは、適切に構成されている場合にサーバーのセキュリティを大幅に向上させることができる強力なツールです。この参照ガイドでは、Ubuntuのファイアウォールを構成するためによく使用される一般的なUFWルールについて説明しています。

このガイドのほとんどのコマンドは、ソースIPアドレスや宛先ポートなどのパラメータを変更することで、さまざまなユースケースやシナリオに適応させることができます。各コマンドパラメータと使用可能な修飾子の詳細な情報については、manユーティリティを使用してUFWのマニュアルを確認できます。

  1. man ufw

Ubuntuのドキュメントにある公式UFWページは、さらに高度なユースケースや例の参照として使用できる別のリソースです。

Source:
https://www.digitalocean.com/community/tutorials/ufw-essentials-common-firewall-rules-and-commands