とりあえずブログ

普通のサラリーマンの雑多なブログ

ハニーポットサーバ(EC2)にログインできなくなったので復旧までの道のりを書く

先日SFTPクライアントでいつもどおり、Glastopfのログを取得しようとしたところ、接続できない事象が発生しました。

SSHで接続しようとしても、

f:id:tkm03:20181006180647j:plain

こんな感じで、

Operation timed out

となってしまいます。

僕の場合、AWS上にハニーポットを構築しているので、早速調査してみました。

とりあえずの再起動

とりあえず、何かハングしているのではないかと思い、AWSコンソール上から対象のEC2を再起動してみました。

ダメでした。 再起動しても接続できない状況は変わりませんでした。

EBSをデタッチ

こりゃダメだと思い、対象のEC2を停止させてEBSをデタッチしました。

f:id:tkm03:20181006181542p:plain

調査用のEC2インスタンスを作成

その次に調査用のEC2をAWSコンソールから作成しました。

ハニーポットで使用していたOSはUbuntuだったので、それに合わせてEC2を作成しました。

f:id:tkm03:20181006181819j:plain

使用していたEBSを調査用EC2にアタッチ

調査用のEC2が作成できたら、先ほどデタッチしたEBSをアタッチします。 f:id:tkm03:20181006182225j:plain

その後、調査用EC2を起動します。

調査用EC2にログインして、使用していたEBSボリュームをマウント

このままではアタッチしたEBSボリュームがマウントされていない状態なので、ログインしてマウントさせていきます。

まずは、マウント先のディレクトリを作成します。

sudo mkdir /mnt/ebs

その後は、mountコマンドを使用して対象デバイスを上記で作成したディレクトリにマウントさせます。

sudo mount /dev/xvdf1 /mnt/ebs/

ここで注意が必要なのは、デバイス名です。

上記でEBSをアタッチした際に、下記のような注意書きがありました。

注: ここで入力された (および詳細情報に表示される) デバイス名が /dev/sdf から /dev/sdp であっても、新しい Linux カーネルによっては内部でデバイスの名前が /dev/xvdf から /dev/xvdp に変更されることがあります。

バイス名が変更されているので、そこを考慮してブロックデバイスをマウントさせます。

調査開始

ここまでできたら、何が起こったか調査開始です。

僕の当初の予想では何か不正なファイルを大量にアップロードされて、ファイルシステム容量が一杯になってしまったのではないかと予想してたので、dfコマンドで容量を確認してみました。

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            229M     0  229M   0% /dev
tmpfs            48M  736K   48M   2% /run
/dev/xvda1      7.7G  1.1G  6.7G  14% /
tmpfs           240M     0  240M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           240M     0  240M   0% /sys/fs/cgroup
/dev/loop0       88M   88M     0 100% /snap/core/5328
/dev/loop1       13M   13M     0 100% /snap/amazon-ssm-agent/495
tmpfs            48M     0   48M   0% /run/user/1000
/dev/xvdf1      7.8G  3.8G  3.6G  52% /mnt/ebs

一番下が対象の領域なのですが、使用率が52%といっぱいではありませんでした。

じゃあ何がだめだったのかをシステムログから確認します。

/mnt/ebs/var/log配下に残っていたsyslogを見てみます。

すると、

Oct  2 20:31:33 ip-XXX-XXX-XXX-XXX dhclient: fork: Cannot allocate memory

こんな感じのログが連続して吐かれていました。

なんとなくメモリ領域が不足しているような感じでした。

ググっても同じような記事を見かけたので、とりあえず原因はメモリ不足と判断しました。

aws wordpressを構築したt2.microが反応しなくなる件 | Kikudai Blog

とりあえず元のEC2のメモリを増やして起動

元のEC2で使用していたインスタンスタイプがt2.micro(メモリ1GB)だったので、t2.small(メモリ2GB)に変更してみます。

f:id:tkm03:20181006183902j:plain

その後、元のEBSをアタッチしてEC2を起動します。

ログインできるか確認

その後、ログインできるかどうか確認してみたところ、正常にログインできました。

まあメモリ1GBのしょぼしょぼサーバで運用していたので、こんな状況もあるかなと思いましたが、なんでメモリ不足になったかまでは調査していないので、今後調査すると共に、CloudWatchを使用したメモリ監視の機能も考慮したいと思います。

残念なことに、GlastopfやCorwieの自動起動設定もやっていなかったし、NATの設定も消えてしまったので、そのあたりも設定したいと思います。

とりあえず、乗っ取られてなくてよかった。笑