UFW(Uncomplicated Firewall)とは?Linuxで簡単にファイアウォール設定する方法

プログラミング・IT

Linuxサーバーを運用していると、「セキュリティのためにファイアウォールを設定しなきゃ」と思いますよね。

でも、伝統的なiptablesというツールは、コマンドが複雑で初心者には難しいんです。

そこで登場したのがUFW(Uncomplicated Firewall)。名前の通り「複雑じゃないファイアウォール」として開発されました。

今回は、Linuxで簡単にファイアウォールを設定できるUFWについて、インストールから実践的な使い方まで、初心者の方にも分かりやすく解説していきます。


スポンサーリンク
  1. UFWとは何か?
    1. iptablesをシンプルにするツール
    2. iptablesのフロントエンド
    3. Ubuntuで標準搭載
  2. なぜUFWが必要なのか?
    1. サーバーを守るセキュリティ対策
    2. 必要な通信だけを許可
    3. iptablesより学習しやすい
  3. UFWのインストール
    1. インストール済みか確認
    2. インストール方法
    3. 初期状態の確認
  4. 基本的な使い方
    1. UFWの有効化
    2. 状態の確認
    3. UFWの無効化
    4. リセット(初期化)
  5. デフォルトポリシーの設定
    1. 基本方針を決める
    2. ポリシーの種類
  6. ポートの許可と拒否
    1. ポート番号で指定
    2. サービス名で指定
    3. プロトコルの指定
    4. ポート範囲の指定
  7. IPアドレスによる制限
    1. 特定のIPアドレスから許可
    2. サブネット(ネットワーク範囲)で指定
    3. 特定のIPアドレスを拒否
    4. インターフェース(ネットワークカード)を指定
  8. アプリケーションプロファイル
    1. プロファイルの一覧表示
    2. プロファイルの詳細確認
    3. プロファイルで許可
    4. カスタムプロファイルの作成
  9. ルールの確認と削除
    1. ルール番号付きで表示
    2. ルールの削除
    3. すべてのルールを削除
  10. ログの設定と確認
    1. ログの有効化
    2. ログの確認
    3. ログの無効化
  11. 実用的な設定例
    1. Webサーバーの設定
    2. データベースサーバーの設定
    3. SSH + Webサーバー + メールサーバー
    4. 開発環境の設定
  12. レート制限(Rate Limiting)
    1. 連続アクセスの制限
    2. 既存のルールを変更
  13. トラブルシューティング
    1. UFWを有効化したらSSH接続が切れた
    2. ルールを追加しても反映されない
    3. ポートが開いているか確認
    4. IPv6を無効化したい
    5. ルールが多すぎて遅い
  14. よくある質問
    1. UFWとfirewalldの違いは?
    2. GUIツールはある?
    3. Dockerと一緒に使える?
    4. VPNサーバーとの併用は?
    5. 設定ファイルはどこ?
  15. まとめ:UFWでセキュアなサーバー環境を構築しよう

UFWとは何か?

iptablesをシンプルにするツール

UFW(Uncomplicated Firewall)は、Linuxのファイアウォール管理を簡単にするためのツールです。

2008年にUbuntuで標準採用され、現在では多くのLinuxディストリビューションで使われています。

ファイアウォールとは、外部からの不正なアクセスを防ぎ、許可した通信だけを通す「防火壁」のような仕組みです。

iptablesのフロントエンド

内部ではiptablesという強力なファイアウォールシステムを使っています。

iptablesの問題点:

# iptablesの例(複雑!)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -j DROP

UFWの場合(シンプル!):

# UFWの例
ufw allow 22

同じことを、ずっと分かりやすいコマンドで実行できます。

Ubuntuで標準搭載

標準搭載されているディストリビューション:

  • Ubuntu(すべてのバージョン)
  • Debian 10以降
  • Linux Mint
  • elementary OS

他のディストリビューションでも、簡単にインストールできます。


なぜUFWが必要なのか?

サーバーを守るセキュリティ対策

インターネットに接続されたサーバーは、常に攻撃のリスクにさらされています。

よくある攻撃:

  • 総当たり攻撃(ブルートフォース)
  • ポートスキャン
  • 脆弱性を狙った侵入
  • DDoS攻撃

ファイアウォールで不要なポートを閉じることで、これらの攻撃を防げます。

必要な通信だけを許可

サーバーには様々なサービスが動いていますが、すべてを外部に公開する必要はありません。

例:

  • Webサーバー:ポート80と443だけ開ける
  • SSHサーバー:ポート22だけ開ける
  • データベース:外部からはアクセス不可にする

UFWなら、この設定が簡単にできます。

iptablesより学習しやすい

iptablesは強力ですが、覚えることが多すぎます。

