UbuntuのUFWファイアウォール設定【ポート開放・閉鎖手順】

システム管理

この記事のポイント

  • Ubuntu 24.04 の UFW は ufw 0.36.2-6 で、インストール直後は /etc/ufw/ufw.confENABLED=no(無効)です
  • SSH を許可してから ufw enable する順番を守らないと、VPS に SSH で接続できなくなります
  • ポート開放は ufw allow 80/tcp、削除は ufw delete allow 80/tcp で行います(実測で確認)
  • ufw show added で追加済みルール一覧をいつでも確認できます(実測: ubuntu:24.04)
  • 「22.04 は iptables-legacy、24.04 は nftables」とよく言われますが、実測すると両方とも既に iptables-nft(nftablesバックエンド)でした

UbuntuでVPSを公開するとき、最初にやるべきセキュリティ設定がファイアウォール(UFW)です。結論から言うと、ufw allow sshufw enable の順番さえ守れば、数コマンドで安全な状態を作れます。この記事では、Ubuntu 24.04 LTS の公式 Docker イメージで実際に UFW コマンドを動かした実出力を載せています。架空の結果ではなく、本物のコマンド実行結果です(2026-06-15 実測)。

ufw enable 後の Status: active 実出力(Ubuntu 24.04 実測)
ufw enable 後の Status: active 実出力(Ubuntu 24.04 実測)

目次

  1. UFWとは何か
  2. UFWのインストールと初期確認
  3. 基本設定:デフォルトポリシーと SSH 許可
  4. ポート開放(allow)とブロック(deny)
  5. ルールの削除
  6. /etc/ufw/ の構成
  7. Ubuntu 22.04 vs 24.04 バージョン比較
  8. よくあるエラーと対処法
  9. まとめ

UFWとは何か

UFW(Uncomplicated Firewall)は、Linux カーネルの netfilter(パケットフィルタリング機構)を、シンプルなコマンドで操作するためのフロントエンドツールです。Ubuntuに標準で含まれており、追加料金なしで使えます。

VPS でサーバーを公開する際、「外から来る通信のうち、必要なポートだけ通す」という設定を数コマンドで実現できます。正直、iptables を直接書くのは初学者には難しいのですが、UFW なら ufw allow 80/tcp の一行で HTTP を開放できます。

ツール 難易度 用途 Ubuntu での状態
UFW ★☆☆(簡単) 個人VPS・サーバー入門 標準で導入可・デフォルト無効
iptables ★★★(高度) 本番環境・細かな制御 UFW の内部で動く
nftables ★★★(高度) 新世代のパケットフィルタ iptables-nft 経由のバックエンド

UFWのインストールと初期確認

手順1:パッケージを更新してインストールする

Ubuntu 24.04 LTS には UFW が含まれていますが、ここでは最小構成のイメージから一度 apt install して挙動を確認しました。実際にコンテナで動かすと、UFW は iptablesnftables も同時にインストールします




ubuntu@vps-server: ~
$ sudo apt install ufw
The following NEW packages will be installed:
iptables nftables ufw
Setting up nftables (1.0.9-1ubuntu0.1) …
Setting up iptables (1.8.10-3ubuntu2) …
Setting up ufw (0.36.2-6) …
apt install ufw とバージョン確認(Ubuntu 24.04 実測)
apt install ufw とバージョン確認(Ubuntu 24.04 実測)

インストール後、バージョンを確認します。Ubuntu 24.04 LTS では ufw 0.36.2(パッケージ 0.36.2-6)が入りました(2026-06-15 実測)。




ubuntu@vps-server: ~
$ ufw –version
ufw 0.36.2
Copyright 2008-2023 Canonical Ltd.
$ cat /etc/ufw/ufw.conf
ENABLED=no
LOGLEVEL=low

注意

インストール直後は /etc/ufw/ufw.confENABLED=no(無効)です。この状態ではファイアウォールは機能していません。有効化する前に必ず SSH を許可してください(次のステップで説明します)。

基本設定:デフォルトポリシーと SSH 許可

