3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

SSHログインを監視したい(SSHログインがあったらメール通知)+ メール送信はAmazon SESを使いたい

Last updated at Posted at 2019-10-31

環境

  • CentOS 7
  • Amazon SES

追記

以降のSES設定を記載する方法は冗長だったので、mailコマンドは使える前提で、必要な処理だけ(SES設定なし)の記事を作成しました。

[改良]SSHログイン監視(ログインがあったら通知/自IPは通知除外) - Qiita

やりたいこと

  • SSHログインがあった時にメール通知したい(mailコマンド利用)
  • メール送信サーバ(SMTP)は、Amazon SESを使用

実現方法

  • /etc/ssh/sshrc を作成して、メール送信処理を実装する(*1)
  • Amazonの証明書がないとログインしたユーザに警告が表示されるのでインストールする

(*1)この方法だと捕捉できるのはSSHログインのみであり、また @angel_p_57 様がコメントで指摘してくださったような留意事項もあります。代替手段として PAMを使った方法もあります。

angel_p_57 様のコメント
sshrcがログイン時処理追加用なのは確かですが、これはX転送時のxauth処理を請け負う想定なので、
本記事のような実装だと、X転送に齟齬が出ます。…というのは注意点になります。
参考: sshd(8)のSSHRCの項

sshに限らず、ログイン時の(メール送信等)プログラム自動実行を実現する場合、PAMを利用することもできますので、参考まで。
http://www.mikitechnica.com/19-notify-login-pam-exec.html

手順

SES設定

SMTP認証情報を取得

SESコンソールの「SMTP Settings」でSever Nameを控えます。
Create My SMTP Credentialsボタン押下してSMTPユーザ名・パスワードを生成して控えます。

送信元メールアドレスをVerifyする

SESサンドボックスの解除

SESは初期状態では送信制限があります。申請して解除してもらいます。

Amazon SES サンドボックスの外への移動 - Amazon Simple Email Service
https://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/request-production-access.html

SSH設定

/etc/ssh/sshrcというファイルを作成します。このファイルはすべてのユーザがSSHログインした際に自動的に実行されます。
このファイル内でmailxコマンド(存在しない場合は yum install mailx)を使って、メール送信します。

認知しているIPアドレスは通知をSKIPしたい場合のコード

IPS変数に指定します。(複数指定したい場合は空白で区切ります)

MAIL_TO=to@example.com

FOUND=0
IPS="123.456.78.901"
DETECT_IP=
for ip in $IPS
do
  if [ "${SSH_CLIENT:0:${#ip}}" = "$ip" ]; then
    FOUND=1
    DETECT_IP=$ip
  fi
done

if [ $FOUND = 0 ]; then
  echo ""$USER" has logged in from [$SSH_CLIENT] at `date +"%Y/%m/%d %H:%M:%S"` " | mail -s "[$HOSTNAME ]sshd login alert" $MAIL_TO
# else
#  echo "detect defined ip [$DETECT_IP]" | mail -s "[$HOSTNAME ]sshd login alert" $MAIL_TO
fi

この時にSMTPサーバとしてSESを指定します。

/etc/ssh/sshrc
# 変数の設定
BODY=""$USER" has logged in from [$SSH_CLIENT] at `date +"%Y/%m/%d %H:%M:%S"` "
SUBJECT="[$HOSTNAME ]sshd login alert"
SMTP_SERVER=smtp://★SESのSever Name(リージョンにより異なるので注意)★:587
SMTP_USER=★SMTPユーザ★
SMTP_PASSWORD=★SMTPパスワード★
MAIL_FROM=★送信元メールアドレス(SESでverify済であること)★
MAIL_TO=★送信先メールアドレス(SESのサンドボックス解除されていればVerify不要)★

# SESをSMTPサーバに指定してメール送信
# エラーがなくなるまでは mail コマンドに -v(vobose) オプションをつけて実行するのがおすすめ
echo $BODY | mailx -s "$SUBJECT" \
-S smtp-use-starttls \
-S ssl-verify=ignore \
-S smtp-auth=login \
-S smtp=$SMTP_SERVER \
-S from=$MAIL_FROM \
-S smtp-auth-user=$SMTP_USER \
-S smtp-auth-password=$SMTP_PASSWORD \
-S ssl-verify=ignore \
-S nss-config-dir=/etc/pki/nssdb \
$MAIL_TO 

IP除外できるバージョン

★-S で指定している設定は、~/.mailrc に記載することもできますが、この場合、各ユーザごとにmailrcファイルが必要となります。

Amazon証明書のインストール

【参考にさせていただいた記事】Amazon SES + mailx で「Error in certificate: Peer's certificate issuer is not recognized.」が出た時の対処法

前述までの内容でメールは送信されるようになりますが、ログインしたユーザのコンソールに以下の警告が表示されます。
この警告を消すにはAmazonの証明書インストールが必要です。

Error in certificate: Peer's certificate issuer is not recognized.

Amazon証明書をダウンロードして、証明書データベースに追加します。

# cd ~/
# wget https://www.amazontrust.com/repository/AmazonRootCA1.pem
# certutil -A -n "Amazon Cert" -t "C,," -d /etc/pki/nssdb -i ~/AmazonRootCA1.pem -a

証明書データベースの内容を確認します。★で囲んだ内容が表示されればOKです。

# certutil -L -d /etc/pki/nssdb
Certificate Nickname                                         Trust Attributes
                                                             SSL,S/MIME,JAR/XPI

★Amazon Cert                                                  C,,  ★

トラブルシューティング

エラーが原因を特定するには以下の方法があります。

  • mailxコマンドに-vオプションを付与して実行する
  • メールログを確認する # tail -f /var/log/maillog

付録

SESメール送信時警告

サーバーに証明書を設定しないとSSHログイン時にコンソールに警告が送出されます。
ssl-verify=ignore 設定しているのでメールそのものは送信できていますが,気になる場合は,以下を参考に設定してください。

Amazon SES + mailx で「Error in certificate: Peer's certificate issuer is not recognized.」が出た時の対処法 - Qiita

おまけ送信されてくるメール

上述したスクリプトでは、以下のようなメールが送信されてきます。

3
3
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?