Linuxサーバーを運用していると、「セキュリティのためにファイアウォールを設定しなきゃ」と思いますよね。
でも、伝統的なiptablesというツールは、コマンドが複雑で初心者には難しいんです。
そこで登場したのがUFW(Uncomplicated Firewall)。名前の通り「複雑じゃないファイアウォール」として開発されました。
今回は、Linuxで簡単にファイアウォールを設定できる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を使えば、初心者でも簡単に堅牢なセキュリティ設定ができますよ!


コメント