Linuxサーバーのセキュリティを高めるには、ファイアウォールの設定が欠かせません。
でも、iptablesのコマンドは複雑で覚えにくいですよね。
「もっと簡単にファイアウォールを設定したい」
「ポートを開くだけなのに、なぜこんなに難しいの?」
「初心者でも使える方法はないかな?」
そんな方におすすめなのが、UFW(Uncomplicated Firewall)です。
この記事では、UFWコマンドについて、初心者の方にも分かりやすく、基本から実践的な使い方まで詳しく解説していきます。
UFWとは?ファイアウォール設定を「簡単に」するツール
UFWの基本的な意味
UFWは「Uncomplicated Firewall(複雑でないファイアウォール)」の略称です。
名前の通り、複雑なファイアウォール設定を簡単にするために作られたツールです。
Linuxの標準的なファイアウォール機能(iptables)を、分かりやすいコマンドで操作できるようにしています。
簡単に言えば、iptablesの「翻訳機」のようなものだと考えてください。
なぜUFWが便利なのか
従来のiptablesコマンドは、このように複雑です:
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
同じことをUFWでは、こう書けます:
sudo ufw allow 80/tcp
圧倒的に分かりやすいですよね。
UFWとiptablesの関係
UFWは、iptablesを置き換えるものではありません。
内部的にはiptablesを使っていますが、その複雑な部分を隠してくれているのです。
イメージ:
あなた → UFWコマンド → iptables → Linuxカーネル
UFWが間に入ることで、直接iptablesを触る必要がなくなります。
UFWのインストール
まず、UFWをインストールしましょう。
Ubuntuの場合
Ubuntuでは、最初からインストールされていることが多いです。
確認方法:
ufw version
バージョン情報が表示されればインストール済みです。
インストールが必要な場合:
sudo apt update
sudo apt install ufw
Debian系の場合
sudo apt install ufw
CentOS/AlmaLinux/RHEL系の場合
CentOS系では、EPELリポジトリからインストールできます。
sudo dnf install epel-release
sudo dnf install ufw
インストール後の確認
sudo ufw status
「Status: inactive」と表示されれば、正常にインストールされています。
UFWの基本的な使い方
まずは基本操作から学びましょう。
UFWの有効化と無効化
有効化:
sudo ufw enable
この瞬間から、UFWが動作し始めます。
警告: SSH経由で接続している場合、先にSSHポートを開いておかないと、自分をロックアウトしてしまいます!
無効化:
sudo ufw disable
ファイアウォールを完全に停止します。
ステータスの確認
簡易表示:
sudo ufw status
現在の状態(有効/無効)と、設定されているルールが表示されます。
詳細表示:
sudo ufw status verbose
デフォルトポリシーなど、より詳しい情報が見られます。
番号付きで表示:
sudo ufw status numbered
ルールに番号が付くため、削除する時に便利です。
デフォルトポリシーの設定
すべてのルールの「基本方針」を決めます。
デフォルトポリシーとは
個別に許可・拒否を指定していない通信について、どうするかを決める設定です。
セキュリティの基本原則:
- 外部からの接続はすべて拒否
- 内部からの接続はすべて許可
これが最も安全な設定です。
推奨設定
sudo ufw default deny incoming
sudo ufw default allow outgoing
意味:
- 外部から入ってくる通信は拒否(deny incoming)
- 内部から出ていく通信は許可(allow outgoing)
この設定により、必要なポートだけを個別に開くことになります。
確認方法
sudo ufw status verbose
以下のように表示されます:
Default: deny (incoming), allow (outgoing), disabled (routed)
ポートの開放(許可)
サービスを公開するために、ポートを開きます。
基本的な書式
sudo ufw allow ポート番号/プロトコル
よく使うポートの開放
SSH(22番ポート):
sudo ufw allow 22/tcp
または、サービス名で指定:
sudo ufw allow ssh
HTTP(80番ポート):
sudo ufw allow 80/tcp
または:
sudo ufw allow http
HTTPS(443番ポート):
sudo ufw allow 443/tcp
または:
sudo ufw allow https
複数のポートを一度に開く:
sudo ufw allow 80,443/tcp
ポート範囲の指定
連続したポートをまとめて開けます。
sudo ufw allow 6000:6010/tcp
6000番から6010番までのTCPポートが開きます。
プロトコルを指定しない場合
プロトコルを省略すると、TCPとUDPの両方が開きます。
sudo ufw allow 53
これは、以下と同じ意味です:
sudo ufw allow 53/tcp
sudo ufw allow 53/udp
特定の条件での許可
より細かい制御ができます。
特定のIPアドレスからのみ許可
特定のIPからのすべての接続を許可:
sudo ufw allow from 192.168.1.100
特定のIPから特定のポートへの接続を許可:
sudo ufw allow from 192.168.1.100 to any port 22
これで、192.168.1.100からのSSH接続だけが許可されます。
サブネット全体を許可
192.168.1.0/24の範囲全体を許可:
sudo ufw allow from 192.168.1.0/24
社内ネットワークからのアクセスを許可する場合などに便利です。
特定のインターフェースのみ許可
eth0からの接続だけを許可:
sudo ufw allow in on eth0 to any port 80
複数のネットワークインターフェースがある場合に使います。
ポートのブロック(拒否)
特定の通信を明示的に拒否します。
基本的な拒否
sudo ufw deny 25/tcp
メールサーバー機能を使わない場合、SMTPポート(25番)を閉じておくと安全です。
特定のIPアドレスをブロック
攻撃元のIPをブロック:
sudo ufw deny from 203.0.113.10
特定のIPから特定のポートへのアクセスをブロック:
sudo ufw deny from 203.0.113.10 to any port 22
rejectとdenyの違い
deny:
パケットを破棄し、応答しません(DROP)。
reject:
接続を拒否して、エラーメッセージを返します(REJECT)。
sudo ufw reject 25/tcp
通常はdeny
の方が安全です(攻撃者に情報を与えない)。
ルールの削除
不要になったルールを削除します。
番号指定で削除
手順1:番号付きでルールを表示
sudo ufw status numbered
出力例:
To Action From
-- ------ ----
[ 1] 22/tcp ALLOW IN Anywhere
[ 2] 80/tcp ALLOW IN Anywhere
[ 3] 443/tcp ALLOW IN Anywhere
手順2:番号を指定して削除
sudo ufw delete 2
2番のルール(HTTPの80番ポート)が削除されます。
確認メッセージが表示されるので、y
を入力します。
ルールを直接指定して削除
追加した時と同じコマンドにdelete
を付けます。
追加時:
sudo ufw allow 8080/tcp
削除時:
sudo ufw delete allow 8080/tcp
アプリケーションプロファイル
よく使うサービスを簡単に設定できます。
プロファイルとは
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"
どのポートが開かれるか確認できます。
プロファイルを使った設定
sudo ufw allow "OpenSSH"
または:
sudo ufw allow "Nginx Full"
これで、HTTPとHTTPSの両方のポートが開きます。
ログ機能
ブロックされた通信を記録します。
ログの有効化
sudo ufw logging on
ログレベルの設定
sudo ufw logging low
sudo ufw logging medium
sudo ufw logging high
- low: 最小限のログ
- medium: 標準的なログ(推奨)
- high: 詳細なログ
高すぎるレベルに設定すると、ログファイルが肥大化します。
ログの確認
sudo tail -f /var/log/ufw.log
リアルタイムでブロックされた通信を確認できます。
ログの無効化
sudo ufw logging off
実践的な設定例
実際のサーバー構築での使用例です。
Webサーバーの基本設定
# デフォルトポリシー設定
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
# UFWを有効化
sudo ufw enable
SSHを特定のIPからのみ許可
# デフォルトポリシー設定
sudo ufw default deny incoming
sudo ufw default allow outgoing
# 自宅のIPアドレスからのSSHだけ許可
sudo ufw allow from 203.0.113.5 to any port 22
# Webサービスは全開放
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# UFWを有効化
sudo ufw enable
データベースサーバーの設定
# デフォルトポリシー設定
sudo ufw default deny incoming
sudo ufw default allow outgoing
# 管理用SSH
sudo ufw allow 22/tcp
# Webサーバー(192.168.1.10)からのMySQLアクセスのみ許可
sudo ufw allow from 192.168.1.10 to any port 3306
# UFWを有効化
sudo ufw enable
メールサーバーの設定
# デフォルトポリシー設定
sudo ufw default deny incoming
sudo ufw default allow outgoing
# SSH
sudo ufw allow 22/tcp
# SMTP
sudo ufw allow 25/tcp
# SMTP over TLS
sudo ufw allow 587/tcp
# IMAP over SSL
sudo ufw allow 993/tcp
# POP3 over SSL
sudo ufw allow 995/tcp
# UFWを有効化
sudo ufw enable
トラブルシューティング
よくある問題と解決方法です。
SSH接続が切れてしまった
原因:
SSH用のポート(22番)を開かずにUFWを有効化してしまいました。
対処法:
VPSやクラウドサービスの場合、コンソールアクセス(Webブラウザから操作できる画面)を使います。
sudo ufw allow 22/tcp
sudo ufw reload
予防策:
UFWを有効化する前に、必ずSSHポートを開いておきましょう。
ルールが反映されない
原因:
UFWが有効になっていないか、ルールの順序の問題です。
対処法:
まず、UFWが有効か確認:
sudo ufw status
ルールを追加した後、リロード:
sudo ufw reload
設定を初期化したい
すべてのルールを削除:
sudo ufw reset
確認メッセージでy
を入力すると、すべての設定がクリアされます。
注意: UFWは無効化されるので、再度設定が必要です。
iptablesと競合する
原因:
iptablesを直接編集していると、UFWと競合することがあります。
対処法:
UFWだけを使うか、iptablesだけを使うか、どちらかに統一しましょう。
UFWを使う場合は、iptablesの直接編集は避けます。
UFWの詳細設定
より高度な設定方法です。
ルールの挿入(優先順位の変更)
ルールは上から順に評価されるため、順序が重要です。
特定の位置にルールを挿入:
sudo ufw insert 1 allow from 192.168.1.100
1番目の位置にルールが追加されます。
レート制限(DDoS対策)
短時間に大量の接続を試みるIPを自動的にブロックします。
sudo ufw limit 22/tcp
これで、30秒間に6回以上の接続を試みたIPは一時的にブロックされます。
SSHへのブルートフォース攻撃対策に有効です。
IPv6への対応
UFWは、デフォルトでIPv6にも対応しています。
設定ファイル:
sudo nano /etc/default/ufw
IPV6=yes
になっていることを確認します。
UFWとfirewalld
CentOS系でよく使われるfirewalldとの違いです。
設計思想の違い
UFW:
- シンプルで分かりやすい
- Ubuntu/Debian系で標準
- 学習コストが低い
firewalld:
- ゾーンベースの管理
- RHEL/CentOS系で標準
- より柔軟だが複雑
どちらを使うべきか
使用しているディストリビューションの標準に合わせるのが無難です。
- Ubuntu/Debian → UFW
- CentOS/AlmaLinux/RHEL → firewalld
ただし、どちらも両方のディストリビューションにインストール可能です。
まとめ:UFWで簡単にセキュリティを強化しよう
UFWコマンドについて、重要なポイントをおさらいしましょう。
UFWとは:
- Uncomplicated Firewall(複雑でないファイアウォール)
- iptablesを簡単に操作できるツール
- 初心者でも扱いやすい
基本的なコマンド:
sudo ufw enable # 有効化
sudo ufw disable # 無効化
sudo ufw status # ステータス確認
sudo ufw allow 80/tcp # ポート開放
sudo ufw deny 25/tcp # ポート拒否
sudo ufw delete allow 80/tcp # ルール削除
デフォルトポリシー(推奨):
sudo ufw default deny incoming
sudo ufw default allow outgoing
実用的な設定例:
# Webサーバーの基本設定
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
特定条件の設定:
# 特定のIPからのみSSH許可
sudo ufw allow from 192.168.1.100 to any port 22
# レート制限でブルートフォース対策
sudo ufw limit 22/tcp
トラブル回避:
- UFW有効化の前にSSHポートを開く
- リモート接続時は特に注意
- 設定後は必ず動作確認
便利な機能:
- アプリケーションプロファイル
- ログ機能
- 番号指定でのルール削除
- レート制限
UFWは、iptablesの複雑さを隠して、直感的にファイアウォールを設定できる優れたツールです。
サーバーのセキュリティを高めるために、ぜひUFWを活用してください。
まずは基本的な設定から始めて、徐々に高度な機能を使いこなせるようになりましょう!
最後の注意: UFWを有効化する前に、必ずSSHポートを開くことを忘れずに!
コメント