Tag Archives: 스팸

Spam Assassin + ClamAV 바이러스 필터 연동하기

기존에 SpamAssassin과 ClamAV를 연동하는 방법은 많이 있어왔지만 사실상 연동이라기 보다는 Sendmail에서 둘다 따로 호출하거나 Procmail 스크립트를 사용하는 방법등이었습니다.

다음은 ClamAV를 아예 SpamAssassin으로 합쳐 바이러스 발견시 SpamAssassin의 점수계산에 포함되도록 하는 방법입니다.

무선 ClamAV를 설치하고 시작해 보도록 하겠습니다. [이곳]에서 ClamAV 소스를 다운받아 설치합니다. 패키지 모음은 [이곳]에 있습니다.

ClamAV를 설치하기 전에 우선 사용자 계정을 추가합니다.
[code]# groupadd clamav
# useradd -g clamav -s /bin/false -c “Clam AntiVirus” -d /var/lib/clamav clamav[/code]
다운받은 소스를 설치합니다.
[code]# ./configure –sysconfdir=/etc/clamav
# make
# make install[/code]
추가로 필요한 디렉토리를 생성합니다.
[code]# mkdir /var/lib/clamav
# mkdir /var/log/clamav
# mkdir /var/run/clamav
# chown clamav.clamav /var/lib/clamav
# chown clamav.clamav /var/log/clamav
# chown clamav.clamav /var/run/clamav[/code]
/etc/clamav/clamd.conf 파일에 다음의 내용을 수정합니다.
[code]LogFile /var/log/clamav/clamd.log
LogFileMaxSize 2M
LogTime yes
PidFile /var/run/clamav/clamd.pid
TemporaryDirectory /tmp
LocalSocket /var/lib/clamav/clamd.sock
FixStaleSocket yes
ScanMail yes[/code]
다음으로는 /etc/clamav/freshclam.conf 파일을 수정합니다.
[code]UpdateLogFile /var/log/clamav/freshclam.log
PidFile /var/run/clamav/freshclam.pid
DatabaseOwner clamav
DNSDatabaseInfo current.cvd.clamav.net
DatabaseMirror db.kr.clamav.net
DatabaseMirror database.clamav.net[/code]
다음의 스크립트 파일을 /etc/rc.d/init.d 안에 추가합니다.


1066105557.xxx이제 스크립트를 실행해 봅시다.
[code]# /etc/rc.d/init.d/freshclam start
# /etc/rc.d/init.d/clamd start[/code]
/etc/cron.daily/freshclam이 생성되었다면 freshclam은 따로 데몬으로 돌리실 필요는 없습니다.
SpamAssassin이 설치된 설정 디렉토리 /etc/mail/spamassassin 안에 다음의 파일을 추가합니다.

clamav.cf
[code]loadplugin ClamAV clamav.pm
full CLAMAV eval:check_clamav()
describe CLAMAV Clam AntiVirus detected a virus
score CLAMAV 10
add_header all Virus _CLAMAVRESULT_[/code]

clamav.pm
[code]package ClamAV;
use strict;


# version 2.0, 2010-01-07
#   – use SA public interface set_tag() and add_header, instead of
#     pushing a header field directly into $conf->{headers_spam}


# our $CLAMD_SOCK = 3310;               # for TCP-based usage
our $CLAMD_SOCK = “/var/run/clamd.basic/clamd.sock”;   # change me


use Mail::SpamAssassin;
use Mail::SpamAssassin::Plugin;
use Mail::SpamAssassin::Logger;
use File::Scan::ClamAV;
our @ISA = qw(Mail::SpamAssassin::Plugin);


sub new {
  my ($class, $mailsa) = @_;
  $class = ref($class) || $class;
  my $self = $class->SUPER::new($mailsa);
  bless($self, $class);
  $self->register_eval_rule(“check_clamav”);
  return $self;
}


sub check_clamav {
  my($self, $pms, $fulltext) = @_;
  dbg(“ClamAV: invoking File::Scan::ClamAV, port/socket: %s”, $CLAMD_SOCK);
  my $clamav = new File::Scan::ClamAV(port => $CLAMD_SOCK);
  my($code, $virus) = $clamav->streamscan(${$fulltext});
  my $isspam = 0;
  my $header = “”;
  if (!$code) {
    my $errstr = $clamav->errstr();
    $header = “Error ($errstr)”;
  } elsif ($code eq ‘OK’) {
    $header = “No”;
  } elsif ($code eq ‘FOUND’) {
    $header = “Yes ($virus)”;
    $isspam = 1;
    # include the virus name in SpamAssassin’s report
    $pms->test_log($virus);
  } else {
    $header = “Error (Unknown return code from ClamAV: $code)”;
  }
  dbg(“ClamAV: result – $header”);
  $pms->set_tag(‘CLAMAVRESULT’, $header);
  # add a metadatum so that rules can match against the result too
  $pms->{msg}->put_metadata(‘X-Spam-Virus’,$header);
  return $isspam;
}


1;[/code]
이후에 File::Scan::ClamAV 를 설치하여야 합니다.

[code]# cpan File::Scan::ClamAV[/code]
이제 SpamAssassin에서 메일을 처리할때 ClamAV를 호출하여 바이러스 검사까지 하게 되며 바이러스가 존재할시 스코어 10점을 부여하고 X-Spam-Virus: Yes 헤더를 붙이게 됩니다.

세세한 점수를 확인하고 싶다면 [이곳]에서 확인해 보시면 됩니다.

SpamAssassin을 데몬형태로 사용하고 계신다면 재시작 해주시면 됩니다. 그외의 경우에는 바로 적용됩니다.

참고 : http://wiki.apache.org/spamassassin/ClamAVPlugin

중국 스패머의 탐색전

사용자 삽입 이미지
오늘 리퍼러를 보다보니 특이한 것이 남아있는것을 발견하였다. 외국의 누군가가 Google Translater를 통해 내 사이트를 본 흔적이 남아있는것이었다.

예전에도 외국의 누군가가 나의 블로그를 번역기를 통해 본것을 보았기 때문에 놀랄일도 아니지만 이번에는 좀 달랐다.

바로 발신지와 그 글의 목표가 남달랐기 때문이다. 예전 중국발 대규모 스팸 발송 대란이 있은 직후 테터툴즈/텍스트큐브 플러그인을 만들어 내놓은 적이 있었다.

여기 밑에 보일 SpamBlocker 라는것인데, 중국에서 접속하여 영어로 번역하여 이 게시글을 보았다는 것이다.

중국인이 뭣하러 테터툴즈 스팸방지 플러그인의 설명글을 읽어야 했을까? SpamBlocker를 내놓은 직후에도 계속해서 내 블로그에 스팸 공격이 있어왔고, 그것들은 완벽하게 100% 차단이 되고 있었다.

하지만 어제 이후로 공격이 끊겼다. 현재 잠잠하다는 것이다. 아마도 공격자들은 SpamBlocker의 약점을 찾아서 좀더 보완을 한 후 공격을 할려는것이 아닐까?

공격자들의 대응이 기대되기도 하고 흥분되면서도 걱정이 되는 순간이다…TNC EAS 개발자님도 마음의 준비를 해두셔야 하는 시점이 아닌가 생각해 본다.