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

서버를 업그레이드 하였습니다.

현재 이 블로그가 돌아가고 있는 투명아이 서버를 업그레이드 하였습니다. 무엇을 업그레이드 하였는지 볼까요?

사용자 삽입 이미지서버의 부품 교체를 위해 IDC에서 서버를 가져왔습니다. INTEL SR1400JR2라는 모델의 1U사이즈 랙서버입니다.

사용자 삽입 이미지먼저 기존의 SCSI하드를 SATA로 교체하기 위해 ADAPTEC SATA II RAID 2420SA를 구매하였습니다.

하드디스크 3개를 RAID 5로 묶어 사용할 것입니다.

사용자 삽입 이미지메모리는 기존의 1G에 4G를 더 꼽았습니다. 총 5G입니다.

사용자 삽입 이미지CPU는 INTEL NOCONA 3.0Ghz 두개를 달았습니다. 기존의 2.8 싱글에서 3.0 듀얼은 그다지 큰 업그레이드로 느껴지지 않는군요.

어윈데일 3.6Ghz를 구하기 위해 노력을 하였지만 단종된 물건을 구하기가 어려워 어쩔수 없었던 부분입니다.

사용자 삽입 이미지시게이트 바라쿠다 320G 3개입니다. 7200.11이라고 이번에 말 많던 모델이긴 합니다….만…최신 모델이고..

시리얼 조회해보니 문제없는 제품으로 나오더군요. 만약에 문제가 있어도 RAID빨을 믿고 교환받겠다는 의지를 가지고 써볼렵니다.

사용자 삽입 이미지정말 서버케이스를 재사용하기 위해 동분서주하여 힘들게 구한 SATA용 백플레인입니다. 기존의 SCSI용 백플레인을 띄어내고 교체하였습니다.

정말 이걸 구하는데는 한편의 드라마같은 시나리오가 있었죠. 국내에 인텔을 취급하는 모든 업체에 메일을 보내 국내에 하나밖에 없는 모델을 구했습니다.

사용자 삽입 이미지업그레이드가 완료된 서버의 모습니다. 별로 잘 모르겠지만 부품이 꽤 많이 물갈이 되었죠.

사용자 삽입 이미지멋진 서버의 자태! 앞으로 투명아이를 부탁해!