紹介
UFW(uncomplicated firewall)は、Ubuntuディストリビューションにデフォルトで含まれるiptables
の上で実行されるファイアウォール構成ツールです。コマンドラインを介して一般的なファイアウォールの使用ケースを設定するための簡略化されたインタフェースを提供します。
このチートシートスタイルのガイドでは、ポート、ネットワークインタフェース、およびソースIPアドレスによってサービスを許可またはブロックする方法の一般的なUFWの使用ケースとコマンドについてのクイックリファレンスを提供します。
このガイドの使用方法
- このガイドは、自己完結型のコマンドラインスニペットを使用したチートシート形式です。
- 完了しようとしているタスクに関連するセクションに移動してください。
- このガイドのコマンドでハイライトされたテキストを見た場合は、このテキストが自分のネットワークのIPアドレスを指す必要があることを覚えておいてください。
現在のUFWルールセットをsudo ufw status
またはsudo ufw status verbose
で確認できることを覚えておいてください。
DigitalOcean App Platformを使用してGitHubからフロントエンドアプリケーションを展開します。DigitalOceanにアプリのスケーリングを任せましょう。
UFWステータスの確認
ufw
が有効かどうかを確認するには、次のコマンドを実行します:
OutputStatus: inactive
出力には、ファイアウォールがアクティブかどうかが示されます。
UFW を有効にする
ufw status
を実行した際に Status: inactive
というメッセージが表示された場合、ファイアウォールはまだシステムで有効になっていないことを意味します。それを有効にするためのコマンドを実行する必要があります。
デフォルトでは、有効になると UFW はサーバー上のすべてのポートへの外部アクセスをブロックします。実際には、SSH 経由でサーバーに接続している場合、SSH ポートを介したアクセスを許可する前に ufw
を有効にすると、切断されます。その場合は、ファイアウォールを有効にする前にこのガイドのSSH アクセスを許可する方法のセクションに従ってください。
システムで UFW を有効にするには、次のコマンドを実行します:
次のような出力が表示されます:
OutputFirewall is active and enabled on system startup
現在ブロックされているか許可されているかを確認するには、ufw status
を実行する際に verbose
パラメーターを使用します:
OutputStatus: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip
UFW を無効にする
何らかの理由で UFW を無効にする必要がある場合は、次のコマンドを使用します:
このコマンドは、システム上のファイアウォールサービスを完全に無効にしますので、注意してください。
IPアドレスをブロックする
特定のIPアドレスから発信されるすべてのネットワーク接続をブロックするには、次のコマンドを実行して、ハイライトされたIPアドレスをブロックしたいIPアドレスに置き換えます:
OutputRule added
この例では、from 203.0.113.100
は“203.0.113.100”のソースIPアドレスを指定しています。
今すぐsudo ufw status
を実行すると、指定したIPアドレスが拒否されたと表示されます:
OutputStatus: active
To Action From
-- ------ ----
Anywhere DENY 203.0.113.100
指定したIPアドレスに対して、着信または送信のすべての接続がブロックされます。
サブネットをブロックする
完全なサブネットをブロックする必要がある場合は、サブネットアドレスをfrom
パラメーターとしてufw deny
コマンドで使用できます。この例では、サブネット203.0.113.0/24
のすべてのIPアドレスをブロックします:
OutputRule added
ネットワークインターフェースへの着信接続をブロックする
特定のIPアドレスから特定のネットワークインターフェースへの受信接続をブロックするには、次のコマンドを実行してください。ハイライトされたIPアドレスをブロックしたいIPアドレスに置き換えてください:
OutputRule added
in
パラメーターは、ufw
にルールを適用するよう指示し、on eth0
パラメーターは、ルールが eth0
インターフェースにのみ適用されることを指定します。これは、複数のネットワークインターフェース(仮想含む)を持つシステムがあり、これらのインターフェースの一部への外部アクセスをブロックする必要があるが、すべてをブロックするわけではない場合に役立ちます。
IPアドレスの許可
特定のIPアドレスからのすべてのネットワーク接続を許可するには、次のコマンドを実行してください。ハイライトされたIPアドレスを許可したいIPアドレスに置き換えます:
OutputRule added
これで sudo ufw status
を実行すると、追加したIPアドレスの横に ALLOW
という単語が表示される出力が表示されます。
OutputStatus: active
To Action From
-- ------ ----
...
Anywhere ALLOW 203.0.113.101
ホストの場合に対応するサブネットマスクを提供することで、ネットワークのサブネットからの接続も許可できます。例:203.0.113.0/24
。
ネットワークインターフェースへの受信接続の許可
特定のIPアドレスから特定のネットワークインターフェイスへの受信接続を許可するには、次のコマンドを実行してください。ハイライトされたIPアドレスを許可したいIPアドレスで置き換えます:
OutputRule added
in
パラメータは、ufw
が受信接続にのみルールを適用するよう指示し、on eth0
パラメータはルールがeth0
インターフェースにのみ適用されることを指定します。
sudo ufw status
を実行すると、次のような出力が表示されます:
OutputStatus: active
To Action From
-- ------ ----
...
Anywhere on eth0 ALLOW 203.0.113.102
UFWルールの削除
UFWで以前に設定したルールを削除するには、ufw delete
に続けてルール(allow
またはdeny
)とターゲットの指定を使用します。次の例は、以前にIPアドレス203.0.113.101
からのすべての接続を許可するように設定されたルールを削除します:
OutputRule deleted
削除するルールを指定する別の方法は、ルールIDを提供することです。この情報は次のコマンドで取得できます:
OutputStatus: 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によってルールを削除するには、次のコマンドを実行します:
操作を確認し、提供されたIDが削除したい正しいルールを指していることを確認するように促されます。
OutputDeleting:
deny from 203.0.113.100
Proceed with operation (y|n)? y
Rule deleted
sudo ufw status
を使用して再びルールをリストアップすると、ルールが削除されたことがわかります。
利用可能なアプリケーションプロファイルの一覧
インストール時に、ネットワーク通信に依存するアプリケーションは通常、UFWプロファイルを設定します。これは、外部アドレスからの接続を許可するために使用できます。これは通常、ufw allow from
を実行するのと同じですが、サービスが使用する特定のポート番号を抽象化し、参照されるサービスにユーザーフレンドリーな用語を提供する利点があります。
現在利用可能なプロファイルをリストアップするには、次のコマンドを実行します:
Webサーバーやその他のネットワーク依存ソフトウェアなどのサービスをインストールし、UFWでプロファイルが利用できなかった場合は、まずサービスが有効になっていることを確認してください。リモートサーバーの場合、通常はOpenSSHがすぐに利用できるでしょう:
OutputAvailable applications:
OpenSSH
アプリケーションプロファイルを有効にする
UFWアプリケーションプロファイルを有効にするには、sudo ufw app list
コマンドで取得できるアプリケーションプロファイルの名前に続けてufw allow
を実行します。次の例では、デフォルトのSSHポートでのすべての着信SSH接続を許可するOpenSSHプロファイルを有効にしています。
OutputRule added
Rule added (v6)
複数の単語で構成されるプロファイル名(Nginx HTTPS
など)は引用符で囲むことを忘れないでください。
アプリケーションプロファイルを無効にする
以前にUFW内で設定したアプリケーションプロファイルを無効にするには、それに対応するルールを削除する必要があります。例えば、sudo ufw status
からの次の出力を考えてみてください:
OutputStatus: 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
ルールを無効にする必要があります。
覚えておいてください。利用可能なアプリケーションプロファイルは、sudo ufw app list
を使用して一覧表示できます。
SSHを許可する
リモートサーバーで作業する場合は、SSHポートが接続に開かれていることを確認して、リモートでサーバーにログインできるようにする必要があります。
次のコマンドを使用して、OpenSSH UFWアプリケーションプロファイルを有効にし、サーバーのデフォルトのSSHポートへのすべての接続を許可します。
OutputRule added
Rule added (v6)
よりユーザーフレンドリーではありませんが、別の構文として、通常はデフォルトで22
に設定されているSSHサービスの正確なポート番号を指定することもできます。
OutputRule added
Rule added (v6)
特定のIPアドレスまたはサブネットからのSSH受信を許可する
特定のIPアドレスまたはサブネットからの受信接続を許可するには、from
ディレクティブを含めて接続のソースを定義します。これにより、to
パラメーターで宛先アドレスも指定する必要があります。このルールをSSHに制限するには、proto
(プロトコル)をtcp
に制限し、port
パラメーターを使用してSSHのデフォルトポートである22
に設定します。
次のコマンドは、IPアドレス203.0.113.103
からのSSH接続のみを許可します:
OutputRule added
また、from
パラメータとしてサブネットアドレスを使用して、整数ネットワークからの着信SSH接続を許可できます:
OutputRule added
特定のIPアドレスまたはサブネットからの着信Rsyncを許可する
Rsyncプログラムは、ポート873
で実行され、コンピュータ間でファイルを転送するために使用できます。
特定のIPアドレスまたはサブネットからの着信rsync
接続を許可するには、from
パラメータを使用してソースIPアドレスを指定し、port
パラメータを使用して宛先ポート873
を設定します。
次のコマンドは、IPアドレス203.0.113.103
からのRsync接続のみを許可します:
OutputRule added
サーバーにrsync
するために203.0.113.0/24
サブネット全体を許可するには、次のコマンドを実行します:
OutputRule added
Nginx HTTP / HTTPSを許可する
インストール後、Nginxウェブサーバーはサーバー内にいくつかの異なるUFWプロファイルを設定します。Nginxをインストールしてサービスとして有効にした後、次のコマンドを実行して利用可能なプロファイルを特定します:
Output Nginx Full
Nginx HTTP
Nginx HTTPS
HTTPとHTTPSの両方のトラフィックを有効にするには、Nginx Full
を選択してください。それ以外の場合は、HTTPのみを許可する場合はNginx HTTP
、HTTPSのみを許可する場合はNginx HTTPS
を選択してください。
次のコマンドは、サーバー上でHTTPとHTTPSの両方のトラフィックを許可します(ポート80
および443
):
OutputRule added
Rule added (v6)
Apache HTTP/HTTPSを許可
インストール後、Apacheウェブサーバーはサーバー内にいくつかの異なるUFWプロファイルを設定します。Apacheをインストールしてサービスとして有効にした後、次のコマンドを実行して利用可能なプロファイルを特定します:
Output Apache
Apache Full
Apache Secure
HTTPとHTTPSの両方のトラフィックを有効にするには、Apache Full
を選択してください。それ以外の場合は、HTTPのみを許可する場合はApache
、HTTPSのみを許可する場合はApache Secure
を選択してください。
次のコマンドは、サーバー上でHTTPとHTTPSの両方のトラフィックを許可します(ポート80
および443
):
OutputRule added
Rule added (v6)
すべての着信HTTPを許可(ポート80
)
ウェブサーバー(例えばApacheやNginx)は通常、ポート80
でHTTPリクエストを待ち受けます。もし着信トラフィックのデフォルトポリシーがドロップまたは拒否に設定されている場合、ポート80
での外部アクセスを許可するUFWルールを作成する必要があります。このコマンドには、ポート番号またはサービス名(http
)のいずれかをパラメータとして使用できます。
すべての着信HTTP(ポート80
)接続を許可するには、次のコマンドを実行します:
OutputRule added
Rule added (v6)
HTTPサービスのポート番号を指定する別の構文もあります:
OutputRule added
Rule added (v6)
すべての着信HTTPS(ポート443
)を許可
通常、HTTPSはポート443
で実行されます。もし着信トラフィックのデフォルトポリシーがドロップまたは拒否に設定されている場合、ポート443
での外部アクセスを許可するUFWルールを作成する必要があります。このコマンドには、ポート番号またはサービス名(https
)のいずれかをパラメータとして使用できます。
すべての着信HTTPS(ポート443
)接続を許可するには、次のコマンドを実行します:
OutputRule added
Rule added (v6)
HTTPSサービスのポート番号を指定する別の構文もあります:
OutputRule added
Rule added (v6)
すべての着信HTTPおよびHTTPSを許可
HTTPとHTTPSの両方のトラフィックを許可する場合は、両方のポートを許可する単一のルールを作成できます。この使用法では、proto
パラメーターでプロトコルも定義する必要があります。この場合、tcp
に設定する必要があります。
すべての着信HTTPおよびHTTPS(ポート80
および443
)接続を許可するには、次を実行します:
OutputRule added
Rule added (v6)
特定のIPアドレスまたはサブネットからのMySQL接続を許可
MySQLはクライアント接続をポート3306
で待機しています。MySQLデータベースサーバーがリモートサーバー上のクライアントによって使用されている場合、そのアクセスを許可するUFWルールを作成する必要があります。
特定のIPアドレスまたはサブネットからの着信MySQL接続を許可するには、from
パラメーターを使用してソースIPアドレスを指定し、port
パラメーターを使用して宛先ポート3306
を設定します。
次のコマンドは、IPアドレス203.0.113.103
がサーバーのMySQLポートに接続できるようにします:
OutputRule added
MySQLサーバーに接続できるようにするために、203.0.113.0/24
サブネット全体に接続を許可するには、次のコマンドを実行します:
OutputRule added
特定のIPアドレスまたはサブネットからのPostgreSQL接続を許可する
PostgreSQLはポート5432
でクライアント接続を待ち受けています。PostgreSQLデータベースサーバーがリモートサーバーのクライアントによって使用されている場合、そのトラフィックを許可する必要があります。
特定のIPアドレスまたはサブネットからの着信PostgreSQL接続を許可するには、from
パラメーターでソースを指定し、ポートを5432
に設定します:
OutputRule added
あなたのPostgreSQLサーバーに接続できるようにするために、203.0.113.0/24
サブネット全体を許可するには、次のコマンドを実行します:
OutputRule added
送信SMTPメールのブロック
SendmailやPostfixなどのメールサーバーは、通常、SMTPトラフィックにポート25
を使用します。サーバーが送信SMTPメールを送信していない場合は、その種類のトラフィックをブロックしたい場合があります。送信SMTP接続をブロックするには、次のコマンドを実行します:
OutputRule added
Rule added (v6)
これにより、ファイアウォールがポート25
上のすべての送信トラフィックをドロップします。別のポート番号で送信接続を拒否する必要がある場合は、このコマンドを繰り返し実行し、25
をブロックしたいポート番号に置き換えます。
結論
UFWは、適切に構成されている場合にサーバーのセキュリティを大幅に向上させることができる強力なツールです。この参照ガイドでは、Ubuntuのファイアウォールを構成するためによく使用される一般的なUFWルールについて説明しています。
このガイドのほとんどのコマンドは、ソースIPアドレスや宛先ポートなどのパラメータを変更することで、さまざまなユースケースやシナリオに適応させることができます。各コマンドパラメータと使用可能な修飾子の詳細な情報については、man
ユーティリティを使用してUFWのマニュアルを確認できます。
Ubuntuのドキュメントにある公式UFWページは、さらに高度なユースケースや例の参照として使用できる別のリソースです。
Source:
https://www.digitalocean.com/community/tutorials/ufw-essentials-common-firewall-rules-and-commands