当ブログですがAWS WAF(CloudFrontと連携)を設定しており、
- 自宅からはWP-login.phpへのアクセスは許可
- 自宅以外はWP-login.phpへのアクセスは全て拒否
をするようWAFで設定しています。
どれくらいブロックしているかCloudWatchのダッシュボードにメトリックグラフを設定し確認してみました。
CloudWatch:CloudFrontとWAFのメトリックグラフ
WAFのグラフを見るとBlockグラフが綺麗な水平方向の直線を描いています。
CloudFrontの4xxエラーのグラフと並べてみましたが、見事に波形が一致しています。
ついでにWAFとCloudFrontのコンソールからも確認してみます。
WAFコンソール-Block情報
1時間くらいのスコープでざっくり表示させましたが、30件以上のBlockログが上がっていました。
CloudFront-4xxエラー情報
同じく1時間のスコープで表示させました。
4xxエラーが多発しています。
2週間ほど遡ってCloudFront-4xxエラーを見てみました。
WP-login.phpに四六時中アクセスを試みているものがあるということがよく分かります。
WAFで対策を講じて良かったなー…で済ますとネタ的に面白くありません。
コンソールからもある程度の攻撃者情報は確認できるのですが、
- 情報が散見して確認に手間がかかる
- 不足している情報もあり精度の高い分析ができない
といった問題があると感じてます。
丁度AWSの分析系サービスを使ってみたいなと思ってたので、
- CloudFrontのログをS3に保管
- ログを元にAthenaやKibana(ElasticsearchService)で可視化、分析
といったことをやってみようと思います。
前振りが長くなりました、早速ログを取ります。
ログ保管用S3バケットの作成
S3コンソールを開き[バケットを作成]をクリックします。
バケット名はグローバルでユニークであれば何でもいいと思います。
[log.任意の名前]を入力し、[作成]をクリックします。
作成したバケットにCloudFrontのログを格納するフォルダを作成します。
S3のバケット一覧画面で、先ほど作成したバケットをクリックします。
[フォルダの作成]をクリックし、フォルダ名を入力し保存をクリックします。
CloudFrontの設定
CloudFrontコンソールを開き、ログ収集対象のディストリビューションをクリックします。
[General]タブを選択し[Edit]をクリックします。
[Logging]:ONにして[Bucket for Logs]と[Log Prefix]に先ほど作成したバケットとフォルダを設定し、[Yes,Edit]をクリックします。
動作確認
設定変更を行ったCloudFront-ディストリビューションのステータスがDeployになった後に、ログ格納先に指定したバケット->フォルダを確認します。
ログファイルの登録が確認できました。
解析はまた別の記事で。