導入
UFW(Uncomplicated Firewall)は、iptablesのフロントエンドであり、ファイアウォールの設定プロセスを簡素化するように設計されています。iptablesは強力で柔軟性の高いツールですが、初心者にとって、ファイアウォールを適切に設定するための使い方を習得するのは難しい場合があります。ネットワークのセキュリティ対策を始めようと考えているものの、どのツールを使用すればよいか迷っている場合は、UFWが最適な選択肢となるかもしれません。.
前提条件
Ubuntu 16.04以前をご利用の場合は、Ubuntuはこれらのバージョンをサポートしていないため、新しいバージョンへのアップグレードをお勧めします。この手順は、Ubuntuのバージョンをアップグレードするのに役立ちます。.
ステップ1 - IPv6が有効になっていることを確認する
Ubuntuの最新バージョンでは、IPv6がデフォルトで有効になっています。実際には、サーバーに追加されるほとんどのファイアウォールルールにはIPv4とIPv6の両方が含まれ、UFWステータスコマンドの出力ではIPv6がv6として識別されます。IPv6が有効になっていることを確認するには、UFW設定ファイル(/etc/default/ufw)を確認してください。nanoコマンドまたはお好みのコマンドラインエディタを使ってこのファイルを開きます。
sudo nano /etc/default/ufw次に、IPV6の値が「はい」に設定されていることを確認します。設定は以下のようになります。
IPV6=yesファイルを保存して閉じます。nanoを使用している場合は、Ctrl+X、Y、ENTERの順に入力して確定します。.
このガイドの次のステップで UFW を有効にすると、IPv4 と IPv6 の両方のファイアウォール ルールを書き込むように構成されます。.
ステップ2 - デフォルトポリシーを設定する
UFWを使い始めたばかりの方は、まずファイアウォールのデフォルトポリシーを確認することをお勧めします。これらのルールは、他のルールに明示的に一致しないトラフィックの処理方法を制御します。.
デフォルトでは、UFW はすべての受信接続を拒否し、すべての送信接続を許可するように設定されています。つまり、サーバーにアクセスしようとするすべてのユーザーは接続できませんが、サーバー内のアプリケーションは外部に接続できます。この一般的なポリシーの例外として、特定のサービスとポートを許可するための追加ルールも用意されています。.
このチュートリアルの残りの部分を確実に実行できるように、受信トラフィックと送信トラフィックのデフォルトの UFW ポリシーを設定します。.
デフォルトの UFW 入力ポリシーを拒否に設定するには、次のコマンドを実行します。
sudo ufw default deny incomingOutput
Default incoming policy changed to 'deny'
(be sure to update your rules accordingly)デフォルトの UFW 送信ポリシーを permissive に設定するには、次のコマンドを実行します。
これらのコマンドは、デフォルトで着信接続を拒否し、発信接続を許可するように設定します。これらのファイアウォールのデフォルト設定だけで、パソコンであれば十分かもしれませんが、サーバーは外部ユーザーからの着信リクエストに応答する必要があることがよくあります。この点については後ほど説明します。.
ステップ3 – SSH接続を許可する
UFWファイアウォールを有効にすると、すべての受信接続が拒否されます。つまり、サーバーがこれらの種類のリクエストに応答するようにするには、正当な受信接続(SSH接続やHTTP接続など)を明示的に許可するルールを作成する必要があります。クラウドサーバーを使用している場合は、サーバーに接続して管理できるように、SSH接続の受信を許可することを推奨します。.
OpenSSH UFWアプリケーションプロファイルを許可する
ネットワーク接続に依存するアプリケーションのほとんどは、インストール後、UFWにアプリケーションプロファイルを登録します。これにより、ユーザーはサービスへの外部アクセスを迅速に許可または拒否できます。UFWに現在登録されているプロファイルは、次のコマンドで確認できます。
sudo ufw app listOutput
Available applications:
OpenSSHOpenSSH アプリケーション プロファイルを有効にするには、次のコマンドを実行します。
サービス名に基づいてSSHを許可する
着信 SSH 接続を許可するように UFW を構成する別の方法は、サービス名を参照することです。
ポート番号に基づいてSSHを有効にする
代わりに、アプリケーション名またはサービスプロファイル名の代わりにポートを指定して同等のルールを記述することもできます。例えば、次のコマンドは前の例と同じように動作します。
sudo ufw allow 22Output
Rule added
Rule added (v6)SSHサービスで別のポートを使用するように設定している場合は、適切なポートを指定する必要があります。例えば、SSHサーバーがポート2222でリッスンしている場合、次のコマンドを使用してそのポートでの接続を許可できます。
sudo ufw allow 2222Output
Rule added
Rule added (v6)ファイアウォールが着信 SSH 接続を許可するように設定されたので、これを有効にできます。.
ステップ4 — UFWを有効にする
これで、ファイアウォールがSSH接続を許可するように設定されているはずです。ファイアウォールがまだ無効になっている場合でも、追加されたルールを確認するには、次のコマンドを使用します。
sudo ufw show added
Output
Added user rules (see 'ufw status' for running firewall):
ufw allow OpenSSH着信 SSH 接続を許可するルールがあることを確認したら、次のコマンドでファイアウォールを有効にできます。
sudo ufw enable
OutputCommand 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 - 他の接続を許可する
この時点で、サーバーが処理する必要がある他のすべての接続を許可する必要があります。許可する接続は、具体的なニーズによって異なります。アプリケーションプロファイル、サービス名、またはポートに基づいて接続を許可するルールの記述方法は既にご存じのはずです。ポート22のSSHについては既にこの手順を実行しました。以下の接続についても同様に実行できます。
- 暗号化されていないWebサーバーが使用するポートと同じポート80のHTTPを、sudo ufw allow httpまたはsudo ufw allow 80を使用して実行します。
- 暗号化されたWebサーバーが使用するポートと同じ443のHTTPSを、sudo ufw allow httpsまたはsudo ufw allow 443を使用して実行します。
- sudo ufw allow 'Apache Full' を使用した、HTTP および HTTPS 対応の Apache‘
- sudo ufw allow 'Nginx Full' を使用した、HTTP および HTTPS での Nginx‘
sudo ufw app list コマンドを使用して、サーバーで使用可能なアプリケーション プロファイルを確認することを忘れないでください。.
ポート番号や既知のサービス名を指定する以外にも、接続を許可する方法はいくつかあります。以下では、これらの方法のいくつかについて説明します。.
特定のポート範囲
UFWではポートの範囲を指定できます。アプリケーションによっては、1つのポートではなく複数のポートを使用するものもあります。.
たとえば、ポート 6000 ~ 6007 を使用して X11 接続を許可するには、次のコマンドを使用します。
sudo ufw 6000:6007/tcp を許可
sudo ufw 6000:6007/udp を許可
UFWでポート範囲を指定する場合、ルールを適用するプロトコル(TCPまたはUDP)を指定する必要があります。プロトコルを指定しないと両方のプロトコルが自動的に許可されるため、これまでこの点について説明していませんでした。ほとんどの場合、これは問題ありません。.
特定のIPアドレス
UFWを使用する場合、ルールでIPアドレスを指定することもできます。例えば、職場や自宅のIPアドレス203.0.113.4など、特定のIPアドレスからの接続を許可したい場合は、fromパラメータを使用して、必要なIPアドレスを入力します。
sudo ufw allow from 203.0.113.4Output
Rule addedIPアドレスが接続を許可するポートを指定するには、各ポートにポート番号を続けて追加します。例えば、203.0.113.4がポート22(SSH)に接続できるようにするには、次のコマンドを使用します。
sudo ufw allow from 203.0.113.4 to any port 22
OutputRule added
サブネット
IPアドレスのサブネットへのアクセスを許可したい場合は、CIDR表記法を使用してネットワークマスクを指定します。例えば、203.0.113.1から203.0.113.254までのすべてのIPアドレスへのアクセスを許可したい場合は、次のコマンドを使用します。
sudo ufw allow from 203.0.113.0/24
Output
Rule added同様に、203.0.113.0/24 サブネットが接続を許可する宛先ポートを指定できます。ここでも、ポート 22 (SSH) を例として使用します。
sudo ufw allow from 203.0.113.0/24 to any port 22Output
Rule added特定のネットワークインターフェースへの接続
特定のネットワーク インターフェイスにのみ適用されるファイアウォール ルールを作成する場合は、「ログ記録を許可する」に続けてネットワーク インターフェイスの名前を指定します。.
続行する前に、ネットワークインターフェースを検索できます。これを行うには、次のコマンドを使用します。
ip addrOutput 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
. . .ハイライト表示された出力には、ネットワークインターフェースの名前が表示されます。通常、eth0 や enp3s2 のような名前が付けられます。.
したがって、サーバーに eth0 というパブリック ネットワーク インターフェイスがある場合は、次のコマンドを使用して、そのインターフェイスへの HTTP トラフィック (ポート 80) を許可できます。
sudo ufw allow in on eth0 to any port 80Output
Rule added
Rule added (v6)これを行うと、サーバーはパブリックインターネットからの HTTP リクエストを受信できるようになります。.
または、たとえば、MySQL データベース サーバー (ポート 3306) がプライベート ネットワーク インターフェイス eth1 上の接続をリッスンするようにしたい場合は、次のコマンドを使用できます。
sudo ufw allow in on eth1 to any port 3306Output
Rule added
Rule added (v6)これにより、プライベート ネットワーク上の他のサーバーが MySQL データベースに接続できるようになります。.
ステップ6 – 接続を破棄する
受信接続のデフォルトポリシーを変更していない場合、UFW はすべての受信接続を拒否するように設定されています。これにより、特定のポートと IP アドレスの通過を明示的に許可するルールを作成するだけで済むため、安全なファイアウォールポリシーの作成プロセスが簡素化されます。.
しかし、サーバーがそこから攻撃を受けていることが分かっている場合など、送信元IPアドレスやサブネットに基づいて特定の接続を拒否したい場合があります。また、デフォルトの受信ポリシーを許可に変更したい場合(推奨されません)、接続を許可したくないサービスまたはIPアドレスごとに拒否ルールを作成する必要があります。.
拒否ルールを記述するには、前述のコマンドを使用し、allow を deny に置き換えます。.
たとえば、HTTP 接続を拒否するには、次のコマンドを使用できます。
sudo ufw deny httpOutput
Rule added (v6)または、203.0.113.4 からのすべての接続を拒否する場合は、次のコマンドを使用できます。
sudo ufw deny from 203.0.113.4Output
Rule added場合によっては、サーバーからの送信接続をブロックしたいこともあります。SMTPトラフィック用のポート25など、サーバーの特定のポートをすべてのユーザーが使用できないようにするには、deny out に続けてポート番号を指定します。
sudo ufw deny out 25Output
Rule added
Rule added (v6)これにより、サーバー上のすべての送信 SMTP トラフィックがブロックされます。.
ステップ7 – ルールを削除する
ファイアウォールルールの削除方法を知ることは、作成方法を知ることと同じくらい重要です。削除するルールを指定するには、ルール番号を使用する方法と、人間が判読できる名前を使用する方法の2つがあります(ルール作成時の指定方法と同様です)。.
番号でUFWルールを削除する
UFWルールを番号に基づいて削除するには、まずすべてのファイアウォールルールの番号付きリストを取得する必要があります。UFWステータスコマンドには、各ルールの横に番号を表示するオプションがあります(以下を参照)。
sudo ufw status numberedNumbered Output:
Status: active
To Action From
-- ------ ----
[ 1] 22 ALLOW IN 15.15.15.0/24
[ 2] 80 ALLOW IN Anywhereポート 80 (HTTP) 接続を許可するルール #2 を削除する場合は、次のように UFW 削除コマンドで指定できます。
sudo ufw delete 2Output
Deleting:
allow 80
Proceed with operation (y|n)? y
Rule deleted確認メッセージが表示され、HTTP接続を許可するルール2を削除します。IPv6が有効になっている場合は、対応するIPv6ルールも削除する必要があることに注意してください。.
名前でUFWルールを削除する
ルール番号の代わりに、人間が判読できる名前でルールを参照することもできます。名前は、ルールの種類(通常は許可または拒否)と、ルールが対象とするサービス名またはポート番号、またはアプリケーションプロファイル名(使用されている場合)によって決まります。例えば、以前に有効になっていた「Apache Full」というアプリケーションプロファイルの許可ルールを削除する場合は、次のコマンドを使用します。
sudo ufw delete allow "Apache Full"Output
Rule deleted
Rule deleted (v6)
削除コマンドは、名前またはポートでサービスを参照して作成されたルールに対しても同様に機能します。例えば、以前にHTTP接続を許可するルールを作成した場合、 sudo ufw で http を許可する ルールは次のように削除できます。
sudo ufw delete allow httpOutput
Rule deleted
Rule deleted (v6)ルールを指定するときにサービス名とポート番号は交換可能であるため、allow http の代わりに allow 80 という同じルールを参照することもできます。
sudo ufw delete allow http
Output
Rule deleted Rule deleted (v6)ルールを指定するときにサービス名とポート番号は交換可能であるため、allow http の代わりに allow 80 という同じルールを参照することもできます。
sudo ufw delete allow 80Output
Rule deleted
Rule deleted (v6)名前で UFW ルールを削除すると、IPv4 ルールと IPv6 ルールの両方 (存在する場合) が削除されます。.
ステップ8 — UFWのステータスとルールを確認する
いつでも次のコマンドで UFW のステータスを確認できます。
sudo ufw status verboseUFW が無効になっている場合 (デフォルト)、次のような画面が表示されます。
Output
Status: inactiveUFWが有効になっている場合(手順3を実行した場合は有効になっているはずです)、出力には有効であることが示され、設定されているルールが一覧表示されます。例えば、ファイアウォールがどこからでも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 استفاده کنید.
مرحله ۹ – غیرفعال کردن یا تنظیم مجدد فایروال
اگر تصمیم دارید که از فایروال UFW استفاده نکنید، میتوانید آن را با این دستور غیرفعال کنید:
sudo ufw disableOutput
Firewall stopped and disabled on system startupUFWで作成したルールは無効になります。後で有効にする必要がある場合は、いつでも sudo ufw を有効にする 走る。.
すでに UFW ルールを設定しているが、最初からやり直す場合は、リセット コマンドを使用できます。
sudo ufw resetOutput
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が無効化され、以前に定義されたルールがすべて削除されます。これでUFWを最初から使い始めることができます。ただし、デフォルトポリシーを変更した場合、元の設定には戻らないことにご注意ください。.
結論
ファイアウォールは(少なくとも)SSH接続を許可するように設定されました。サーバーに必要なその他の接続は許可し、不要な接続は制限することで、サーバーの機能とセキュリティを維持してください。.
一般的なUFW設定の詳細については、チュートリアルを参照してください。
UFW の基本: Linux セキュリティのための一般的なファイアウォールルールとコマンド
それをチェックしてください。.









