LESSON 20分

ファイアウォールとセキュリティ

ストーリー

「DBサーバーのポートは開いてるのに、特定のIPからだけ接続できないって報告があった」

「ポートが開いてるのに接続できない?」

「ファイアウォールだ。ポートが開いていても、ファイアウォールのルールで特定のIPをブロックしていることがある」

「ファイアウォール...名前はよく聞きますが、具体的にどう動くんですか?」

「通信の門番だよ。誰を通して誰を止めるかのルールを設定する」


ファイアウォールとは

ファイアウォールは、ネットワーク通信を監視し、設定したルールに基づいて通信を許可・拒否する仕組みです。

ファイアウォールの種類

種類説明
ホストファイアウォール個々のサーバーに設定iptables, ufw, firewalld
ネットワークファイアウォールネットワークの境界に設置専用機器、AWS Security Group

ufw(Uncomplicated Firewall)

Ubuntuで標準的に使われる、シンプルなファイアウォール管理ツールです。

基本コマンド

bash
# ファイアウォールの状態確認
sudo ufw status

# ファイアウォールを有効化
sudo ufw enable

# ファイアウォールを無効化
sudo ufw disable

ルールの追加

bash
# ポート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

ルールの削除

bash
# ルール番号を確認
sudo ufw status numbered

# 番号を指定して削除
sudo ufw delete 3

デフォルトポリシー

bash
# 受信をデフォルトで拒否(推奨)
sudo ufw default deny incoming

# 送信をデフォルトで許可
sudo ufw default allow outgoing

セキュリティの基本原則: デフォルトですべて拒否し、必要なものだけを許可する(ホワイトリスト方式)。


iptables(参考)

ufwの裏側で動いている、より低レベルなファイアウォールです。

基本構造

bash
# 現在のルールを表示
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層目)

まとめ

ポイント内容
ファイアウォール通信を監視し、ルールに基づいて許可/拒否
ufwUbuntu標準のシンプルなファイアウォール管理ツール
iptablesufwの裏側で動く低レベルなファイアウォール
セキュリティグループクラウド環境のファイアウォール
最小権限必要なものだけを許可するのが基本

チェックリスト

  • ファイアウォールの役割を説明できる
  • ufw の基本コマンドを覚えた
  • セキュリティグループの概念を理解した
  • 最小権限の原則を理解した

次のステップへ

ファイアウォールとセキュリティの基本を学びました。 次のセクションでは、ネットワークの通信内容を直接覗く「パケットキャプチャ」を学びます。


推定読了時間: 20分