我有一個配置了多個網域的 Exim 伺服器。在每個網域中我都有幾個電子郵件帳戶。配置有此類電子郵件之一的電腦有時會被感染並開始發送垃圾郵件。
我曾經使用 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
具有 form 值的標籤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