UFWは以下のメリットがあります:

  • 直感的なコマンド
  • 覚えるルールが少ない
  • 初心者でも使える
  • 設定ミスが起きにくい

UFWのインストール

インストール済みか確認

Ubuntuでは通常、最初からインストールされています。

確認コマンド:

ufw version

出力例:

ufw 0.36.1

バージョンが表示されれば、インストール済みです。

インストール方法

Ubuntu/Debian:

sudo apt update
sudo apt install ufw

CentOS/RHEL/AlmaLinux:

# EPELリポジトリを有効化
sudo yum install epel-release

# UFWをインストール
sudo yum install ufw

Fedora:

sudo dnf install ufw

Arch Linux:

sudo pacman -S ufw

初期状態の確認

インストール直後は、UFWは無効になっています。

状態確認:

sudo ufw status

出力:

Status: inactive

これは正常な状態です。設定を行ってから有効化します。


基本的な使い方

UFWの有効化

重要:SSH接続している場合の注意

リモートサーバーでUFWを有効化する前に、必ずSSH(ポート22)を許可してください。

そうしないと、自分自身を締め出してしまいます!

正しい手順:

# 1. まずSSHを許可
sudo ufw allow 22

# 2. その後に有効化
sudo ufw enable

確認メッセージ:

Command may disrupt existing ssh connections. Proceed with operation (y|n)?

yを入力してEnter。

結果:

Firewall is active and enabled on system startup

状態の確認

簡易表示:

sudo ufw status

出力例:

Status: active

To                         Action      From
--                         ------      ----
22                         ALLOW       Anywhere
22 (v6)                    ALLOW       Anywhere (v6)

詳細表示:

sudo ufw status verbose

出力例:

Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22                         ALLOW IN    Anywhere
22 (v6)                    ALLOW IN    Anywhere (v6)

UFWの無効化

一時的に無効化したい場合:

sudo ufw disable

結果:

Firewall stopped and disabled on system startup

設定は保持されるので、再度有効化すれば同じルールが適用されます。

リセット(初期化)

すべての設定をクリアして初期状態に戻します。

sudo ufw reset

警告:
すべてのルールが削除されるので注意してください。


デフォルトポリシーの設定

基本方針を決める

デフォルトポリシーは、「ルールに該当しない通信をどう扱うか」を決めます。

推奨設定:

# 外部からの接続は拒否
sudo ufw default deny incoming

# 外部への接続は許可
sudo ufw default allow outgoing

この設定で、必要なポートだけを個別に許可する形になります。

ポリシーの種類

incoming(着信):
外部からサーバーへの接続。

outgoing(発信):
サーバーから外部への接続。

routed(ルーティング):
サーバーを経由する通信(通常は無効でOK)。

アクション:

  • allow:許可
  • deny:拒否(応答なし)
  • reject:拒否(応答あり)

ポートの許可と拒否

ポート番号で指定

ポートを許可:

# HTTPを許可(ポート80)
sudo ufw allow 80

# HTTPSを許可(ポート443)
sudo ufw allow 443

# SSHを許可(ポート22)
sudo ufw allow 22

ポートを拒否:

sudo ufw deny 3306  # MySQL

サービス名で指定

一般的なサービスは、名前でも指定できます。

sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https

利用可能なサービス名:
/etc/servicesファイルに定義されています。

cat /etc/services | grep -E "^(http|ssh|ftp)"

プロトコルの指定

TCPとUDPを明示的に指定できます。

# TCP(デフォルト)
sudo ufw allow 80/tcp

# UDP
sudo ufw allow 53/udp

# 両方
sudo ufw allow 123

例:

# DNS(UDPとTCP両方)
sudo ufw allow 53/tcp
sudo ufw allow 53/udp

ポート範囲の指定

複数の連続したポートをまとめて許可できます。

# ポート6000から6010まで許可
sudo ufw allow 6000:6010/tcp

IPアドレスによる制限

特定のIPアドレスから許可

# 192.168.1.100からの接続を許可
sudo ufw allow from 192.168.1.100

特定ポートへのアクセスを許可:

# 192.168.1.100からポート22への接続を許可
sudo ufw allow from 192.168.1.100 to any port 22

サブネット(ネットワーク範囲)で指定

# 192.168.1.0/24からの接続を許可
sudo ufw allow from 192.168.1.0/24

特定ポートへ:

sudo ufw allow from 192.168.1.0/24 to any port 3306

これで、社内ネットワークからだけMySQLにアクセスできるようになります。

特定のIPアドレスを拒否

# 悪意あるIPをブロック
sudo ufw deny from 203.0.113.50

インターフェース(ネットワークカード)を指定

# eth0インターフェースからのポート80を許可
sudo ufw allow in on eth0 to any port 80

