Skip to content

ファイアウォール設定とセキュリティ運用ガイド

本プロジェクトにおける「ファイアウォール」の考え方について、ゲストOS(Debian VM)とホストOS(校舎PC)、実際のデプロイ環境の3つの視点で解説します。

1. ゲストOS (Debian VM) での設定

あなたが管理者権限(root/sudo)を持つVM内では、UFW (Uncomplicated Firewall) を有効にして防御を固めることが推奨されます(必須要件に含まれる場合も多いです)。

推奨設定

Docker Infrastructureで最低限必要なポートは「Webアクセス(443)」と「管理用SSH(4242など)」のみです。

bash
# 1. UFWのインストール
sudo apt-get update
sudo apt-get install -y ufw

# 2. デフォルトポリシー設定(基本全て拒否)
sudo ufw default deny incoming
sudo ufw default allow outgoing

# 3. 必要なポートの許可
sudo ufw allow 443/tcp                 # HTTPS (NGINX)
sudo ufw allow 4242/tcp                # SSH (プロジェクトで指定されたポート)
sudo ufw allow 21/tcp                  # FTP (制御用)
sudo ufw allow 21100:21110/tcp         # FTP (データ転送・パッシブモード用)

# 4. 有効化
sudo ufw enable

補足: SSHポートの変更設定 (/etc/ssh/sshd_config)

ファイアウォールで4242を許可する前に、SSHサーバー自体が4242番で待機するように設定変更が必要です。

なぜポート22ではなく4242なのか?

  1. セキュリティ(隠蔽): 標準の22番ポートは攻撃者(Bot)の標的になりやすいため、ポート番号を変えるだけでログが汚れにくくなります。
  2. 課題要件: 本プロジェクトとして「SSHは4242ポートを使用すること」と明示されています。
  3. 競合回避: 仮想化環境などでホスト側の22番と混同しないように区別する意味もあります。
  • 設定ファイルを開く
bash
sudo vim /etc/ssh/sshd_config
  • 設定ファイルを編集
ini
# Portの設定を変更(#を外して数値を書き換え)
# Port 22
Port 4242

# rootログインの禁止(セキュリティ要件)
PermitRootLogin no
  • SSHサービスの再起動
bash
sudo service ssh restart

注意: ポート変更後は、次回接続時から -p 4242 オプションが必要になります。

なぜこれが必要か?

コンテナ(Docker)は独自のネットワークを持ちますが、ホスト(VM)自体の守りが甘いとそこから侵入されるリスクがあります。 特に MariaDB (3306)WordPress (9000) はコンテナ間通信でのみ使われるべきもので、外部(VMの外)から直接アクセスさせるべきではありません。UFWで 443 と SSH 以外を閉じることで、これを強制できます。

2. 校舎PC(ホストOS)での設定と注意点

現状の制約

校舎のiMacなどは、私たちは管理者権限を持っていません。したがって、ホストOS側のファイアウォール設定を変更することはできません

レビュー時の対応

  • 設定変更: 不要(不能)です。
  • SSHトンネルの影響:
    • レビューで使う「SOCKSプロキシ (ssh -D 8080)」は、ホストOS上で localhost:8080 をリッスンします。
    • 通常、校舎PCのファイアウォールは「外部からの接続」はブロックしますが、「ローカルホスト内 (127.0.0.1) の通信」や「外部への送信(SSH)」は許可されています。
    • そのため、ホスト側のファイアウォールを気にする必要はありません。そのままの手順で動作します。

3. 実際のデプロイ環境(本番サーバー)での考え方

もしこのシステムを AWS や Google Cloud などのクラウド上にデプロイする場合、OS内部のファイアウォール(UFW)に加えて、クラウド側のセキュリティグループ(外部ファイアウォール) が適用されます。

多層防御 (Defense in Depth)

  1. クラウド側の設定 (Security Group):

    • Inbound: 0.0.0.0/0 からの 443/tcp のみ許可。管理者のIPからのみ SSH(4242) を許可。
    • Outbound: 必要な更新サーバーへの通信などを許可。
    • このレベルで、不要なパケットはサーバーに届く前に破棄されます。
  2. OS側の設定 (UFW / iptables):

    • 万が一クラウドの設定ミスでポートが開いた場合に備え、OS側でも 443 と SSH 以外を拒否します。
  3. Dockerネットワークの隔離:

    • Docker Infrastructureの実装通り、データベースなとは外部にポート公開せず (exposeのみ)、内部ネットワークに閉じ込めます。

4. まとめ

  • 今の課題 (Vm):
    • VMの中 (sudo ufw ...) は設定すべきです。「セキュリティに配慮して不要なポートは塞いでいます」と説明できれば高評価です。
    • もしSSHポートを塞ぐと、ホストから接続できなくなり、SOCKSプロキシも使えなくなるので注意してください(SSHポートの許可は必須)。
  • 校舎PC:
    • 何も変更できませんし、する必要もありません。SSHトンネル技術がファイアウォールの壁を(正当な方法で)越えてくれます。

Released under the MIT License.