UFWって何？Linuxでファイアウォールをサクッと設定＆解説してみた！

## はじめに

自宅サーバやVPSを構築する中で、**セキュリティの第一歩**としてファイアウォールの設定は欠かせないです。  
今回は、Linuxで使える簡易ファイアウォールツール「**UFW（Uncomplicated Firewall）**」について、導入の流れから基本設定と簡単なコマンドの使用例をわかりやすくまとめました。

「iptablesは難しそう…」という方でも、UFWならコマンドがシンプルで扱いやすいのでおすすめです。


## UFWとは？

UFW（Uncomplicated Firewall）は、その名の通り「**複雑じゃないファイアウォール**」としてUbuntuなどに導入されているツールです。  
複雑なiptablesをラップして、直感的なコマンドでネットワーク制御を実現します。

主な特徴は以下のとおりです：

- コマンドが簡潔でわかりやすい  
- Ubuntuに標準搭載されていることが多い  
- IPv6にも対応  
- サーバー初心者でも直感的に設定できる

## iptablesとの違い
### ◉ iptables：
Linuxカーネルが備える Netfilter に直接ルールを流し込む低レベルのツール。

非常に柔軟ですが、-A（追加）や-I（挿入）など構文が複雑で、初心者泣かせ。

誤ってルールを書き換えると、リモートからの接続ができなくなることも…

### ◉ UFW（Uncomplicated Firewall）：
Ubuntu公式が推奨するシンプルな抽象化ツール。

実際のところ、UFWがバックエンドでiptablesを操作しているだけです。

例えば次のような差があります（設定した結果はどちらも同じSSH許可）：
```bash
# iptables（例：SSH許可）
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# UFW（例：SSH許可）
sudo ufw allow 22/tcp
```
設定のしやすさやシンプルさでは、圧倒的にUFWの方が扱いやすいです。
複雑な設定をしたい場合はiptablesを使用した方が良いですが、
サーバを守る入口として導入するなら、UFWはモダンで扱いやすく、実用面でも十分効果的。

## インストールと初期確認

```bash
# UFWのインストール（多くのUbuntuでは不要）
sudo apt install ufw

# ステータスの確認
sudo ufw status
```

状態が「inactive」と表示された場合、まだファイアウォールは有効化されていません。


## 基本設定とルールの記述
### 基本的な設定例
```bash
# 外部からの接続を全て拒否（incoming）
sudo ufw default deny incoming

# 内部からの通信は全て許可（outgoing）
sudo ufw default allow outgoing

# SSH (例: 22番ポート)
sudo ufw allow xx/tcp

# 特定のIPからの許可（例：192.168.1.10 からSSH）
sudo ufw allow from 192.168.1.10 to any port 22 proto tcp # 特定IPからSSH（22番ポート）を許可

# 状態確認
sudo ufw status verbose
```
## よく使うUFWコマンド一覧と設定例

UFWでは、基本的なポート開放から、アプリケーション別の許可、IP単位の制御まで幅広く対応できます。以下に、代表的な使い方とその例をまとめました。

### 基本ルールの追加・削除
```bash
sudo ufw allow <ポート番号>/tcp          # 指定ポート番号（TCP）を許可（例: 22/tcp）
sudo ufw deny <ポート番号>/tcp	        # 指定ポート番号（TCP）を拒否
sudo ufw delete allow <ポート番号>/tcp	# 許可ルールを削除
sudo ufw delete deny <ポート番号>/tcp	# 拒否ルールを削除

# 例
sudo ufw allow 80/tcp        # HTTP許可
sudo ufw deny 23/tcp         # Telnet拒否
```
### アプリケーションベースの設定
```bash
sudo ufw app list	        # 利用可能なアプリケーションプロファイルを一覧表示
sudo ufw allow "アプリ名"	# アプリケーション単位で許可
sudo ufw app info "アプリ名"	# アプリの使用ポートと詳細情報を表示

# 例
sudo ufw app list
sudo ufw allow "OpenSSH"    # SSH通信を許可（22/tcp）
sudo ufw app info "Apache"  # HTTPとHTTPSが対象ポートなどを確認
```
### 特定IPや範囲からのアクセス制限
```bash
sudo ufw allow from <IPアドレス>	            #特定IPから全体アクセスを許可
sudo ufw allow from <IP> to any port <番号>	#特定IPから特定ポートへの接続のみ許可
sudo ufw allow from <サブネット>	            #IP帯指定も可能（CIDR形式）

# 例
sudo ufw allow from 192.168.1.10 to any port 22 proto tcp  
# 192.168.1.10から22番ポートの接続を許可

sudo ufw allow from 192.168.1.0/24 to any port 80          
# 192.168.1.0/24から80番ポートの接続を許可
```
### 状態確認とルールの整理
```bash
sudo ufw status	         # 現在のルールを一覧表示（簡易）
sudo ufw status verbose	 # 詳細な状態を表示（ポリシー含む）
sudo ufw show raw	     # 実際のiptablesルールを表示

# 例
sudo ufw status verbose
```
### UFWの制御（有効化・無効化など）
```bash
sudo ufw enable	    # ルールを適用してファイアウォールを有効化
sudo ufw disable	# 一時的に無効化
sudo ufw reload 	# 設定の再読み込み
sudo ufw reset 	    # すべてのルールを削除して初期化（⚠注意）

# 例
sudo ufw enable
sudo ufw reload
```

## 注意点とトラブル対策
SSH接続で設定している場合は、UFWを有効化する前にSSHの許可設定を忘れずに！

万が一接続できなくなった場合は、物理的なコンソール操作などが必要になります。

UFWを一時的に無効化するには：

```bash
sudo ufw disable # 一時的に無効化
```
---
### 私の構成と運用事例
自宅用LinuxサーバでUFWを導入

SSHおよびWebアクセスのみ許可

ルーター側でもポート制限済、二段階防御を意識

IPv6通信も含めて明示的にルール追加
### 補足：IPv6について

UFWでは、基本的にポート許可ルールを追加すると**IPv4とIPv6の両方に対して適用**されます。

```bash
sudo ufw allow 22/tcp
```
上記のような設定を行うと、以下のように `ufw status verbose` にて IPv6 対応のルールも自動的に追加されているのが確認できます。

```bash
22                         ALLOW IN    Anywhere
22 (v6)                    ALLOW IN    Anywhere (v6)
```

>※IPv6のみを対象にしたい／IPv4だけに限定したい など、より細かい設定を行いたい場合は別記事でご紹介予定です。

## まとめと今後の展望
UFWは非常にシンプルかつ強力なファイアウォールツール

導入のハードルが低く、自宅サーバ・VPSいずれにもおすすめ

今後は fail2ban などと組み合わせてセキュリティ強化を検討中です

>参考リンク
[UFW – Ubuntu公式マニュアル](https://help.ubuntu.com/community/UFW)
[iptablesとの違い（Qiita内記事）](https://qiita.com/search?q=ufw+iptables)


## おわりに
この記事が、UFWの導入を検討している方の一助となれば幸いです。
ご質問やご指摘などありましたら、ぜひコメント欄までお願いします！