UFW を有効にする前に、2つのことをやっておきます。

  1. デフォルトポリシーを設定する(受信は全拒否、送信は全許可)
  2. SSH のポート(22番)を許可する

ここだけは順番を間違えると動きません。SSH 許可の前に ufw enable すると、VPS に SSH で接続できなくなります(コンソールからしか復旧できなくなります)。

手順2:デフォルトポリシーを設定する




ubuntu@vps-server: ~
$ sudo ufw default deny incoming
Default incoming policy changed to ‘deny’
(be sure to update your rules accordingly)
$ sudo ufw default allow outgoing
Default outgoing policy changed to ‘allow’
(be sure to update your rules accordingly)

設定すると /etc/default/ufw の値が書き換わります。実際に grep で中身を確認した実測値が以下です。




ubuntu@vps-server: ~
$ grep ‘^DEFAULT_’ /etc/default/ufw
DEFAULT_INPUT_POLICY=”DROP”
DEFAULT_OUTPUT_POLICY=”ACCEPT”
DEFAULT_FORWARD_POLICY=”DROP”
DEFAULT_APPLICATION_POLICY=”SKIP”

手順3:SSH(ポート22)を許可してから有効化する

SSH を許可してから ufw enable します。実際に --privileged コンテナで有効化まで実行すると、Status: active が取得できました(実測)。




ubuntu@vps-server: ~
$ sudo ufw allow ssh
Rules updated
Rules updated (v6)
$ sudo ufw enable
Firewall is active and enabled on system startup
$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip

ufw allow sshufw allow 22/tcp と同じ意味です。/etc/services を確認すると ssh 22/tcp と定義されており、Ubuntu 24.04 の SSH バージョンは OpenSSH_9.6p1 Ubuntu-3ubuntu13.16(OpenSSL 3.0.13、実測)でした。

著者アイコン
著者アイコン

「ufw enable したら SSH が切れた」という事故を防ぐため、ufw allow sshufw show added で確認 → ufw enable の順番を徹底してください。実際にコンテナで試したときも、この順番なら 22/tcp が残った状態で有効化できました。

ポート開放(allow)とブロック(deny)

手順4:HTTPとHTTPSを開放する

Web サーバーを公開する場合、ポート 80(HTTP)と 443(HTTPS)を開放します。追加したルールは ufw show added で一覧確認できます(実測)。




ubuntu@vps-server: ~
$ sudo ufw allow 80/tcp
Rules updated
Rules updated (v6)
$ sudo ufw allow 443/tcp
Rules updated
Rules updated (v6)
$ sudo ufw show added
Added user rules (see ‘ufw status’ for running firewall):
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
デフォルトポリシー設定とルール追加(Ubuntu 24.04 実測)
デフォルトポリシー設定とルール追加(Ubuntu 24.04 実測)

ポート番号の指定形式

  • ufw allow 80/tcp — TCP ポート 80 だけ許可
  • ufw allow 80 — TCP と UDP 両方を許可(HTTP なら /tcp 指定推奨)
  • ufw allow 8000:8080/tcp — 範囲指定(8000〜8080 番)
  • ufw allow from 192.168.1.0/24 — 特定 IP からの接続のみ許可

手順5:特定ポートをブロックする(deny)

Telnet(23番)など不要なポートをブロックします。ufw deny 23/tcp を追加すると、ufw show added にも deny ルールが並びます。




ubuntu@vps-server: ~
$ sudo ufw deny 23/tcp
Rules updated
Rules updated (v6)
$ sudo ufw show added
Added user rules (see ‘ufw status’ for running firewall):
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw deny 23/tcp

denyreject の違いは、deny は無応答(パケットを drop)、reject は拒否メッセージを返すという点です。攻撃者にポートの存在を悟られにくいという意味では deny が無難です。

手順6:アプリケーションプロファイルで許可する

UFW にはアプリ名で許可する仕組みもあります。ただし、ここは実測して初めて分かった注意点があります。クリーンインストール直後は /etc/ufw/applications.d/ が空で、ufw app list には何も表示されません。




ubuntu@vps-server: ~
$ sudo ufw app list
Available applications:
# (何も表示されない=プロファイル未登録)

