smtpd, spampd, dovecot 및 SpamAssassin을 사용하여 스팸을 필터링하려고 하는데 spampd/dovecot에 의해 추가된 X-Spam-Report(점수가 낮음)와 독립 실행형 실행( 점수가 높은 것).
저는 Fedora 25 x64를 사용하고 있습니다. spampd는 포트 10029에서 실행 중이며 10030으로 릴레이됩니다.
SPAMPD_OPTIONS="--a --L --maxsize=500 --host=127.0.0.1:10029 --relayhost=127.0.0.1:10030"
smtpd는 spampd에 보낸 다음 응답을 dovecot에 전달합니다.
listen on lo port 10030 tag SPAMPD
accept tagged SPAMPD for domain <domains> virtual <users> deliver to lmtp "/run/dovecot/lmtp" rcpt-to
accept from any for domain <domains> relay via smtp://127.0.0.1:10029
Dovecot에는 스팸 폴더에 스팸을 넣는 글로벌 체(Global Sieve)가 있습니다.
if header :contains "X-Spam-Flag" "YES" {
addflag "\\Seen";
fileinto "Spam";
stop;
}
SpamAssassin local.cf:
required_score 5
report_safe 0
add_header spam Flag _YESNOCAPS_
add_header all Status _YESNO_, score=_SCORE_ required=_REQD_ tests=_TESTS_ autolearn=_AUTOLEARN_ version=_VERSION_
add_header all Level _STARS(*)_
add_header all Checker-Version SpamAssassin _VERSION_ (_SUBVERSION_) on _HOSTNAME_
add_header all Report _REPORT_
init.pre 및 기타 사전 파일:
$ grep -hv -e "^#" -e "^\\s*$" /etc/mail/spamassassin/*pre
loadplugin Mail::SpamAssassin::Plugin::URIDNSBL
loadplugin Mail::SpamAssassin::Plugin::Hashcash
loadplugin Mail::SpamAssassin::Plugin::SPF
loadplugin Mail::SpamAssassin::Plugin::Pyzor
loadplugin Mail::SpamAssassin::Plugin::Razor2
loadplugin Mail::SpamAssassin::Plugin::SpamCop
loadplugin Mail::SpamAssassin::Plugin::AutoLearnThreshold
loadplugin Mail::SpamAssassin::Plugin::WhiteListSubject
loadplugin Mail::SpamAssassin::Plugin::MIMEHeader
loadplugin Mail::SpamAssassin::Plugin::ReplaceTags
loadplugin Mail::SpamAssassin::Plugin::DKIM
loadplugin Mail::SpamAssassin::Plugin::Check
loadplugin Mail::SpamAssassin::Plugin::HTTPSMismatch
loadplugin Mail::SpamAssassin::Plugin::URIDetail
loadplugin Mail::SpamAssassin::Plugin::Bayes
loadplugin Mail::SpamAssassin::Plugin::BodyEval
loadplugin Mail::SpamAssassin::Plugin::DNSEval
loadplugin Mail::SpamAssassin::Plugin::HTMLEval
loadplugin Mail::SpamAssassin::Plugin::HeaderEval
loadplugin Mail::SpamAssassin::Plugin::MIMEEval
loadplugin Mail::SpamAssassin::Plugin::RelayEval
loadplugin Mail::SpamAssassin::Plugin::URIEval
loadplugin Mail::SpamAssassin::Plugin::WLBLEval
loadplugin Mail::SpamAssassin::Plugin::VBounce
loadplugin Mail::SpamAssassin::Plugin::ImageInfo
loadplugin Mail::SpamAssassin::Plugin::FreeMail
loadplugin Mail::SpamAssassin::Plugin::AskDNS
나는 정기적으로 스팸과 햄을 훈련시킵니다.
$ find /var/vmail -type f -not -path .imap -and -name TrainSpam | xargs sa-learn --mbox --spam --no-sync --dbpath /root/.spamassassin/
$ find /var/vmail -type f -not -path .imap -and \( -name inbox -or -name Archives \) | xargs sa-learn --mbox --ham --no-sync --dbpath /root/.spamassassin/
$ sa-learn --sync --dbpath /root/.spamassassin/
이로 인해 각각 수천 개가 생성되었습니다.
$ sa-learn --dump magic
0.000 0 3 0 non-token data: bayes db version
0.000 0 6138 0 non-token data: nspam
0.000 0 3219 0 non-token data: nham
0.000 0 131230 0 non-token data: ntokens
0.000 0 1516588946 0 non-token data: oldest atime
0.000 0 1519351200 0 non-token data: newest atime
0.000 0 0 0 non-token data: last journal sync atime
0.000 0 1519352084 0 non-token data: last expiry atime
0.000 0 2764800 0 non-token data: last expire atime delta
0.000 0 279622 0 non-token data: last expire reduction count
이제 문제입니다. 예를 들어, 저는 "의회가 주택 소유자에게 일생에 한 번 있는 모기지 구제 금융을 제공합니다"라는 제목과 매우 유사한 7개의 스팸 메시지를 받았습니다.
dovecot이 제공한 최신 소스를 살펴보면 매우 낮은 스팸 점수가 다음과 같이 표시됩니다.
X-Spam-Report:
* 2.0 BAYES_50 BODY: Bayes spam probability is 40 to 60%
* [score: 0.5059]
* 1.3 HTML_IMAGE_ONLY_24 BODY: HTML: images with 2000-2400 bytes of words
* 0.0 HTML_MESSAGE BODY: HTML included in message
* 0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
* 0.0 T_REMOTE_IMAGE Message contains an external image
그러나 spamassassin -D < email.txt
동일한 이메일을 실행하면 높은 스팸 점수가 표시됩니다(이 이메일은 위보다 최신 Bayes DB를 통해 실행되었습니다).
X-Spam-Report:
* 3.5 BAYES_99 BODY: Bayes spam probability is 99 to 100%
* [score: 1.0000]
* 0.0 URIBL_BLOCKED ADMINISTRATOR NOTICE: The query to URIBL was blocked.
* See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block
* for more information.
* [URIs: mirror24news.com]
* 0.0 T_SPF_HELO_TEMPERROR SPF: test of HELO record failed (temperror)
* 0.0 HTML_MESSAGE BODY: HTML included in message
* 0.2 BAYES_999 BODY: Bayes spam probability is 99.9 to 100%
* [score: 1.0000]
* 1.6 HTML_IMAGE_ONLY_24 BODY: HTML: images with 2000-2400 bytes of words
* 1.9 RAZOR2_CF_RANGE_51_100 Razor2 gives confidence level above 50%
* [cf: 100]
* 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily
* valid
* 0.9 RAZOR2_CHECK Listed in Razor2 (http://razor.sf.net/)
* 0.0 T_DKIM_INVALID DKIM-Signature header exists but is not valid
둘이 왜 다른가요?