ufw(Uncomplicated Firewall)
『ufw』(Uncomplicated Firewall)は Ubuntu 系 Linux ディストリビューションに標準搭載された、簡易ファイアウォール管理ツールです。低レベルの iptables をラップしており、ufw allow / ufw deny / ufw status などの直感的なコマンドでパケットフィルタリングルールを管理できます。初期状態では無効(inactive)になっているため、設定後に ufw enable で有効化します。誤って SSH 接続を遮断しないよう、有効化の前に必ず SSH ポートの許可ルールを追加してください。
構文
# -----------------------------------------------
# ufw の有効化 / 無効化
# -----------------------------------------------
# ufw enable
# → ファイアウォールを有効化し、ルールを適用します
# → 次回起動時も自動的に有効になります
# 例: sudo ufw enable
# ufw disable
# → ファイアウォールを無効化します(ルールは保持されます)
# 例: sudo ufw disable
# ufw reload
# → ルールを再読み込みします(設定変更後に反映)
# 例: sudo ufw reload
# ufw reset
# → すべてのルールを削除しデフォルト状態に戻します
# → ufw disable も同時に実行されます
# 例: sudo ufw reset
# -----------------------------------------------
# ステータス確認
# -----------------------------------------------
# ufw status
# → ファイアウォールの有効/無効と登録ルールを表示します
# 例: sudo ufw status
# ufw status verbose
# → デフォルトポリシー・登録ルール・ロギングレベルを詳細表示します
# 例: sudo ufw status verbose
# ufw status numbered
# → ルールに番号を付けて表示します(削除時に番号を使えます)
# 例: sudo ufw status numbered
# -----------------------------------------------
# ルールの追加(許可)
# -----------------------------------------------
# ufw allow {ポート番号}
# → 指定したポートへの接続を TCP/UDP 両方で許可します
# 例: sudo ufw allow 80
# ufw allow {ポート番号}/{プロトコル}
# → TCP または UDP を指定して許可します
# 例: sudo ufw allow 22/tcp
# ufw allow {サービス名}
# → /etc/services に登録されたサービス名で許可します
# 例: sudo ufw allow ssh
# 例: sudo ufw allow http
# 例: sudo ufw allow https
# ufw allow from {IPアドレス}
# → 特定の IP アドレスからのすべての接続を許可します
# 例: sudo ufw allow from 203.0.113.10
# ufw allow from {IPアドレス} to any port {ポート番号}
# → 特定の IP アドレスから特定ポートへの接続のみ許可します
# 例: sudo ufw allow from 203.0.113.10 to any port 22
# ufw allow from {CIDR}
# → サブネット(CIDR表記)からの接続を許可します
# 例: sudo ufw allow from 192.168.1.0/24
# -----------------------------------------------
# ルールの追加(拒否・却下)
# -----------------------------------------------
# ufw deny {ポート番号}
# → 接続を拒否します(送信元にパケット到達不能を返しません)
# 例: sudo ufw deny 23
# ufw reject {ポート番号}
# → 接続を却下します(送信元に拒否通知を返します)
# 例: sudo ufw reject 23
# -----------------------------------------------
# ルールの削除
# -----------------------------------------------
# ufw delete {ルール番号}
# → ufw status numbered で確認した番号でルールを削除します
# 例: sudo ufw delete 3
# ufw delete allow {ポート番号}
# → 追加時と同じ書き方でルールを削除します
# 例: sudo ufw delete allow 80
# -----------------------------------------------
# レートリミット(ブルートフォース対策)
# -----------------------------------------------
# ufw limit {ポート番号}/{プロトコル}
# → 30秒間に6回以上接続を試みた IP アドレスを自動的にブロックします
# → SSH のブルートフォース攻撃対策に有効です
# 例: sudo ufw limit 22/tcp
# -----------------------------------------------
# ロギング
# -----------------------------------------------
# ufw logging {レベル}
# → ログの記録レベルを設定します
# → レベル: off / low / medium / high / full
# 例: sudo ufw logging low
構文一覧
| コマンド | 説明 |
|---|---|
ufw enable | ファイアウォールを有効化します。次回起動時も自動的に適用されます。 |
ufw disable | ファイアウォールを無効化します。ルールは保持されます。 |
ufw reload | ルールを再読み込みして設定変更を反映させます。 |
ufw reset | すべてのルールを削除してデフォルト状態に戻します。 |
ufw status | ファイアウォールの有効状態と登録ルールを表示します。 |
ufw status verbose | デフォルトポリシー・ルール・ロギングレベルを詳細表示します。 |
ufw status numbered | ルールに番号を付けて表示します。削除時に番号で指定できます。 |
ufw allow {ポート} | 指定したポートへの接続を TCP/UDP 両方で許可します。 |
ufw allow {ポート}/{プロトコル} | TCP または UDP を指定してポートを許可します。 |
ufw allow {サービス名} | ssh・http・https などサービス名で許可します。 |
ufw allow from {IP} | 特定の IP アドレスからのすべての接続を許可します。 |
ufw allow from {IP} to any port {ポート} | 特定の IP アドレスから特定ポートへの接続のみ許可します。 |
ufw allow from {CIDR} | サブネット(CIDR 表記)からの接続を許可します。 |
ufw deny {ポート} | 接続を拒否します。送信元にパケット到達不能を返しません。 |
ufw reject {ポート} | 接続を却下します。送信元に拒否通知(RST)を返します。 |
ufw delete {番号} | ufw status numbered で確認した番号でルールを削除します。 |
ufw delete allow {ポート} | 追加時と同じ書き方でルールを削除します。 |
ufw limit {ポート}/{プロトコル} | 30 秒間に 6 回以上接続を試みた IP を自動ブロックします。SSH のブルートフォース対策に有効です。 |
ufw default deny incoming | 受信パケットのデフォルトポリシーを「拒否」に設定します。 |
ufw default allow outgoing | 送信パケットのデフォルトポリシーを「許可」に設定します。 |
ufw logging {レベル} | ログの記録レベルを設定します(off / low / medium / high / full)。 |
使用例
# ----------------------------------------------- # 初期設定フロー # ※ SSH 接続中の場合は必ず SSH 許可を先に行います # ----------------------------------------------- # デフォルトポリシーを設定します # 受信はすべて拒否、送信はすべて許可にするのが基本の考え方です sudo ufw default deny incoming sudo ufw default allow outgoing # SSH(ポート 22/tcp)を許可します # この手順を先に行わないと ufw enable 後に SSH 接続が切れます sudo ufw allow ssh # Web サーバー用に HTTP と HTTPS を許可します sudo ufw allow http sudo ufw allow https # ファイアウォールを有効化します sudo ufw enable # 設定内容を確認します sudo ufw status verbose
実行するコマンドは次の通りです。
$ sudo ufw status verbose Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), disabled (routed) New profiles: skip To Action From -- ------ ---- 22/tcp ALLOW IN Anywhere 80/tcp ALLOW IN Anywhere 443 ALLOW IN Anywhere 22/tcp (v6) ALLOW IN Anywhere (v6) 80/tcp (v6) ALLOW IN Anywhere (v6) 443 (v6) ALLOW IN Anywhere (v6)
特定の IP アドレスからのみ SSH 接続を許可する
# ----------------------------------------------- # 草薙京のローカル拠点(203.0.113.10)からのみ # SSH を許可し、それ以外からの SSH は拒否します # ----------------------------------------------- # 既存の「すべての SSH 許可」ルールを削除します sudo ufw delete allow ssh # 草薙京の IP アドレスからのみ SSH を許可します sudo ufw allow from 203.0.113.10 to any port 22 # ルールを番号付きで確認します sudo ufw status numbered
実行するコマンドは次の通りです。
$ sudo ufw status numbered
Status: active
To Action From
-- ------ ----
[ 1] 22/tcp ALLOW IN 203.0.113.10
[ 2] 80/tcp ALLOW IN Anywhere
[ 3] 443 ALLOW IN Anywhere
[ 4] 80/tcp (v6) ALLOW IN Anywhere (v6)
[ 5] 443 (v6) ALLOW IN Anywhere (v6)
社内 LAN(八神庵の拠点)のサブネットから DB ポートを許可する
# ----------------------------------------------- # 八神庵の拠点サブネット(192.168.10.0/24)から # MySQL(3306)への接続のみ許可します # ----------------------------------------------- # サブネット CIDR 表記で MySQL ポートを許可します sudo ufw allow from 192.168.10.0/24 to any port 3306 # 不要になった場合は番号で削除します sudo ufw status numbered # 例: ルール番号が 4 だった場合 sudo ufw delete 4
SSH のブルートフォース攻撃をレートリミットで防ぐ
# ----------------------------------------------- # テリーのサーバーを不審なアクセスから守ります # 30秒間に6回以上の接続試行を自動ブロックします # ----------------------------------------------- # allow の代わりに limit を使って SSH を許可します sudo ufw limit 22/tcp # ログを有効にして不審なアクセスを記録します sudo ufw logging medium # ログは /var/log/ufw.log に記録されます # sudo tail -f /var/log/ufw.log
実行するコマンドは次の通りです。
$ sudo ufw status verbose Status: active Logging: on (medium) Default: deny (incoming), allow (outgoing), disabled (routed) New profiles: skip To Action From -- ------ ---- 22/tcp LIMIT IN Anywhere 80/tcp ALLOW IN Anywhere 443 ALLOW IN Anywhere 22/tcp (v6) LIMIT IN Anywhere (v6) 80/tcp (v6) ALLOW IN Anywhere (v6) 443 (v6) ALLOW IN Anywhere (v6)
概要
『ufw』は Ubuntu 系 Linux でファイアウォールを手軽に管理するためのフロントエンドツールです。内部では iptables(IPv4)と ip6tables(IPv6)を操作しており、複雑なコマンド体系を持つ iptables を意識せずにルールを設定できます。ufw enable を実行すると systemctl によって ufw.service が自動起動に登録されるため、サーバー再起動後もルールが維持されます。基本の運用は「デフォルト deny incoming → 必要なポートを allow → enable」という流れです。SSH 接続中に設定する場合は、必ず SSH 許可ルールを先に追加してから enable してください。誤った設定でロックアウトした場合は sshd_config の確認やコンソール接続が必要になります。RHEL・AlmaLinux 系では代わりに firewalld が標準ファイアウォールとして採用されており、firewall-cmd コマンドで操作します。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。