「Nginx Full」「OpenSSH」などのプロファイルは、それぞれのパッケージ(nginx / openssh-server)をインストールして初めて登録されます。Nginx を入れた後なら次のように使えます。




ubuntu@vps-server: ~
# nginx インストール後にプロファイルが登録される
$ sudo ufw allow ‘Nginx HTTP’
Rules updated
Rules updated (v6)

プロファイル名にスペースが含まれる場合は引用符で囲みます。「Nginx HTTP」はポート80のみ、「Nginx Full」はポート80と443の両方を許可します。

ルールの削除

手順7:ルールを削除する(2通りの方法)

開放したポートが不要になったときはルールを削除します。実際に ufw delete allow 80/tcp を実行し、削除前後を ufw show added で比較しました(実測)。

方法①:ルールを直接指定して削除(推奨)




ubuntu@vps-server: ~
$ sudo ufw delete allow 80/tcp
Rules updated
Rules updated (v6)
$ sudo ufw show added
Added user rules (see ‘ufw status’ for running firewall):
ufw allow 22/tcp
ufw allow 443/tcp
ufw delete によるルール削除の前後(Ubuntu 24.04 実測)
ufw delete によるルール削除の前後(Ubuntu 24.04 実測)

方法②:番号指定で削除

ufw status numbered で番号を確認してから削除します(番号が振られた状態は --privileged で有効化したコンテナで取得した実出力です)。




ubuntu@vps-server: ~
$ sudo ufw status numbered
Status: active

To Action From
[ 1] 22/tcp ALLOW IN Anywhere
[ 2] 80/tcp ALLOW IN Anywhere
[ 3] 443/tcp ALLOW IN Anywhere
[ 4] 22/tcp (v6) ALLOW IN Anywhere (v6)
[ 5] 80/tcp (v6) ALLOW IN Anywhere (v6)
[ 6] 443/tcp (v6) ALLOW IN Anywhere (v6)
$ sudo ufw delete 2
Deleting:
allow 80/tcp
Proceed with operation (y|n)? y
Rules updated

注意:番号は動的に変わる

番号指定で削除すると、残りのルールの番号が繰り上がります。続けて番号指定で削除する場合は、その都度 ufw status numbered で番号を確認してください。

/etc/ufw/ の構成

UFW の設定ファイルは /etc/ufw/ ディレクトリに格納されています。実際に ls で確認した実測結果が以下です(ubuntu:24.04)。




ubuntu@vps-server: ~
$ ls /etc/ufw/
after.init after.rules after6.rules applications.d
before.init before.rules before6.rules sysctl.conf
ufw.conf user.rules user6.rules
/etc/ufw/ の構成と ufw.conf / app list(Ubuntu 24.04 実測)
/etc/ufw/ の構成と ufw.conf / app list(Ubuntu 24.04 実測)
ファイル / ディレクトリ 役割
ufw.conf UFW の有効/無効と基本設定(ENABLEDLOGLEVEL など)
user.rules ユーザーが ufw allow/deny で追加したルール(IPv4)
user6.rules ユーザーが追加したルール(IPv6)
before.rules ユーザールールより前に処理されるルール(ループバック許可など)
after.rules ユーザールールの後に処理されるルール(LOG など)
applications.d/ アプリプロファイルの格納先(初期は空。パッケージ導入で登録)
sysctl.conf カーネルパラメータの設定(IPv6フォワーディングなど)

Ubuntu 22.04 vs 24.04 バージョン比較

Docker コンテナで両バージョンを実際に動かし、UFW と関連パッケージのバージョン・バックエンドを比較しました。

Ubuntu 22.04 vs 24.04 UFWとバックエンド比較(実測)
Ubuntu 22.04 vs 24.04 UFWとバックエンド比較(実測)

よく「Ubuntu 24.04 で UFW のバックエンドが iptables-legacy から nftables に変わった」と説明されますが、これは正確ではありません。実際に update-alternatives --query iptables で確認すると、22.04 も 24.04 も既に /usr/sbin/iptables-nft(nftablesバックエンド)を指していました。legacy → nft の切り替えはもっと前のバージョンで済んでおり、22.04 と 24.04 の実質的な差は、UFW(0.36.1 → 0.36.2)と iptables(1.8.7 → 1.8.10)のバージョンアップです。




