티스토리 뷰

최근 스팸이 많아져서 스팸을 걸러낼 방법을 찾아보았다.  여러가지 방법중에
조만간 아파치 프로젝트에 합류하게 될 SpamAssassin을 시도해 보았다.


SpamAssassin은 여러가지 방법으로 스팸을 찾는다.
 * 헤더와 본문에서 미리 정의한 규칙을 찾는다.
      http://www.spamassassin.org/tests.html 을 보니 규칙이 900개가 넘는다.
 * 협동적인 스팸 데이터베이스에서 동일한 메일이 스팸으로 등록되었는지 확인한다.
      DCC, Pyzor, Razor2, RBL, mail-abuse.org, ordb.org 등을 이용한다.
  * Bayesian 필터
      검사해온 결과, 스팸에 포함된 단어들과 스팸이 아닌 메일에 포함된 단어들의
      확률을 가지고 스팸 여부를 판단한다.  A Plan for Spam 참고.
 * 검사해온 결과를 바탕으로 whitelist와 blacklist를 유지한다.
 * 직접 whitelist와 blacklist를 지정할 수도 있다.


약 3일간 사용해본 결과 총 288개 스팸중 88%인 254개를 걸러냈고, 스팸이 아닌
메일 (온라인 서점의 주기적인 홍보 메일) 1개를 스팸으로 잘못 판단하였다.



----------------------------------------


SpamAssassin은 모든 사용자가 사용하도록 설치하여 서버/클라이언트 방식으로
동작할 수 있고, 여러 인터페이스를 사용하여 프로그래밍할 수도 있다.  나는

간단히 개인용도로 사용하려고 내 홈디렉토리에 설치하였다.


소스코드를 다운받고 압축을 푼 다음,

    perl Makefile.PL PREFIX=~/local/sa SYSCONFDIR=~/local/sa
    make
    make install


그리고 ~/.procmailrc 에 인터넷에서 찾은 다음과 같은 설정을 추가하였다.


# SpamAssassin sample procmailrc
#
# Pipe the mail through spamassassin (replace 'spamassassin' with 'spamc'
# if you use the spamc/spamd combination)
#
# The condition line ensures that only messages smaller than 250 kB
# (250 * 1024 = 256000 bytes) are processed by SpamAssassin. Most spam
# isn't bigger than a few k and working with big messages can bring
# SpamAssassin to its knees.
#
# The lock file ensures that only 1 spamassassin invocation happens
# at 1 time, to keep the load down.
#
:0fw: spamassassin.lock
* < 256000
| ~/local/sa/bin/spamassassin

# Mails with a score of 15 or higher are almost certainly spam (with 0.05%
# false positives according to rules/STATISTICS.txt). Let's put them in a
# different mbox. (This one is optional.)
:0:
* ^X-Spam-Level: \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
almost-certainly-spam

# All mail tagged as spam (eg. with a score higher than the set threshold)
# is moved to "probably-spam".
:0:
* ^X-Spam-Status: Yes
probably-spam

# Work around procmail bug: any output on stderr will cause the "F" in "From"
# to be dropped.  This will re-add it.
:0
* ^^rom[ ]
{
  LOG="*** Dropped F off From_ header! Fixing up. "

  :0 fhw
  | sed -e '1s/^/F/'
}


SpamAssassin은 메일에 점수를 매겨서 특정 점수(기본값 5)가 넘으면 스팸으로
분류한다.  위의 설정은 15점이 넘은 메일을 almost-certainly-spam 편지함에

저장하고, 15~5점인 메일을 probably-spam 편지함에 저장한다.  즉, 혹시

SpamAssassin이 스팸이 아닌 메일을 스팸으로 분류할지 걱정이 된다면 가끔씩

probably-spam 편지함을 살펴보면 된다.  SpamAssassin은 스팸으로 분류한

메일 본문에 간단한 설명문구와 다음과 같은 점수 내역을 추가한다.


Content analysis details:   (8.4 points, 5.0 required)

 pts rule name                         description
---- ----------------------            --------------------------------------------------
 2.7 SUB_HELLO                        Subject starts with "Hello"
 0.3 NO_REAL_NAME                   From: does not include a real name
 0.1 MICROSOFT_EXECUTABLE    RAW: Message includes Microsoft executable program
 3.3 MSGID_FROM_MTA_SHORT   Message-Id was added by a relay
 1.2 MISSING_MIMEOLE              Message has X-MSMail-Priority, but no X-MimeOLE
 0.8 PRIORITY_NO_NAME            Message has priority setting, but no X-Mailer


개인적으로 걸러지지않은 스팸을 spam 편지함에 저장하여, 가끔씩


    ~/local/sa/bin/sa-learn --spam --mbox spam


명령을 실행해 주었다.  sa-learn은 Bayesian 필터를 훈련시키는 명령어로,

--mbox 옵션은 편지함을 입력으로 준다는 뜻이고, 스팸은 --spam 옵션을 스팸이

아닌 일반 메일은 --ham 옵션을 지정한다.  이미 훈련한 메일을 기억하고

있기때문에 동일한 메일함을 여러번 훈련에 사용하여도 새로 들어온 메일만을

훈련에 사용한다.  참고로 SpamAssassin은 자신이 스팸으로 분류한 메일을

자동으로 훈련시킨다.  그래서 잘못 스팸으로 분류된 메일은 --ham 옵션으로
훈련시켜주는 것이 좋다.


아직 Bayesian 필터의 효과는 없는 것 같지만, 시간이 지나면 나아지리라고

기대한다.  SpamAssassin 자체 설정파일은 ~/.spamassassin/user_prefs 이며,

프로그램을 처음 실행할때 (즉, 메일이 처음으로 도착할때) 자동으로 만들어진다.

혹시 설정파일을 수정하고 싶다면 http://www.yrex.com/spam/spamconfig.php
가 도움이 될 것이다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크