予期していない SSH ログインを検知するために、 SSH でユーザーがログインした時にメールで通知を行うようにしました。
コンテンツ
実行環境
- ルーター
- Linksys WRT1900ACS
- OS
- OpenWrt 19.07.3
パッケージ | バージョン |
---|---|
msmtp | 1.8.7-2 |
msmtp をインストール
ルーターからメールを送信するために SMPT クライアントをインストールします。
Postfix のような完全な MTA をインストールすることもできますが、ソフトウェアのサイズが大きい、定期的なディスクアクセスが発生する等の OpenWrt で使うには不向きな点があります。このため、SMPT クライアントから外部のメールサーバーを経由してメールを送信します。
以下のコマンドで msmtp をインストールします。
# opkg update
# opkg install msmtp
ファイル /etc/msmtprc を編集して以下の行を追加、変更します。パスワードを平文で設定ファイルに書くことになるので、 msmtp のために新しく送信専用のフリーメールアドレスを取得しました。
host smtp.gmail.com
port 587
from username@gmail.com
auth on
user username
password PASSWORD
gmail を使う場合は以下のような設定ファイルになります。PASSWORD は記号を含まない英数字が無難です。
# Example for a system wide configuration file
# A system wide configuration file is optional.
# If it exists, it usually defines a default account.
# This allows msmtp to be used like /usr/sbin/sendmail.
account default
# The SMTP smarthost
host smtp.gmail.com
# Use TLS on port 465
port 587
tls on
tls_starttls off
# Construct envelope-from addresses of the form "user@oursite.example"
from username@gmail.com
auth on
user username
password PASSWORD
# Syslog logging with facility LOG_MAIL instead of the default LOG_USER
syslog LOG_MAIL
一般ユーザーでもメールが送信できるようにするために設定ファイルのパーミッションを変更します。
# chmod 644 /etc/msmtprc
msmtp は sendmail コマンドと互換性があるので、シンボリックリンクを設置して sendmail コマンドとしても使えるようにします。
# ln -s /usr/bin/msmtp /usr/sbin/sendmail
以下のコマンドでメール送信のテストをします。”Sender’s Name <username@gmail.com>” と recipient@gmail.com で送信元と受信先を指定します。
# echo -e "Subject: Test mail\n\nThis is a test mail." | sendmail -f "Sender's Name <username@gmail.com>" recipient@gmail.com
メール送信スクリプトを設置
メール送信を行うスクリプト notify-login.sh を以下の内容で作成します。HOST_NAME、RECIPIENT、SENDER を変更して下さい。
#!/bin/sh
HOST_NAME="hogepiyo.com"
RECIPIENT="recipient@gmail.com"
SENDER="OpenWrt <username@gmail.com>"
SOURCE_IP=`echo $SSH_CONNECTION | cut -d " " -f 1`
MESSAGE="To: $RECIPIENT
Subject: '$USER' has logged in '$HOST_NAME'
From: $SENDER
'$USER' has logged in successfully from '$SOURCE_IP' on $HOST_NAME.
Login Time: `date +\"%Y-%m-%d %T %Z\"`
`env`
"
echo "$MESSAGE" | sendmail -t &
パーミッションを変更して実行可能にします。
# chmod 755 ./notify-login.sh
作成したスクリプトを実行してメールが送信されることを確認します。
# ./notify-login.sh
/etc/profile ファイルに以下の行を追加して、ログイン時にメールが送信されるようにします。
/path/to/script/notify-login.sh
テスト
SSH で再ログインしてメールが送信されることを確認します。
注意
SSH のポートフォワーディングのみを利用する接続ではメールが送信されません。