PostfixとSquirrelMailを実行するLinux CentOSベースの学習環境がありますが、私の作業はより一般的です。
メールログでメールを探す必要があります。受信者特定の時間範囲内の特定のユーザーに基づいてただ彼のLinuxユーザー名に。
私のメールログを見ることができますが、メールログを読んだ経験がなく、2つの質問があります。
ログから見たパターンは信頼できますか?つまり、受信メールのログは常にパターン
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)
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を検索することです。