2025年9月15日月曜日

サーバーログイン通知:msmtp を使用したメール送信

msmtp は、軽量で使いやすいSMTPクライアントです。

1. msmtpのインストール

sudo dnf install msmtp -y


Alma 10

sudo dnf --releasever-minor="" install msmtp

https://forum.directadmin.com/threads/almalinux-10-error-unable-to-find-a-match-msmtp.73169/



2. 設定ファイルの作成


ユーザーごとの設定ファイルを作成します。ここでは、Gmailを例にします。


vi ~/.msmtprc

以下の内容を記述します。


# Gmailアカウントの設定

account default

host smtp.gmail.com

port 587

auth on

tls on

tls_starttls on

from your_gmail_address@gmail.com

user your_gmail_address@gmail.com

password your_app_password

logfile ~/.msmtp.log

※your_app_passwordはGmailのアプリパスワードを使用します。通常のログインパスワードは使わない


3. 権限の設定


セキュリティのため、設定ファイルは自分だけが読み書きできるようにします。


chmod 600 ~/.msmtprc


4. スクリプトの作成


vi /usr/local/bin/login_notification.sh


#!/bin/bash


# メールアドレス設定

MAIL_ADDRESS="your_email@example.com"


# サーバーホスト名取得

HOSTNAME=$(hostname)


# ログイン情報を変数に格納

USER_NAME=$PAM_USER

LOGIN_IP=$PAM_RHOST

LOGIN_DATE=$(date +"%Y-%m-%d %H:%M:%S")


# メール件名と本文の作成

SUBJECT="SSH Login Notification: $USER_NAME on $HOSTNAME"

BODY="

User: $USER_NAME

IP Address: $LOGIN_IP

Date: $LOGIN_DATE

Server: $HOSTNAME

"


# 除外したいユーザーのリスト

EXCLUDE_USERS=("root" "testuser" "guest")


# ログインユーザーが除外リストに含まれているかチェック

for user in "${EXCLUDE_USERS[@]}"; do

    if [ "$USER_NAME" = "$user" ]; then

        # 該当ユーザーの場合、何もしないでスクリプトを終了

        exit 0

    fi

done


# 除外リストに含まれていないユーザーの場合、通知処理を実行

# ここに通知を送るコマンド(例:msmtp、curlなど)を記述

# msmtpを使ってメール送信

echo -e "Subject: $SUBJECT\nTo: $MAIL_ADDRESS\n\n$BODY" | msmtp -t


PostfixのようなフルMTAをインストールすることなく、外部のSMTPサーバー経由でメールを送信できるようになります外部SMTPサーバーへの接続設定自体は必要です。


4. スクリプトに実行権限を付与します。


sudo chmod +x /usr/local/bin/login_notification.sh



5. PAM(Pluggable Authentication Modules)の設定


pam_execモジュールを使って、ログイン成功時に先ほど作成したスクリプトを実行するように設定します。

sshdのPAM設定ファイル /etc/pam.d/sshdを編集します。


sudo vi /etc/pam.d/sshd


ファイルの末尾に以下の行を追加します。


account    required     pam_exec.so /usr/local/bin/login_notification.sh


0 件のコメント:

コメントを投稿