UbuntuでUFWを使用してファイアウォールを設定する方法

はじめに

UFW(Uncomplicated Firewall)は、iptablesによるファイアウォール設定を簡素化するためのインターフェースです。iptablesは堅実で柔軟性があるツールですが、その使用方法を学ぶのが初学者にとって困難な場合があります。ネットワークを保護するために始めることが望まれている場合、どのツールを使用すべきかわからない場合は、UFWがあなたに適しているかもしれません。

このチュートリアルは、UFWを使用してUbuntu v18.04およびそれ以上のバージョンにてファイアウォールを設定する方法をお教えします。

前提条件

Ubuntu 16.04または以下のバージョンを使用している場合、最新のバージョンにアップグレードすることを推奨します。なぜなら、Ubuntuはこれらのバージョンのサポートをもっていないからです。このガイドのコレクションがあなたのUbuntuバージョンのアップグレードを助けることを期待します。

このチュートリアルに従うためには、以下が必要です。

UFWを使用してUbuntuのファイアウォールを設定する

  1. IPv6を有効にする
  2. デフォルトポリシーを設定する
  3. SSH接続を許可する
  4. UFWを有効にする
  5. 他の必要な接続をすべて許可する
  6. 接続を拒否する
  7. ファイアウォールルールを削除する
  8. UFWのステータスとルールを確認する
  9. Ubuntuでファイアウォールを無効にするまたはリセットする方法

ステップ 1 — IPv6を有効化していることを確認する

Ubuntuの最近のバージョンでは、IPv6はデフォルトで有効化されています。实践的には、サーバに追加されるほとんどのファイアウォールルールには、IPv4とIPv6のバージョンが含まれていて、后者はUFWのステータスコマンドの出力でv6として識別されます。IPv6が有効化されていることを確認するためには、/etc/default/ufwにあるUFWの設定ファイルを確認することができます。このファイルをnanoやお気に入りのコマンドラインエディタで開いてください。

  1. sudo nano /etc/default/ufw

そしてIPV6の値がyesに設定されていることを確認してください。以下のようになっているはずです:

/etc/default/ufw excerpt
  1. IPV6=yes

ファイルを保存し閉じる。nanoを使用している場合、これを行うにはCTRL+Xを押し、次にYENTERを押すことで確認します。

後の手順でUFWを有効にしたとき、UFWはIPv4とIPv6の両方のファイアウォールルールを書き込む設定になります。

ステップ 2 — デフォルトのポリシーを設定する

UFWを初めて使う場合、最初のステップとしてデフォルトのファイアウォールポリシーを確認するのが良いことです。これらのルールは、他のルールに合致しないトラフィックに対する処理方法を控制在ります。

デフォルトでUFWは全ての受信接続を拒否し、全ての送信接続を許可しています。これはあなたが試みているサーバーと外部から通信することができませんが、サーバー内のアプリケーションは外部に通信できます。追加のルールを使って特定のサービスやポートを許可することで、通常のポリシーを上書きします。

次の手順でUFWのデフォルトポリシーを受信側と送信側両方に設定します。

受信側のデフォルトポリシーをdenyに設定するには、以下のコマンドを実行します:

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

送信側のデフォルトポリシーをallowに設定するには、以下のコマンドを実行します:

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

これらのコマンドで受信側のデフォルトは拒否し、送信側のデフォルトは許可します。これらの默认値だけでは、私たちの人々は一般的に自分のPCで良いですが、サーバーでは通常、外部からの要求を応答する必要があります。そのため、次のステップでは正規的な入力接続(SSHやHTTPなど)を許可します。

3. SSH接続を許可する

UFWを有効にすると、現在の状態では全ての受信接続を拒否し、全ての送信接続を許可しています。これはおそらく私たちの人々は一般に自分のPCで良いですが、サーバーでは通常、外部からの要求を応答する必要があります。そのため、次のスtepでは正規的な入力接続(SSHやHTTPなど)を許可します。

UFWを使うと、受信側のデフォルトポリシーは拒否され、送信側のデフォルトポリシーは許可されます。これはあなたがサーバーに接続して管理するために必要です。

今回はSSH接続を許可します。SSH接続を許可するには、次の手順を実行します:

1. SSH接続を許可するには、以下のコマンドを実行します:
“`bash
ufw allow ssh
“`

