본문 바로가기
서버/리눅스

Postfix + Amavisd-new + ClamAV + Spamassassin 설치하기 - Centos 7

by 사악신 2016. 5. 23.


본 포스팅은 아래 영문 포스팅의 내용을 그대로 따라해본 후기입니다.



Centos 7 는 sendmail 대신 postfix 를 사용합니다. 관련하여 이미 설치가되어있음을 가정하고 이후 패키지들을 설치합니다.(amavisd-new 설치와 함께 spamassassin 도 설치됩니다.)


yum install amavisd-new

yum install clamav clamav-update


clamav 설정 파일을 수정합니다.(Example 을 주석처리하거나 삭제함)


vi /etc/freshclam.conf

#Example

DatabaseDirectory /var/lib/clamav

UpdateLogFile /var/log/freshclam.log

DatabaseOwner clamupdate

NotifyClamd /etc/clamd.d/scan.conf


vi /etc/clamd.d/scan.conf

#Example

#User clamscan

LocalSocket /var/run/clamd.scan/clamd.sock



clamav 데이터베이스를 업데이트합니다.


freshclam


vi /etc/sysconfig/freshclam 주석을 추가합니다.(자동 업데이트가 이미 추가 되어있으므로..)

#FRESHCLAM_DELAY=disabled-warn  # REMOVE ME


cron 설정을 확인합니다.


vi /etc/cron.d/clamav-update



설정하기


vi /etc/amavisd/amavisd.conf 도메인 관련 내용을 수정합니다.

$mydomain = 'domain.com'; # 사용하는 도메인명으로...

$myhostname = 'mail.domain.com';



vi /etc/postfix/master.cf 상단에 아래 내용을 추가 또는 수정합니다.

smtp      inet  n       -       n       -       -       smtpd

 -o smtpd_sasl_auth_enable=yes

 -o receive_override_options=no_address_mappings

 -o content_filter=smtp-amavis:127.0.0.1:10024


해당 파일의 맨 아래에 다음의 내용을 추가합니다.

#

# spam/virus section

#

smtp-amavis  unix  -    -       y       -       2       smtp

 -o smtp_data_done_timeout=1200

 -o disable_dns_lookups=yes

 -o smtp_send_xforward_command=yes

127.0.0.1:10025 inet n  -       y       -       -       smtpd

 -o content_filter=

 -o smtpd_helo_restrictions=

 -o smtpd_sender_restrictions=

 -o smtpd_recipient_restrictions=permit_mynetworks,reject

 -o mynetworks=127.0.0.0/8

 -o smtpd_error_sleep_time=0

 -o smtpd_soft_error_limit=1001

 -o smtpd_hard_error_limit=1000

 -o receive_override_options=no_header_body_checks

 -o smtpd_helo_required=no

 -o smtpd_client_restrictions=

 -o smtpd_restriction_classes=

 -o disable_vrfy_command=no

 -o strict_rfc821_envelopes=yes


zip 등으로 압축된 첨부파일 내에 exe 파일이 있어도 메일 전송이 가능하도록 설정합니다.

#  qr'^\.(exe-ms|dll)$',                   # banned file(1) types, rudimentary


  qr'.\.(vbs|pif|scr|cpl)$'i,             # banned extension - basic, exe| 를 삭제함


postfix 데몬을 중지하고 spamassassin 과 amavisd 를 활성화합니다. 그리고 다시 postfix 를 실행합니다.(amavisd 가 실행되면서 clamav 도 실행됩니다. => 원문 포스팅의 내용과 달리 추가로 패키지 설치 및 설정, 실행이 필요합니다. 맨 아래 추가하였습니다. spamassassin 은 amavisd 에 포함됨)


systemctl stop postfix

systemctl start spamassassin

systemctl start amavisd

systemctl enable spamassassin

systemctl enable amavisd

systemctl start postfix


telnet 으로 Amavisd 가 정상적으로 동작하는지 확인합니다.



마찬가지로 10025 포트로 SMTP 데몬을 확인합니다.



끝으로 spamassassin 의 업데이트 설정에 주석 처리가 되어있다면 제거합니다.


vi /etc/cron.d/sa-update

# *** DO NOT MODIFY THIS FILE ***

### Spamassassin Rules Updates ###

#

# http://wiki.apache.org/spamassassin/RuleUpdates

#

# sa-update automatically updates your rules once per day if a spam daemon like

# spamd or amavisd are running.  You can force sa-update to run in

# /etc/sysconfig/sa-update

#

# /var/log/sa-update.log contains a history log of sa-update runs


