grep /var/log/maillog Linuxユーザー名のみに基づいてユーザーに電子メールを送信します。

grep /var/log/maillog Linuxユーザー名のみに基づいてユーザーに電子メールを送信します。

PostfixとSquirrelMailを実行するLinux CentOSベースの学習環境がありますが、私の作業はより一般的です。

メールログでメールを探す必要があります。受信者特定の時間範囲内の特定のユーザーに基づいてただ彼のLinuxユーザー名に。

私のメールログを見ることができますが、メールログを読んだ経験がなく、2つの質問があります。

  1. ログから見たパターンは信頼できますか?つまり、受信メールのログは常にパターンto=<EMAIL>に含まれていますか?

    Jan 2 20:31:17 tmcent01 postfix/local[27450]: B58C4330038: to=<[email protected]>, orig_to=<postmaster>, relay=local, delay=9.7, delays=9.6/0.03/0/0.02, dsn=2.0.0, status=sent (delivered to mailbox)
    
  2. Linuxユーザー名は、ユーザーのEメール名とどのように一致しますか? (ユーザー名@ドメイン)が常に一致するわけではありません。そうですか?エイリアスを指定できますか?の正規表現を書くときにこれをどのように考慮しますかgrep

最初の2回の試みで三振された。

sudo grep "to=<jsmith@" /var/log/maillog | grep 1[2-4]:[0-5][0-9]:[0-5][0-9]
sudo grep -w "jsmith" /var/log/maillog | grep 1[2-4]:[0-5][0-9]:[0-5][0-9]

答え1

以下は、試してみる簡単なサンプルスクリプトです。ユーザーのエイリアスのパブリック/etc/aliasesファイルを検索します。

#!/bin/bash

# Arguments: 
# $1 = user name to be searched for
# $2 = location for e-mail log file

# First, let's create a temporary working directory.
WORKDIR=$(mktemp -d)
cd "${WORKDIR}" || exit

# Create a file for user's user name and all aliases.
echo "to=<""$1" > search_key.txt

# Then, let's find out possible alises for the user.
# Awk is used just to separate the first column.
grep "$1" /etc/aliases | awk 'BEGIN { FS=":" }; {print "to=<" $1}' >> search_key.txt

# Next, search for e-mails sent for all these.
grep -f search_key.txt "$2"

# Finally, remove the working directory.
rm -rf "${WORKDIR}"

# All done.

答え2

ログから見たパターンは信頼できますか?つまり、受信メールログを常に含める必要がありますか?

はい、Postfixで処理されるすべてのEメールにはto = ...というエントリがありますが、これにはローカルに送信されていないEメールも含まれます。また、Eメールアドレスのメールボックス部分が個々のローカルユーザーのメールボックス部分と必ずしも同じである必要はありません。 Postfixはここに拡張/交換を適用でき、MDAはここに拡張/交換を適用できます。

必要な情報をキャプチャする唯一の信頼できるメカニズムは、MTAではなくMDAを検索することです。

関連情報