複数のネットワークカードがある場合に便利です。


アプリケーションプロファイル

プロファイルの一覧表示

UFWには、一般的なアプリケーション用のプロファイルが用意されています。

sudo ufw app list

出力例:

Available applications:
  Apache
  Apache Full
  Apache Secure
  Nginx Full
  Nginx HTTP
  Nginx HTTPS
  OpenSSH

プロファイルの詳細確認

sudo ufw app info "Nginx Full"

出力例:

Profile: Nginx Full
Title: Web Server (Nginx, HTTP + HTTPS)
Description: Small, but very powerful and efficient web server

Ports:
  80,443/tcp

プロファイルで許可

# Nginxを許可(HTTP + HTTPS)
sudo ufw allow "Nginx Full"

# OpenSSHを許可
sudo ufw allow OpenSSH

# Apache HTTPSだけ許可
sudo ufw allow "Apache Secure"

プロファイルを使うと、複数のポートをまとめて設定できて便利です。

カスタムプロファイルの作成

独自のプロファイルを作成することもできます。

ファイル作成:

sudo nano /etc/ufw/applications.d/myapp

内容例:

[MyApp]
title=My Custom Application
description=My custom web application
ports=8080,8443/tcp

使用:

sudo ufw app update MyApp
sudo ufw allow MyApp

ルールの確認と削除

ルール番号付きで表示

sudo ufw status numbered

出力例:

Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 22                         ALLOW IN    Anywhere
[ 2] 80/tcp                     ALLOW IN    Anywhere
[ 3] 443/tcp                    ALLOW IN    Anywhere
[ 4] 22 (v6)                    ALLOW IN    Anywhere (v6)
[ 5] 80/tcp (v6)                ALLOW IN    Anywhere (v6)
[ 6] 443/tcp (v6)               ALLOW IN    Anywhere (v6)

ルールの削除

番号で削除:

# ルール番号2を削除
sudo ufw delete 2

ルール内容で削除:

# 追加時と同じコマンドにdeleteを付ける
sudo ufw delete allow 80/tcp

IPアドレス指定のルールを削除:

sudo ufw delete allow from 192.168.1.100

すべてのルールを削除

sudo ufw reset

確認メッセージが表示されるので、yを入力します。


ログの設定と確認

ログの有効化

sudo ufw logging on

ログレベルの設定:

# low(低)
sudo ufw logging low

# medium(中)
sudo ufw logging medium

# high(高)
sudo ufw logging high

# full(完全)
sudo ufw logging full

推奨:
通常はlowまたはmediumで十分です。

ログの確認

sudo tail -f /var/log/ufw.log

ログの例:

Dec 20 10:15:23 server kernel: [UFW BLOCK] IN=eth0 OUT= MAC=... SRC=203.0.113.50 DST=192.168.1.10 LEN=60 TOS=0x00 PREC=0x00 TTL=52 ID=12345 PROTO=TCP SPT=54321 DPT=22 

読み方:

  • [UFW BLOCK]:ブロックされた
  • SRC:送信元IPアドレス
  • DPT:宛先ポート番号
  • PROTO:プロトコル(TCP/UDP)

ログの無効化

sudo ufw logging off

実用的な設定例

Webサーバーの設定

Apache/Nginxを動かす場合:

# デフォルトポリシー
sudo ufw default deny incoming
sudo ufw default allow outgoing

# SSH許可
sudo ufw allow 22/tcp

# HTTP/HTTPS許可
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# 有効化
sudo ufw enable

データベースサーバーの設定

MySQLをローカルネットワークだけに公開:

# デフォルト設定
sudo ufw default deny incoming
sudo ufw default allow outgoing

# SSH許可
sudo ufw allow 22/tcp

# 社内ネットワークからMySQLアクセス許可
sudo ufw allow from 192.168.1.0/24 to any port 3306

# 有効化
sudo ufw enable

SSH + Webサーバー + メールサーバー

# SSH
sudo ufw allow 22/tcp

# Web
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# メール(SMTP、IMAP、POP3)
sudo ufw allow 25/tcp
sudo ufw allow 587/tcp
sudo ufw allow 993/tcp
sudo ufw allow 995/tcp

# 有効化
sudo ufw enable

開発環境の設定

# SSH
sudo ufw allow 22/tcp

# Node.js開発サーバー
sudo ufw allow 3000/tcp

# Reactデフォルトポート
sudo ufw allow 3001/tcp

# データベース(ローカルのみ)
sudo ufw allow from 127.0.0.1 to any port 3306
sudo ufw allow from 127.0.0.1 to any port 5432

# 有効化
sudo ufw enable

レート制限(Rate Limiting)

連続アクセスの制限

SSH等への総当たり攻撃を防ぐため、レート制限が設定できます。