10 4 * * * root /usr/share/spamassassin/sa-update.cron 2>&1 | tee -a /var/log/sa-update.log




로그를 살펴보니 "amavis[20039]: (20039-03) (!)connect to /var/run/clamd.amavisd/clamd.sock failed, attempt #1: Can't connect to a UNIX socket /var/run/clamd.amavisd/clamd.sock: 그런 파일이나 디렉터리가 없습니다" 와 같은 오류가 있어 몇 가지 추가 작업을 하였습니다.


yum install clamav-server clamav-server-systemd


설정 파일을 생성합니다.


cp /usr/share/doc/clamav-server*/clamd.sysconfig /etc/sysconfig/clamd.amavisd


vi /etc/sysconfig/clamd.amavisd 파일의 내용을 아래처럼 수정합니다.

CLAMD_CONFIGFILE=/etc/clamd.d/amavisd.conf

CLAMD_SOCKET=/var/run/clamd.amavisd/clamd.sock

#CLAMD_OPTIONS=


vi /usr/lib/systemd/system/clamd@.service 파일의 맨 아래에 다음을 추가합니다.(그리고 Timeout 시간을 충분히 늘려줍니다. 재실행시 타임아웃으로 실행이 안되는 경우 방지)

[Service]

TimeoutSec = 180


[Install]

WantedBy=multi-user.target


서비스를 실행하고 부팅시 실행되도록 설정합니다.


systemctl start clamd@amavisd

systemctl enable clamd@amavisd


아래와 같이 clamd.sock 가 생성되어있으면 성공입니다.





메일 제목에 ***UNCHECKED*** 가 붙는 경우, clamd@amavisd 가 정상적으로 실행되지 않은 경우입니다. 이때 타임아웃이 발생하였는지 혹은 메모리가 부족하지는 않은지 확인해줍니다.




스팸함으로 자동 분류되게하려면 아래와 같이 설정합니다.


yum install dovecot-pigeonhole


vi /etc/postfix/main.cf

mailbox_command = /usr/libexec/dovecot/dovecot-lda


systemctl restart postfix



vi /etc/amavisd/amavisd.conf

$allowed_added_header_fields {lc ('X-Spam-Report')} = 1;


$sa_tag_level_deflt  = 2.0;  # add spam info headers if at, or above that level

$sa_tag2_level_deflt = 6.2;  # add 'spam detected' headers at that level

#$sa_kill_level_deflt = 6.9;  # triggers spam evasive actions (e.g. blocks mail)

#$sa_dsn_cutoff_level = 10;   # spam level beyond which a DSN is not sent

#$sa_crediblefrom_dsn_cutoff_level = 18; # likewise, but for a likely valid From

## $sa_quarantine_cutoff_level = 25; # spam level beyond which quarantine is off

#$penpals_bonus_score = 8;    # (no effect without a @storage_sql_dsn database)

#$penpals_threshold_high = $sa_kill_level_deflt;  # don't waste time on hi spam

#$bounce_killer_score = 100;  # spam score points to add for joe-jobbed bounces


$final_virus_destiny      = D_REJECT;


systemctl restart amavisd



vi /etc/dovecot/conf.d/15-lda.conf

protocol lda {

  # Space separated list of plugins to load (default is global mail_plugins).

  mail_plugins = $mail_plugins sieve

}


vi /etc/dovecot/conf.d/20-managesieve.conf

protocols = $protocols sieve


service managesieve-login {

  inet_listener sieve {

    port = 4190

  }


.....


}


protocol sieve {


.....


  managesieve_max_line_length = 65536


.....

}


vi /etc/dovecot/conf.d/90-sieve.conf

#sieve = file:~/sieve;active=~/.dovecot.sieve


vi /etc/dovecot/sieve-after/spam-to-folder.sieve

require ["fileinto", "mailbox"];


if header :contains "X-Spam-Flag" "YES" {

 fileinto :create "Junk";

 stop;

}



sievec /etc/dovecot/sieve-after/spam-to-folder.sieve

systemctl restart dovecot


sieve 가 동작하면, tcp 4190 포트가 열립니다. telnet localhost 4190 으로 접속하여 정상적으로 실행되었는지 확인할 수 있습니다.



참고한 문서는

https://gist.github.com/leifdenby/93b41253056f595d62a0f0b21a6f011d

https://www.it-management-kirchberger.at/manuals-tutorials/server-centos-7/postfix-mailserver-vimbadmin/postfix-amavisd-new-clamav-spamassassin.html 입니다.




spamassassin 서비스를 중지 시키고, amavisd 서비스만 사용함 -> 재부팅시도 마찬가지...



반응형

댓글