ufw(Uncomplicated Firewall)は、Ubuntu に標準搭載されているファイアウォール管理コマンドです。
内部では iptables/nftables を使いますが、複雑なルールを覚えなくても allow / deny といった直感的なコマンドでポート制御やアクセス制御ができます。
本記事では Ubuntu で ufw を安全に有効化する手順から、主なコマンド・オプション、実行例、SSH で締め出されないための注意点までまとめます。
結論:Ubuntuでufwを安全に有効化する最短手順
ufw enable を先に実行して SSH 接続が拒否されると、リモートサーバーでは操作不能になります。必ず SSH を許可してから有効化してください。
# 1. 受信はデフォルトで拒否、送信はデフォルトで許可
sudo ufw default deny incoming
sudo ufw default allow outgoing
# 2. SSHを許可(ここを飛ばして有効化すると接続できなくなる)
sudo ufw allow OpenSSH
# 3. 有効化
sudo ufw enable
# 4. 状態を確認
sudo ufw status verbose
SSH のポート番号を 22 番から変更している場合は allow OpenSSH ではなく、実際に使っているポート番号を許可してください(SSH ポートの変更方法を参照)。
構文(Syntax)
ufw [--dry-run] COMMAND
# ルール追加の基本形(簡易構文)
ufw [--dry-run] allow|deny|reject|limit [in|out] [PORT[/PROTOCOL] | APPNAME]
# ルール追加の詳細構文(送信元/宛先まで指定)
ufw [--dry-run] allow|deny|reject|limit [in|out [on INTERFACE]] [proto PROTOCOL]
[from ADDRESS [port PORT]] [to ADDRESS [port PORT]]
- 方向を省略すると受信(in)ルールとして扱われます。
- 状態を変更する操作(
enable/allow/resetなど)は基本的に root 権限(sudo)が必要です。 --dry-runを先頭に付けると、実際には変更せずに適用結果だけを確認できます。
インストール状況の確認
ufw は Ubuntu に標準でプリインストールされているため、通常は追加インストール不要です。導入済みか確認するには次のコマンドを使います。
dpkg -l ufw
出力例(検証環境: Ubuntu 24.04 LTS):
ii ufw 0.36.2-6 all program for managing a Netfilter firewall
もし未導入だった場合や、最小構成イメージなどで削除されている場合は次のコマンドで導入できます。
sudo apt update
sudo apt install ufw
主なコマンド一覧
| コマンド | 説明 | 使用例 |
|---|---|---|
enable | ファイアウォールを有効化し、起動時にも自動適用 | sudo ufw enable |
disable | ファイアウォールを無効化 | sudo ufw disable |
reload | ファイアウォールを再読み込み | sudo ufw reload |
default allow|deny|reject DIR | 指定方向(incoming/outgoing/routed)のデフォルトポリシーを設定 | sudo ufw default deny incoming |
allow ARGS | 許可ルールを追加 | sudo ufw allow 22/tcp |
deny ARGS | 拒否ルールを追加(応答なしで無視) | sudo ufw deny 80/tcp |
reject ARGS | 拒否ルールを追加(送信元に拒否応答を返す) | sudo ufw reject 23/tcp |
limit ARGS | 30秒間に6回以上接続してきたIPを一時遮断(ブルートフォース対策) | sudo ufw limit ssh |
delete RULE|NUM | ルールを削除(ルール指定または番号指定) | sudo ufw delete allow 22/tcp |
insert NUM RULE | 指定した番号の位置にルールを挿入 | sudo ufw insert 1 deny from 1.2.3.4 |
status | 現在の有効/無効状態とルール一覧を表示 | sudo ufw status |
status numbered | ルールを削除用の番号付きで表示 | sudo ufw status numbered |
status verbose | デフォルトポリシーやログ設定を含めて詳細表示 | sudo ufw status verbose |
logging on|off|LEVEL | ログ記録の有効/無効・詳細度を設定 | sudo ufw logging on |
app list | 登録済みアプリケーションプロファイルを一覧表示 | sudo ufw app list |
app info PROFILE | 指定プロファイルが開くポート情報を表示 | sudo ufw app info OpenSSH |
reset | すべてのルールを削除し、インストール直後の状態に戻す | sudo ufw reset |
主なオプション一覧
| オプション | 説明 |
|---|---|
--dry-run | 実際には変更せず、適用結果だけを表示(本番反映前の確認に有効) |
--force | 確認プロンプトを省略して実行(resetやdelete NUMと併用) |
-h, --help | ヘルプを表示 |
--version | バージョン情報を表示 |
Ubuntuでの初期セットアップ手順
新規のUbuntuサーバー(特にVPSなど)でファイアウォールを初めて設定する場合の推奨手順です。順番を守らないとSSH接続が切断される可能性があります。
1. IPv6が有効になっているか確認する
説明: サーバーがIPv6を使う場合、/etc/default/ufwでIPV6=yesになっているか確認します(Ubuntuの既定値はyes)。
コマンド:
grep ^IPV6 /etc/default/ufw
出力例(検証環境):
IPV6=yes
2. デフォルトポリシーを設定する
説明: 受信は原則すべて拒否し、送信はすべて許可するのが一般的な安全側の初期設定です。
コマンド:
sudo ufw default deny incoming
sudo ufw default allow outgoing
3. SSHを許可する(有効化前に必須)
説明: アプリケーションプロファイルを使うと22番ポートをTCPで開けます。ポート番号を変更している場合は番号指定に読み替えてください。
コマンド:
# 標準の22番ポートを使っている場合
sudo ufw allow OpenSSH
# SSHのポートを変更している場合(例: 2222番)
sudo ufw allow 2222/tcp
4. 必要な他のサービスも許可する
説明: Webサーバーを動かす場合はHTTP/HTTPSも合わせて許可します。
コマンド:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
5. 有効化して状態を確認する
説明: enable実行時は確認プロンプトが出ます。SSHセッションが切断される可能性がある旨の警告が表示されるので、事前にSSHルールを許可済みであることを確認してから進めてください。
コマンド:
sudo ufw enable
出力例:
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
続けてstatus verboseでポリシーとルールが意図通りか確認します。
sudo ufw status verbose
出力例:
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
OpenSSH ALLOW IN Anywhere
80/tcp ALLOW IN Anywhere
443/tcp ALLOW IN Anywhere
OpenSSH (v6) ALLOW IN Anywhere (v6)
80/tcp (v6) ALLOW IN Anywhere (v6)
443/tcp (v6) ALLOW IN Anywhere (v6)
不安な場合は、enableの前に--dry-runを付けて適用結果を先に確認できます(sudo ufw --dry-run enable)。
実行例
特定のIPからのみSSHを許可する
説明: 全世界からのアクセスを許可せず、管理用の固定IPだけに絞る場合の書き方です。
コマンド:
sudo ufw allow from 203.0.113.10 to any port 22 proto tcp
ポート範囲をまとめて許可する
説明: 複数ポートを個別に指定せず範囲でまとめて許可できます。プロトコル指定は必須です。
コマンド:
sudo ufw allow 6000:6100/tcp
ブルートフォース対策でSSHを制限する
説明: 同一IPから30秒間に6回以上の接続があった場合、一時的に遮断します。
コマンド:
sudo ufw limit ssh
番号付きでルールを確認し、番号指定で削除する
説明: ルールが増えてくるとstatus numberedで番号を確認してからdeleteする方が安全です。
コマンド:
sudo ufw status numbered
出力例:
Status: active
To Action From
-- ------ ----
[ 1] OpenSSH ALLOW IN Anywhere
[ 2] 80/tcp ALLOW IN Anywhere
[ 3] 443/tcp ALLOW IN Anywhere
3番のルールだけを削除する場合:
sudo ufw delete 3
IPv4/IPv6が対になったルール(80/tcpと80/tcp (v6)など)を番号指定で消すと片方しか消えません。両方まとめて消したい場合はsudo ufw delete allow 80/tcpのようにルール指定で削除してください。
アプリケーションプロファイルで許可する
説明: ポート番号を覚えていなくても、登録済みプロファイル名で許可できます。
コマンド:
sudo ufw app list
sudo ufw app info OpenSSH
sudo ufw allow OpenSSH
app listの出力例(Nginxなどを導入している場合はそのプロファイルも表示されます):
Available applications:
OpenSSH
ログを有効化して/var/log/ufw.logで確認する
説明: 不審なアクセスの調査やポートスキャンの検知に利用します。
コマンド:
sudo ufw logging on
sudo tail -f /var/log/ufw.log
エラー例:一般ユーザーで実行した場合
説明: sudoなしで状態変更・確認系のサブコマンドを実行すると権限エラーになります。
コマンド:
ufw status
出力例(検証環境で実行した結果):
ERROR: You need to be root to run this script
対処: sudoを付けて実行してください。
よくある質問(FAQ)
ufwはUbuntuに標準インストールされている?
はい。Ubuntuの通常インストールではufwパッケージが最初から入っています。未導入の場合はsudo apt install ufwで導入できます。ただし初期状態では無効(inactive)なので、使うには自分でenableする必要があります。
ufwとiptables・firewalldの違いは?
iptablesはLinuxカーネルのパケットフィルタリング機能を直接操作する低レベルなコマンドで、柔軟な反面ルール記述が複雑です。ufwはそのiptables/nftablesを簡単に扱うためのフロントエンドで、Ubuntu/Debian系の既定ツールです。firewalldは同様の位置づけのツールですが、主にRHEL/CentOS/Fedora系で使われます。
ufw enableを実行したらSSHで接続できなくなった
SSHのポートを許可する前にenableし、デフォルトポリシーがdeny incomingになっている場合に発生します。リモートSSHでは復旧できないため、クラウド事業者のコンソール(シリアルコンソール/VNCなど)からログインし、sudo ufw allow OpenSSH(またはsudo ufw disable)を実行して復旧してください。同じ事態を避けるため、本記事の「Ubuntuでの初期セットアップ手順」の順番を守ることを推奨します。
ファイアウォールを一時的に無効化するには?
sudo ufw disableで無効化できます。ルール自体は保持されるため、再度sudo ufw enableすれば同じ設定で有効化されます。設定ごとすべて削除してやり直したい場合はsudo ufw resetを使います。
denyとrejectはどう使い分ける?
denyはパケットを黙って破棄し、送信元には何も応答しません。rejectは拒否応答(ICMP到達不能など)を返すため、相手に「拒否されている」ことが伝わります。攻撃者に情報を与えたくない通常の運用ではdeny、意図的に拒否を通知したい内部向けサービスなどではrejectを使います。
ログはどこで確認できる?
sudo ufw logging onで有効化すると、/var/log/ufw.log(rsyslog環境の場合)に記録されます。sudo tail -f /var/log/ufw.logでリアルタイムに確認できます。
関連コマンド
iptables: ufwが内部的に利用する、より低レベルなパケットフィルタリングコマンド。詳細はiptablesの解説記事を参照。firewalld: RedHat系で使われるファイアウォール管理ツール。詳細はfirewalldの解説記事を参照。ssh: リモート接続の基本コマンド。ufw設定前後の接続確認に使う。詳細はsshコマンドの解説記事を参照。- SSHポート変更 : 22番以外のポートを使う場合はufwの許可ポートも合わせて変更する。詳細はSSHポートの変更方法を参照。
備考
- UFW は内部的に iptables/nftables を利用しているため、同時に直接操作すると競合する場合があります。
- SSH を利用しているサーバーで
ufw enableを実行する際は、必ずSSHのポートを許可してから有効化すること。 - IPv6 に対応しており、
/etc/default/ufwのIPV6設定(Ubuntuの既定はyes)で有効/無効を切り替えられます。 - ポートを複数指定する場合(例:
80,443,8080:8090)は1ルールにつき最大15ポート分(範囲は2ポート分としてカウント)までという制限があります。 - クラウドサーバーでは、ufwとは別にクラウド事業者側のセキュリティグループ/ファイアウォールでもポート制御されていることが多く、両方の設定を確認する必要があります。
参考
- Ubuntu公式コミュニティドキュメント: https://help.ubuntu.com/community/UFW
- Ubuntu Server公式ドキュメント(Firewall): https://ubuntu.com/server/docs/how-to/security/firewalls/
- manページ: https://man7.org/linux/man-pages/man8/ufw.8.html
- 検証環境: Ubuntu 24.04 LTS / ufw 0.36.2

コメント