踏み台用や試験用でAWSにサーバを作ったときに「不正アクセスされたらどうしよう...」ってなんとなく不安になることってないですか?セキュリティグループで制限をかけているとはいえ不安...かといって一時利用なのでセキュリティに手間をかけていられないという人が安心して眠れるように、サーバにログインがあったときに自動的にメール通知してくれる設定をしてみようと思います。
今回のゴール
Windows サーバにログインが成功したら、指定のアドレスへ自動的にメールを送信する
前提条件
- 使用するサーバはAmazon EC2(windows OS)
- サーバのログオンスクリプトにメール送信操作を行うコマンドを記述したPowershellファイルを設置して、ログインをトリガーに動作させる
- メールサーバへEC2のPoweshellコマンドからアクセスできるようにアクセス認証を調整しておく
- Amazon VPC のセキュリティグループのアウト方向は全許可にしておく
- メールサービスは送信はgmailで受信はYahoo mailを使う ※申請が面倒なのでAWS SESは使いません
- メールサーバへの通信ポートは587を利用する
設定内容
①EC2を準備する
②Poweshellファイルを作成する
③サーバのログオンスクリプトを設定する
④Gmail側でアクセス認証の設定を行う
実際にやってみる
①については他に詳しい記事が多くありますので割愛します。とりあえず、RDP接続できて、インターネットへ接続できればOKです。
続いて②ですが、Powershellの中身は以下のような感じです。xxxの部分は実環境ごとに変更してください。
# Send Gmail Script
# HeaderをScript内に指定(メール送信元/送信先/件名/本文)
# gmail Account
$AccountName = "xxxxxxxx@gmail.com"
$Password = "xxxxxx"
# connect gmail
$SMTPClient = New-Object Net.Mail.SmtpClient("smtp.gmail.com", 587)
$SMTPClient.EnableSsl = $True
$SMTPClient.Credentials = New-Object
System.Net.NetworkCredential("$AccountName","$Password");
# Header
$MailFrom = "$AccountName"
$MailTo = "xxxxxx@yahoo.co.jp"
$Subject = "EC2よりメール送信テスト"
$Body = "これはEC2のログオンスクリプトからのメール送信テストです。"
# message object
$Message = New-Object Net.Mail.MailMessage($MailFrom, $MailTo, $Subject, $Body)
# send mail
$SMTPClient.Send($Message)
③で上記②で設定したPowershellがログオン時が実行されるように設定します。
タスクスケジューラーで設定する方法もありますが、今回はログオンスクリプトに設定する方法で構築します。
[Windowsボタン]+[R]を押し、gpedit.mscを検索し、アクセスします。

ローカルコンピュータポリシーエディターが開くので、[ユーザの構成]の中の[Windowsの設定]-[スクリプト「」ログオン/ログオフ]のログオンを設定します。

以下のように[Powershellスクリプト]タブへ先ほど作成したPowershellを追加します。

次に④でGmailの管理ページで、Powershellコマンドでメール送信できるように「安全性の低いアプリのアクセス」を有効にしておきます。

これをしておかないとpowershellからgmailサーバへの認証が通らないです。
では準備は整いましたので、EC2へRDPしてみましょう。
ログインすると以下のようにメール通知されていると思います。

これで安心して眠れますd(`・ω・’)
EC2から通信ポート25を使って、メール送受信しようとするとAWSへ申請などが必要で面倒ですがポート587を使って送信するだけであればややこしい申請も不要です。
参考にしたページ
[【PowerShell】Windows PowerShell を使用して GMail や Office 365 からメールを送信する]
(https://docs.microsoft.com/ja-jp/archive/blogs/junichia/powershellwindows-powershell-gmail-office-365)