はじめに
先日、AWSで立てたEC2インスタンスにSSH接続できなくなる問題が発生しました。このトラブルの原因と解決方法を記録しておきます。同じ状況に陥った方の助けになれば幸いです。
問題の症状
- EC2インスタンスにSSH接続を試みると、
Connection timed outのエラーが表示される。 - AWSコンソール上では、インスタンスは正常に動作中。
- ブラウザからの接続は可能(インスタンス内のApacheは稼働中)。
トラブルシューティングの進め方
問題解決のため、まずはSSH接続ができない間もAWS System Managerの「セッションマネージャー」を利用しました。System Managerを活用することで、インスタンスの内部に直接ログインでき、次のような確認や操作が可能になりました:
ファイアウォール(UFW)の状態確認
sudo ufw statusSSHサービスの状態確認
sudo systemctl status ssh
System Managerは、セキュリティグループやファイアウォールの設定ミスが原因でSSH接続ができなくてもインスタンス内部にアクセスできるため、非常に有用です。
原因と解決方法
調査の結果、以下の4つの原因が考えられました。
原因1: セキュリティグループのルール設定ミス
問題点
セキュリティグループでポート22(SSH)が許可されていなかった。
解決方法
AWSコンソールのセキュリティグループ設定に以下のルールを追加:
- タイプ: SSH
- プロトコル: TCP
- ポート範囲: 22
- ソース: 自分のグローバルIPアドレス(例:
203.0.113.0/32)
原因2: UFW(Uncomplicated Firewall)がポート22を閉じていた
問題点
EC2インスタンス内のUFW(ローカルファイアウォール)でポート22が閉じられていた。
解決方法
以下のコマンドを実行してポート22を許可し、設定を反映しました。
sudo ufw allow 22
sudo ufw reload
原因3: グローバルIPの変動
問題点
自分のグローバルIPアドレスが変更されたことで、セキュリティグループのルールが機能しなくなった。
解決方法
新しいグローバルIPを確認し、セキュリティグループのSSHルールを更新しました。
curl ifconfig.me
原因4: インターネットゲートウェイの設定ミス
問題点
インターネットゲートウェイがVPCに正しくアタッチされていなかった。
解決方法
AWSコンソールのVPCダッシュボードで以下を確認しました:
- インターネットゲートウェイがVPCにアタッチされていること。
- ルートテーブルに
0.0.0.0/0のデフォルトルートがインターネットゲートウェイを指していること。
# 例: ルートテーブルの確認コマンド
aws ec2 describe-route-tables --query "RouteTables[*].Routes"
解決のポイント
このケースでは、UFWの設定でポート22が閉じていた ことが主な原因でした。ローカルのファイアウォール設定とAWSのセキュリティグループ設定が一致していないことが問題を引き起こしていました。また、System Managerを利用することでインスタンス内部へのアクセスを確保しながら問題解決を進められたこともポイントです。
学んだこと
今回のトラブルから、以下の教訓を得ました:
複数のセキュリティ設定を確認する
- AWSのセキュリティグループ設定だけでなく、サーバー内のファイアウォール設定(UFWやiptables)も忘れずに確認する。
System Managerを積極的に活用する
- SSH接続ができない場合でも、System Managerを利用することでインスタンス内部の確認・修正が可能になる。
接続トラブルの調査フローを明確にする
以下の順番で確認するとスムーズに解決できます:- セキュリティグループの設定確認。
- ローカルファイアウォールの設定確認。
- インターネットゲートウェイとルートテーブルの設定確認。
- ローカルマシンのグローバルIPアドレス確認。
おわりに
「接続できない」という問題はシンプルに見えて、原因が複数絡んでいる場合があります。トラブルシューティングは焦らず、落ち着いて一つずつ原因を切り分けていくことが重要です。
今回の記録が、同じ状況に陥った方の参考になれば幸いです。