ストーリー
ファイアウォールとは
ファイアウォールは、ネットワーク通信を監視し、設定したルールに基づいて通信を許可・拒否する仕組みです。
ファイアウォールの種類
| 種類 | 説明 | 例 |
|---|---|---|
| ホストファイアウォール | 個々のサーバーに設定 | iptables, ufw, firewalld |
| ネットワークファイアウォール | ネットワークの境界に設置 | 専用機器、AWS Security Group |
ufw(Uncomplicated Firewall)
Ubuntuで標準的に使われる、シンプルなファイアウォール管理ツールです。
基本コマンド
# ファイアウォールの状態確認
sudo ufw status
# ファイアウォールを有効化
sudo ufw enable
# ファイアウォールを無効化
sudo ufw disable
ルールの追加
# ポート22(SSH)を許可
sudo ufw allow 22
# ポート80(HTTP)を許可
sudo ufw allow 80
# ポート443(HTTPS)を許可
sudo ufw allow 443
# ポート3306(MySQL)を特定IPからのみ許可
sudo ufw allow from 192.168.1.50 to any port 3306
# ポート5432(PostgreSQL)を特定サブネットから許可
sudo ufw allow from 192.168.1.0/24 to any port 5432
ルールの削除
# ルール番号を確認
sudo ufw status numbered
# 番号を指定して削除
sudo ufw delete 3
デフォルトポリシー
# 受信をデフォルトで拒否(推奨)
sudo ufw default deny incoming
# 送信をデフォルトで許可
sudo ufw default allow outgoing
セキュリティの基本原則: デフォルトですべて拒否し、必要なものだけを許可する(ホワイトリスト方式)。
iptables(参考)
ufwの裏側で動いている、より低レベルなファイアウォールです。
基本構造
# 現在のルールを表示
sudo iptables -L -n
# 入力チェーン(受信トラフィック)
# Chain INPUT
# target prot opt source destination
# ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
# ACCEPT tcp -- 192.168.1.0/24 0.0.0.0/0 tcp dpt:3306
# DROP all -- 0.0.0.0/0 0.0.0.0/0
チェーンの種類
| チェーン | 説明 |
|---|---|
| INPUT | 受信トラフィック(自分宛て) |
| OUTPUT | 送信トラフィック(自分から) |
| FORWARD | 転送トラフィック(自分を通過) |
ufwは内部的にiptablesのルールを生成しています。通常はufwで十分ですが、iptablesを理解しておくとトラブルシューティングに役立ちます。
クラウドのセキュリティグループ
AWSなどのクラウド環境では、セキュリティグループがファイアウォールの役割を果たします。
AWSセキュリティグループの例
インバウンドルール(受信):
+------+----------+-----------+-----------------------+
| Type | Protocol | Port | Source |
+------+----------+-----------+-----------------------+
| SSH | TCP | 22 | 203.0.113.0/24 |
| HTTP | TCP | 80 | 0.0.0.0/0 |
| HTTPS| TCP | 443 | 0.0.0.0/0 |
| MySQL| TCP | 3306 | sg-webapp (SG ID) |
+------+----------+-----------+-----------------------+
アウトバウンドルール(送信):
+------+----------+-----------+-----------------------+
| Type | Protocol | Port | Destination |
+------+----------+-----------+-----------------------+
| All | All | All | 0.0.0.0/0 |
+------+----------+-----------+-----------------------+
MySQLのポートは「Webアプリケーションのセキュリティグループ」からのみ許可しています。これにより、DBに直接アクセスできるのはWebサーバーだけになります。
セキュリティの基本原則
最小権限の原則
必要最小限のアクセスのみ許可する
× ポート3306を全世界に公開
○ ポート3306をWebサーバーのIPだけに許可
多層防御(Defense in Depth)
インターネット
→ ネットワークファイアウォール(1層目)
→ セキュリティグループ(2層目)
→ ホストファイアウォール(3層目)
→ アプリケーション認証(4層目)
まとめ
| ポイント | 内容 |
|---|---|
| ファイアウォール | 通信を監視し、ルールに基づいて許可/拒否 |
| ufw | Ubuntu標準のシンプルなファイアウォール管理ツール |
| iptables | ufwの裏側で動く低レベルなファイアウォール |
| セキュリティグループ | クラウド環境のファイアウォール |
| 最小権限 | 必要なものだけを許可するのが基本 |
チェックリスト
- ファイアウォールの役割を説明できる
- ufw の基本コマンドを覚えた
- セキュリティグループの概念を理解した
- 最小権限の原則を理解した
次のステップへ
ファイアウォールとセキュリティの基本を学びました。 次のセクションでは、ネットワークの通信内容を直接覗く「パケットキャプチャ」を学びます。
推定読了時間: 20分