複数のドメインが設定された Exim サーバーがあります。各ドメインには複数の電子メール アカウントがあります。時々、これらの電子メールの 1 つが設定されたコンピューターが感染し、スパムを送信し始めます。
以前は、送信メール アカウントのトップのレポートを取得するために Isoqlog を使用していましたが、2005 年に最後に更新されて以来、機能しなくなりました。
過去 24 時間のスパムメール アカウント上位 50 件を見つける方法が必要です (送信者ではなく、スパム送信の認証に使用されているアカウントです。送信者は偽である可能性があるため、有効なデータではありません)
これを実行できるパッケージ(Isoqlog など)があるかどうかご存知ですか? ありがとうございます
答え1
ログファイルから情報を抽出するために複雑なプログラムは必要ありません。Exim4 ログライン受信メールの場合は次のようになります。
2020-01-18 02:19:41 1iscm4-0000Nt-TE <= [email protected]\
H=verified_rdns.example.net (helo.example) [192.0.2.1] P=esmtpsa\
X=TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128 CV=no A=dovecot_gssapi:auth_user\
S=3812 [email protected]
エンベロープ送信者[email protected]
、送信ホストH=verified_rdns.example.net (helo.example) [192.0.2.1]
、および のリストが含まれますtag=value
。
私たちが最も興味を持っているのは、A
フォームの値を持つタグですauthenticator:auth_user
。authenticator
Exim4 認証子設定ファイルで指定したauth_user
認証済みユーザーです。
すべてをまとめると、簡単なスクリプトを使用して、ログ ファイルの範囲の期間内に各ユーザーが送信した電子メールの数を印刷できますbash
。
#!/bin/bash
if [ $# -lt 1 ]; then
2>& echo Usage: $0 "<exim_mainlog_file>"
2>& echo Example: $0 /var/log/exim4/mainlog
exit 1
fi
# To save typing
d='[[:digit:]]'
a='[[:alnum:]]';
pref="^$d\{4\}-$d\{2\}-$d\{2\} $d\{2\}:$d\{2\}:$d\{2\} $a\{6\}-$a\{6\}-$a\{2\}"
logfile="$1"
zgrep "$pref <=" "$logfile" |
grep -oh "A=[[:alnum:]_]\+:[[:alnum:]_]\+" |
cut -d : -f 2 |
sort |
uniq -c |
sort -rn