sudo ufw limit 22/tcp

効果:
30秒以内に同じIPアドレスから6回以上の接続試行があると、一時的にブロックされます。

通常のallow との違い:

# 通常の許可
sudo ufw allow 22/tcp

# レート制限付き許可
sudo ufw limit 22/tcp

レート制限は、パスワード認証のSSHで特に有効です。

既存のルールを変更

# まず既存のルールを削除
sudo ufw delete allow 22/tcp

# レート制限付きで再追加
sudo ufw limit 22/tcp

トラブルシューティング

UFWを有効化したらSSH接続が切れた

原因:
SSH(ポート22)を許可する前にUFWを有効化した。

対処法(サーバーに物理アクセスできる場合):

# UFWを無効化
sudo ufw disable

# SSHを許可
sudo ufw allow 22

# 再度有効化
sudo ufw enable

対処法(物理アクセスできない場合):
クラウドサービスのコンソール機能を使用してアクセスします。

ルールを追加しても反映されない

確認事項:

1. UFWが有効になっているか:

sudo ufw status

2. ルールの順序を確認:

sudo ufw status numbered

拒否ルールが許可ルールより先にある場合、拒否が優先されます。

3. UFWをリロード:

sudo ufw reload

ポートが開いているか確認

外部から確認(別のマシンから):

telnet サーバーIP ポート番号

または:

nc -zv サーバーIP ポート番号

サーバー側でリスニング状態を確認:

sudo ss -tuln | grep ポート番号

IPv6を無効化したい

設定ファイルを編集:

sudo nano /etc/default/ufw

変更:

IPV6=no

UFWを再起動:

sudo ufw disable
sudo ufw enable

ルールが多すぎて遅い

UFWのルールが数百以上になると、パフォーマンスに影響することがあります。

対処法:

  • 不要なルールを削除
  • ポート範囲を使ってルールを統合
  • IP範囲(CIDR)でまとめる
# 悪い例:個別に100個のルール
sudo ufw allow from 192.168.1.1
sudo ufw allow from 192.168.1.2
...

# 良い例:1つのルールにまとめる
sudo ufw allow from 192.168.1.0/24

よくある質問

UFWとfirewalldの違いは?

UFW:

  • Ubuntu/Debian系で標準
  • シンプルで分かりやすい
  • コマンドが簡潔

firewalld:

  • CentOS/RHEL系で標準
  • ゾーンベースの設定
  • より高度な機能

どちらも内部ではiptablesを使用しています。

GUIツールはある?

はい、あります。

GUFW(Graphical UFW):

sudo apt install gufw

デスクトップ環境がある場合、グラフィカルに設定できます。

Dockerと一緒に使える?

はい、使えますが注意が必要です。

Dockerは独自のiptablesルールを追加するため、UFWのルールをバイパスすることがあります。

対処法:
Dockerの設定でiptables: falseを設定するか、UFWでDockerのルールを管理します。

VPNサーバーとの併用は?

VPN(OpenVPN、WireGuardなど)を使う場合、以下を許可する必要があります:

# OpenVPN
sudo ufw allow 1194/udp

# WireGuard
sudo ufw allow 51820/udp

また、フォワーディングを有効にする必要がある場合もあります。

設定ファイルはどこ?

メイン設定:

/etc/ufw/ufw.conf

デフォルトポリシー:

/etc/default/ufw

ルール:

/etc/ufw/user.rules
/etc/ufw/user6.rules (IPv6)

通常はコマンドで操作し、直接編集は推奨されません。


まとめ:UFWでセキュアなサーバー環境を構築しよう

UFWは、Linuxのファイアウォール管理を劇的に簡単にしてくれるツールです。

この記事のポイント:

  • UFWはiptablesのシンプルなフロントエンド
  • Ubuntuでは標準搭載
  • 直感的なコマンドで設定可能
  • デフォルトポリシーで基本方針を決める
  • ポート番号やサービス名で許可・拒否
  • IPアドレスやサブネットで制限可能
  • アプリケーションプロファイルで簡単設定
  • レート制限で総当たり攻撃を防止
  • ログで不正アクセスを監視
  • SSH許可後に有効化(重要!)

最初のステップ:

# 1. SSHを許可(リモート接続の場合は必須)
sudo ufw allow 22

# 2. デフォルトポリシー設定
sudo ufw default deny incoming
sudo ufw default allow outgoing

# 3. 必要なサービスを許可
sudo ufw allow 80
sudo ufw allow 443

# 4. 有効化
sudo ufw enable

# 5. 確認
sudo ufw status

セキュリティは後回しにせず、サーバーを立てたらすぐにファイアウォールを設定しましょう。

UFWを使えば、初心者でも簡単に堅牢なセキュリティ設定ができますよ!

コメント

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