🛡️ Bastion サーバーとは?
Bastion サーバーは、外部から内部ネットワークへの接続を中継する セキュリティゲートウェイサーバー です。通常、以下のような目的で使用されます:
- プライベートネットワーク内のサーバー(例:EC2)に直接アクセスせず、Bastion を経由してのみ接続を許可する
- 外部からの直接接続を防ぎ、アクセスを中央で管理する
- セキュリティを強化し、接続ログを追跡可能にする
このマニュアルでは Bastion サーバーを Docker コンテナ で構築し、クライアントから SSH エージェントフォワーディングを使って EC2 コンテナに接続する環境を構築します。
ジョブセッティング環境は、次にリンクから受け取ることができる
git clone https://github.com/rinechran/bastion-lab.git
予備 git
git clone https://git.kudryavka.me/blog/bastion-lab.git
📦 システム構成図
[ローカルクライアント(Windows)]
- bastion_key.pem
- ec2_key.pem(ssh-agent に登録)
↓ SSH -A(エージェントフォワーディング)
[Bastion(Docker コンテナ)]
- ec2_key.pem は保持しない
- クライアントの ssh-agent 経由で署名要求
↓ SSH
[EC2(Docker コンテナ)]
- authorized_keys に ec2_key.pem.pub を登録
✅ ファイル構成
bastion-ec2-lab/
├── docker-compose.yml
├── keys/
│ ├── bastion_key.pem # Bastion 接続用秘密鍵
│ └── ec2_key.pem # ssh-agent に登録する EC2 鍵
├── bastion/
│ ├── Dockerfile
│ ├── sshd_config
│ ├── entrypoint.sh
│ └── authorized_keys # bastion_key.pem.pub を配置
└── server/
├── Dockerfile
├── sshd_config
├── entrypoint.sh
└── authorized_keys # ec2_key.pem.pub を配置
🔧 ステップ1: ssh-agent 起動 & EC2 鍵の登録
PowerShell(管理者として実行) を開き、以下を入力:
Set-Service -Name ssh-agent -StartupType Manual
Start-Service ssh-agent
ssh-add .\keys\ec2_key.pem
登録に成功すると
ssh-add -l
コマンドで確認可能です
🚀 ステップ2: Docker コンテナの起動
docker-compose up -d --build
🔐 ステップ3: Bastion に接続(エージェントフォワーディング付き)
ssh -A -i keys/bastion_key.pem root@localhost -p 2222
-A
オプションで ssh-agent フォワーディングが有効になります
📡 ステップ4: Bastion 内から EC2 に接続
ssh root@ec2
EC2 コンテナは
hostname: ec2
として構成されている必要があります
📄 全体のコマンドまとめ
# ssh-agent 起動 & EC2 鍵登録
Start-Service ssh-agent
ssh-add .\keys\ec2_key.pem
# Bastion に接続
ssh -A -i keys/bastion_key.pem root@localhost -p 2222
# Bastion 内から EC2 に接続
ssh root@ec2