2. 完了後、UFWの状態を確認するには、以下のコマンドを実行します:
“`bash
ufw status
“`

3. 結果が以下のように表示された場合、SSH接続は許可されます:
“`
Status: active
To: Allow 22/tcp (SSH)
From: Anywhere
New profiles: 0
Allow 22/tcp (SSH)
“`

4. 完了したら、UFWを保存するには、以下のコマンドを実行します:
“`bash
ufw save
“`

5. 完了したら、UFWの状態を再度確認するには、以下のコマンドを実行します:
“`bash
ufw status
“`

6. 結果が以下のように表示された場合、SSH接続は許可されます:
“`
Status: active
To: Allow 22/tcp (SSH)
From: Anywhere
New profiles: 0
Allow

OpenSSHのUFWアプリケーションプロファイルを許可する

インストール後、ネットワーク接続に依存するほとんどのアプリケーションはUFW内にアプリケーションプロファイルを登録します。これにより、ユーザーはサービスへの外部アクセスを迅速に許可または拒否することができます。現在登録されているプロファイルをUFWで確認するには以下のようにします:

  1. sudo ufw app list
Output
Available applications: OpenSSH

OpenSSHアプリケーションプロファイルを有効にするには、以下を実行します:

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

これにより、SSHデーモンがデフォルトでリスニングしているポート22へのすべての接続を許可するファイアウォールルールが作成されます。

サービス名でSSHを許可する

UFWで受信SSH接続を許可するためのもう一つの方法は、サービス名:sshを参照することです。

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

UFWは、/etc/servicesファイルに基づいてサービスがどのポートとプロトコルを使用しているかを知っています。

ポート番号でSSHを許可する

代わりに、アプリケーションプロファイルやサービス名の代わりにポートを指定して同等のルールを書くことができます。例えば、このコマンドは前の例と同じように動作します:

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

SSHデーモンを異なるポートを使用するように設定した場合、適切なポートを指定する必要があります。例えば、SSHサーバーがポート2222でリスニングしている場合、このコマンドを使用してそのポートで接続を許可することができます:

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

今やファイアウォールが受信SSH接続を許可するように設定されていますので、有効にすることができます。

ステップ4 — UFWの有効化

ファイアウォールは今やSSH接続を許可するように設定されています。ファイアウォールがまだ無効な状態であっても、これまでに追加されたルールを確認するために以下を使用することができます:

  1. sudo ufw show added
Output
Added user rules (see 'ufw status' for running firewall): ufw allow OpenSSH

受信SSH接続を許可するルールがあることを確認した後、ファイアウォールを有効にすることができます:

  1. sudo ufw enable
Output
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y Firewall is active and enabled on system startup

コマンドが既存のSSH接続を中断する可能性があるという警告を受け取るでしょう。既にSSH接続を許可するファイアウォールルールを設定しているので、続けるのは問題ありません。プロンプトにyを入力し、ENTERを押してください。

ファイアウォールは今在有効です。sudo ufw status verboseコマンドを実行して設定されたルールを確認してください。このチュートリアルの残りでは、UFWの使用方法の詳細について説明します。例えば、異なる種類の接続を許可または拒否する方法などです。

ステップ5 — 他の接続を許可する

この段階では、サーバーが応答する必要がある他のすべての接続を許可する必要があります。許可すべき接続は、具体的なニーズによって異なります。アプリケーションプロファイル、サービス名、ポートに基づいて接続を許可するルールを書く方法はすでにお分かりでしょう。SSHのポート22用にすでに行ったことです。以下のような場合でも同様に行えます:

  • HTTPが利用するポート80。これは暗号化されていないウェブサーバー用です。以下のコマンドを使用して許可できます。sudo ufw allow httpまたはsudo ufw allow 80
  • HTTPSが利用するポート443。これは暗号化されたウェブサーバー用です。以下のコマンドを使用して許可できます。sudo ufw allow httpsまたはsudo ufw allow 443
  • Apacheに対してHTTPとHTTPSの両方を許可するには、以下のコマンドを使用します。sudo ufw allow ‘Apache Full’
  • Nginxに対してHTTPとHTTPSの両方を許可するには、以下のコマンドを使用します。sudo ufw allow ‘Nginx Full’

サーバーで利用可能なアプリケーションプロファイルを確認するためにsudo ufw app listを忘れないでください。

ポートや既知のサービス名を指定する以外にも、接続を許可する方法はいくつかあります。そのいくつかを次に見ていきましょう。

特定のポート範囲

UFWを使用することで、ポート範囲を指定することができます。一部のアプリケーションでは、单一のポートではなく、複数のポートを使用しています。

たとえば、X11接続にはポート6000から6007が使用されるため、以下のコマンドを使用することで許可することができます:

  1. sudo ufw allow 6000:6007/tcp
  2. sudo ufw allow 6000:6007/udp

UFWを使用してポート範囲を指定する際には、ルールに適用されるProtocol(tcpまたはudp)を指定する必要があります。これまでにこの点を提及していなかった理由は、Protocolを指定しないことで自動的に両方のProtocolを許可することができるためであり、ほとんどの場合には問題ないからです。

特定のIPアドレス

UFWを使用する際には、ルール内でIPアドレスを指定することもできます。たとえば、特定のIPアドレスからの接続を許可したい場合、例えば職場や自宅のIPアドレス203.0.113.4の場合、fromパラメーターを使用してIPアドレスを許可する必要があります:

  1. sudo ufw allow from 203.0.113.4
Output
Rule added

IPアドレスが接続するポートを指定するには、to any portを追加してポート番号の後に書くことができます。たとえば、203.0.113.4がポート22(SSH)に接続することを許可したい場合、このコマンドを使用します:

  1. sudo ufw allow from 203.0.113.4 to any port 22
Output
Rule added

サブネット

CIDR記法を使用して、IPアドレスのサブネットを許可することができます。たとえば、203.0.113.1から203.0.113.254のIPアドレスをすべて許可したい場合、以下のコマンドを使用できます:

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

同様に、サブネット203.0.113.0/24が接続することを許可されるデスティンATIONポートを指定することもできます。また、ここではポート22(SSH)を例に使用します:

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

特定の网络インターフェースに接続する

特定の网络インターフェースに適用されるファイアウォールルールを作成したい場合、”allow in on”を介して网络インターフェースの名前を指定することで实现できます。

続行する前に、あなたの网络インターフェースを確認するかもしれません。これを行うためのコマンドは以下の通りです:

  1. ip addr
Output Excerpt
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state . . . 3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default . . .

強調された出力は、网络インターフェースの名前を示しています。通常、eth0enp3s2のような名前が与えられます。

サーバーにpublic network interfaceがeth0と名付けられている場合、このようなコマンドを使用してHTTPトラフィック(ポート80)を許可することができます:

  1. sudo ufw allow in on eth0 to any port 80
Output
Rule added Rule added (v6)

これにより、あなたのサーバーは公のインターネットからHTTPリクエストを受け取ることができます。

MySQLデータベースサーバー(ポート 3306)が、例えばプライベートネットワークインターフェース eth1 で接続をリスンするようにしたい場合、以下のコマンドを使用することができます:

  1. sudo ufw allow in on eth1 to any port 3306
Output
Rule added Rule added (v6)

これにより、プライベートネットワーク上の他のサーバーがMySQLデータベースに接続できるようになります。

ステップ6 — 接続の拒否

デフォルトの受信接続ポリシーを変更していない場合、UFWはすべての受信接続を拒否するように設定されています。一般的に、これにより、特定のポートとIPアドレスを明示的に許可するルールを作成することで、安全なファイアウォールポリシーを作成するプロセスが簡素化されます。

しかし、時には特定の接続を拒否する必要があります。例えば、サーバーがその元から攻撃されていると知っている場合、ソースIPアドレスやサブネットに基づいてです。また、デフォルトの受信ポリシーを 許可 に変更したい場合(推奨されません)、接続を許可したくないサービスやIPアドレスに対して 拒否 ルールを作成する必要があります。

拒否 ルールを書くには、先ほど説明したコマンドを使用し、allowdeny に置き換えます。

例えば、HTTP接続を拒否する場合、以下のコマンドを使用することができます:

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

また、203.0.113.4 からのすべての接続を拒否したい場合、以下のコマンドを使用することができます:

  1. sudo ufw deny from 203.0.113.4
Output
Rule added

いくつかの場合、サーバーから出力した接続を拒否することも必要になります。サーバーでは、全てのユーザーが特定のポート(例如:SMTP通信用のポート25)を使用した場合,以下のようにdeny outを使ってポート番号を指定してください:

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

これで、サーバーからのすべてのSMTP通信を拒否します。

ステップ7 — ruleの削除

ruleの削除はrule creationのように重要です。ruleを削除する方法は二種類あります:rule numberやhuman-readable name(rule creation時に指定した名前)を指定できます。

UFWでruleをnumberで削除

rule numberを取得したい場合、UFW statusコマンドでnumbered listを表示することができます。次の例では、rule numberを表示させています:

  1. sudo ufw status numbered
Numbered Output:
Status: active To Action From -- ------ ---- [ 1] 22 ALLOW IN 15.15.15.0/24 [ 2] 80 ALLOW IN Anywhere

rule numberを見るには、statusコマンドでoptionを追加します:rule numberを指定して削除する場合、deleteコマンドでrule numberを指定します:

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

rule number 2を削除する場合、HTTP接続を許可していたものです。確認を求めて削除します。IPv6が有効になっていた場合、同じruleを削除します。

名前によってUFWルールを削除する

ルール番号を使用する代わりに、ルールの種類(通常はallowまたはdeny)と、このルールの対象であるサービス名またはポート番号、またはアプリケーションプロファイル名(使用されている場合)に基づいた人間が読解可能な名前でルールを参照することもできます。例えば、以前に有効にされたApache Fullという名前のアプリケーションプロファイル用のallowルールを削除したい場合、以下のように使用できます:

  1. sudo ufw delete allow "Apache Full"
Output
Rule deleted Rule deleted (v6)

deleteコマンドは、サービスの名前またはポートを参照して作成されたルールに対して同様に機能します。例えば、以前にsudo ufw allow httpでHTTP接続を許可するルールを設定した場合、そのルールを削除する方法は以下の通りです:

  1. sudo ufw delete allow http
Output
Rule deleted Rule deleted (v6)

サービス名はルールを指定する際にポート番号と交換可能であるため、allow httpの代わりにallow 80として同じルールを参照することもできます:

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

UFWルールを名前によって削除する際、IPv4とIPv6の両方のルールが存在する場合、それらが削除されます。

ステップ8 — UFWのステータスとルールを確認する

いつでも、以下のコマンドでUFWのステータスを確認できます:

  1. sudo ufw status verbose

UFWはデフォルトで無効になっているので、以下のような表示が見えます:

Output
Status: inactive

UFWを有効にした場合、输出は「UFWは有効です」ということであり、設定されたruleの一覧を示します。例えば、SSH (ポート22) 接続を任何の場所から許可している場合、出力は次のようになります:

Output
Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), disabled (routed) New profiles: skip To Action From -- ------ ---- 22/tcp ALLOW IN Anywhere

UFWの状態を確認するには、statusコマンドを使用します。

ステップ9 — UFWの無効化やリセット

UFWを無効にしたい場合、次のコマンドを使用します:

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

UFWを有効にしたい場合は、後で再度sudo ufw enableします。

もし既にUFWのruleを設定していて、新たに始めたい場合であっても、resetコマンドを使ってください:

  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.20210729_170353' Backing up 'before.rules' to '/etc/ufw/before.rules.20210729_170353' Backing up 'after.rules' to '/etc/ufw/after.rules.20210729_170353' Backing up 'user6.rules' to '/etc/ufw/user6.rules.20210729_170353' Backing up 'before6.rules' to '/etc/ufw/before6.rules.20210729_170353' Backing up 'after6.rules' to '/etc/ufw/after6.rules.20210729_170353'

これでUFWは無効になり、以前に定義した全てのruleは削除されます。これはUFWのデフォルトポリシーを変更せず、元々の状態を保持します。

アプリケーションをGitHubからDigitalOcean App Platformで deploy します。DigitalOceanはあなたのアプリケーションの伸縮をお手伝いします。

結論

您的防火墙现已配置好,允许(至少)SSH连接。请确保允许服务器所需的所有其他传入连接,同时限制任何不必要的连接,以便您的服务器运行正常且安全。

若想了解更多常见的UFW配置,请参阅UFW基础:常见的防火墙规则与命令教程。

Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-20-04