ubuntu@vps-server: ~
# Ubuntu 22.04 (Jammy) 実測
$ ufw –version | head -1
ufw 0.36.1
$ iptables –version
iptables v1.8.7 (nf_tables)
$ update-alternatives –query iptables | grep Value
Value: /usr/sbin/iptables-nft
# Ubuntu 24.04 (Noble) 実測
$ ufw –version | head -1
ufw 0.36.2
$ iptables –version
iptables v1.8.10 (nf_tables)
$ update-alternatives –query iptables | grep Value
Value: /usr/sbin/iptables-nft

いずれにせよ、UFW のコマンド操作(ufw allow など)はバージョンが違っても同じです。内部で nftables を使っていることを意識する必要はほとんどありません。

よくあるエラーと対処法

①「ERROR: Could not find a profile matching ‘nginx’」

Nginx をインストールする前に ufw allow nginx を実行しようとすると出るエラーです。前述のとおり、プロファイルはパッケージ導入後に登録されます。




ubuntu@vps-server: ~
$ sudo ufw allow nginx
ERROR: Could not find a profile matching ‘nginx’
# 対処: 先に Nginx をインストールするか、ポート番号で指定する
$ sudo ufw allow 80/tcp
Rules updated

②「WARN: initcaps」と Permission denied(Docker環境)

これは実測中に実際に遭遇したエラーです。通常(非 privileged)の Docker コンテナで ufw status やルール変更を行うと、iptables のカーネル操作権限が無いため次のように出ます




ubuntu@container: ~
$ sudo ufw status
ERROR: problem running iptables: iptables v1.8.10 (nf_tables):
Could not fetch rule set generation id: Permission denied (you must be root)
$ sudo ufw delete allow 80/tcp
WARN: initcaps
Rules updated # ルール定義自体は更新される

面白いのは、ルールの追加・削除(ufw show added に反映される定義)は権限が無くても更新される点です。実際にコンテナを --privileged で起動し直すと、同じコマンドでエラーが消え Status: active まで取得できました。本番の VPS(Vultr・DigitalOcean・Linode など)では root 権限で動くため、このエラーは発生しません

③ 有効化したのにシステム再起動で無効に戻る

ufw enableufw.confENABLEDyes に書き換え、起動時の自動適用も設定します。万一サービスとして有効になっていない場合は systemctl enable ufw で自動起動を明示してください。




ubuntu@vps-server: ~
$ sudo systemctl enable ufw
Synchronizing state of ufw.service with SysV service script…
Executing: /usr/lib/systemd/systemd-sysv-install enable ufw

まとめ

Ubuntu 24.04 の UFW ファイアウォール設定について、公式 Docker イメージ(ubuntu:24.04 / ubuntu:22.04)で実際にコマンドを動かして確認しました。

  • Ubuntu 24.04 の UFW バージョンは 0.36.2-6(Ubuntu 22.04 は 0.36.1)
  • インストール直後は無効(/etc/ufw/ufw.confENABLED=no
  • 設定順番は ufw default deny incomingufw allow sshufw enable
  • ufw show added で追加済みルールをいつでも確認できる
  • ルール削除は ufw delete allow 80/tcp(ルール指定)か ufw delete 番号(番号指定)
  • 22.04 と 24.04 はどちらも iptables-nft バックエンドで、UFW のコマンド操作は同じ
  • アプリプロファイルはパッケージ導入後に登録される(初期の app list は空)

本格的に VPS でサーバーを運用するなら、UFW の設定は必須スキルです。まず SSH を許可、次に必要なポートだけ開放するという「最小権限の原則」を守ることが、安全なサーバー運用の第一歩です。

SSH 側の設定(sshd_config の強化)まで合わせて行うと、より堅牢になります。UbuntuのSSH設定ガイドも参考にしてください。VPS を検討している方は、東京リージョンの有無とコストで選ぶとよいでしょう。

コメント

タイトルとURLをコピーしました