OpenWrt に SSH でログインした時にメールで通知する

予期していない SSH ログインを検知するために、 SSH でユーザーがログインした時にメールで通知を行うようにしました。

実行環境

ルーター
Linksys WRT1900ACS
OS
OpenWrt 22.03.2
パッケージ バージョン
msmtp 1.8.19-1

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

さくらメールの場合の例は以下です。

# 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 example.sakura.ne.jp

# Use TLS on port 465
port 587
tls on
tls_starttls on

auth on
user router-admin@hogepiyo.com
password myPasswordHere

# Construct envelope-from addresses of the form "user@oursite.example"
from router-admin@hogepiyo.com

# Syslog logging with facility LOG_MAIL instead of the default LOG_USER
syslog LOG_MAIL

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

メール送信スクリプトを設置

メール送信を行うスクリプト /root/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 /root/notify-login.sh

作成したスクリプトを実行してメールが送信されることを確認します。

# /root/notify-login.sh

/etc/profile ファイルに以下の行を追加して、ログイン時にメールが送信されるようにします。

/root/notify-login.sh

バックアップ設定

/etc/sysupgrade.conf に以下の行を追加してバックアップファイルに作成したスクリプトを含める用に設定します。

/root/

テスト

SSH で再ログインしてメールが送信されることを確認します。

注意

SSH のポートフォワーディングのみを利用する接続ではメールが送信されません。

参考

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です