ufw – Ubuntuファイアウォールの有効化・ポート許可・確認コマンド一覧

コマンドリファレンス

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 ARGS30秒間に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確認プロンプトを省略して実行(resetdelete NUMと併用)
-h, --helpヘルプを表示
--versionバージョン情報を表示

Ubuntuでの初期セットアップ手順

新規のUbuntuサーバー(特にVPSなど)でファイアウォールを初めて設定する場合の推奨手順です。順番を守らないとSSH接続が切断される可能性があります。

1. IPv6が有効になっているか確認する

説明: サーバーがIPv6を使う場合、/etc/default/ufwIPV6=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/tcp80/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/ufwIPV6 設定(Ubuntuの既定はyes)で有効/無効を切り替えられます。
  • ポートを複数指定する場合(例: 80,443,8080:8090)は1ルールにつき最大15ポート分(範囲は2ポート分としてカウント)までという制限があります。
  • クラウドサーバーでは、ufwとは別にクラウド事業者側のセキュリティグループ/ファイアウォールでもポート制御されていることが多く、両方の設定を確認する必要があります。

参考

Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント