본 포스팅은 아래 영문 포스팅의 내용을 그대로 따라해본 후기입니다.
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
spamassassin 서비스를 중지 시키고, amavisd 서비스만 사용함 -> 재부팅시도 마찬가지...
'서버 > 리눅스' 카테고리의 다른 글
RoundCube 웹메일 설치하기 - nginx, php-fpm, CentOS 7 (0) | 2016.05.27 |
---|---|
xrdp 원격데스크탑 연결 - CentOS 7 (0) | 2016.05.25 |
CentOS 7 Docker 설치하기 (0) | 2016.02.18 |
CentOS 7.x 에서 php 5.6.x 또는 7 설치하기 (0) | 2015.04.22 |
CentOS 7 서비스 관리 (0) | 2015.04.22 |
댓글