Postfix+ClamAV+Spamassassin

ウィルス対策としてClamAV、スパム対策としてSpamAssassinを設定した時のメモ。
環境:
・Postfix
・Dovecot(POP/IMAP)の仮想メールボックス構成
要件:
・すべてのメールをウィルスチェック
・ウィルスメールは削除する
・スパムメールには、タイトルに[SPAM]を付ける(削除は行わない)
参考:
http://centossrv.com/postfix-clamav-spamassassin.shtml
http://unixlife.jp/unixlife/linux/s-postfix_clamav_spam.jsp


– clamd設定

$ sudo vim /etc/clamd.con
LocalSocket /var/run/clamav/clamd.sock
#TCPSocket 3310
$ sudo /etc/rc.d/init.d/clamd restart

– amavisd-newインストール

$ sudo yum install amavisd-new --enablerepo=rpmforge

– amavisd-new設定

$ sudo vim /etc/amavisd.conf
...
# COMMONLY ADJUSTED SETTINGS:
$undecipherable_subject_tag = '';
...
# @bypass_spam_checks_maps  = (1);  # controls running of anti-spam cod
...
$mydomain = 'sample.com';   # a convenient default for other settings
...
#$QUARANTINEDIR = "/var/virusmails";
...
#$virus_admin               = "virusalert\@$mydomain";
...
$sa_spam_subject_tag = '[SPAM] ';
...
$final_spam_destiny       = D_PASS;
...
# ### http://www.clamav.net/
# ['ClamAV-clamd',
#   \&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd"],
#   qr/\bOK$/, qr/\bFOUND$/,
#   qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],
以下を追加
### http://www.clamav.net/
['ClamAV-clamd',
\&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd.sock"],
qr/\bOK$/, qr/\bFOUND$/,
qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],
...
# qr'^\.(exe-ms|dll)$',                   # banned file(1) types, rudimentary

– サービス起動/起動設定

$ sudo /etc/rc.d/init.d/amavisd start
$ sudo chkconfig amavisd on

– spamassassin起動/起動設定

$ sudo /etc/rc.d/init.d/spamassassin start
$ sudo chkconfig spamassassin on

– spamassassin設定

$ sudo vim /etc/mail/spamassassin/v310.pre
...
loadplugin Mail::SpamAssassin::Plugin::TextCat
...

– spamassassinアップデート

$ cd /usr/local/sbin
$ sudo vim spamassassin-update
#!/bin/bash
# SpamAssassin設定ファイル最新版ダウンロード
cd /etc/mail/spamassassin
wget -qN http://www.flcl.org/~yoh/user_prefs
# 設定ファイル更新時のみSpamAssassin再起動
diff user_prefs user_prefs.org > /dev/null 2>&1
if [ $? -ne 0 ]; then
cp user_prefs local.cf
# スパム判断したメールを添付形式にしないように設定
echo "report_safe 0" >> local.cf
# スパム判断したメールの件名に「***SPAM***」を付加するように設定※受信メールサーバーがPOPの場合のみ
echo "rewrite_header Subject ***SPAM***" >> local.cf
# SpamAssassin再起動
/etc/rc.d/init.d/spamassassin restart > /dev/null
fi
cp user_prefs user_prefs.org
$ sudo chmod +x spamassassin-update
$ sudo ./spamassassin-update
$ ls -l /etc/mail/spamassassin/
合計 1180
-rw-r--r-- 1 root root   1299  1月 21  2009 init.pre
-rw-r--r-- 1 root root 385185  4月  2 18:27 local.cf
-rw-r--r-- 1 root root     62  1月 21  2009 spamassassin-default.rc
-rwxr-xr-x 1 root root     35  1月 21  2009 spamassassin-helper.sh*
-rw-r--r-- 1 root root     55  1月 21  2009 spamassassin-spamc.rc
-rw-rw-r-- 1 root root 385137  4月  1 16:11 user_prefs
-rw-rw-r-- 1 root root 385137  4月  2 18:27 user_prefs.org
-rw-r--r-- 1 root root   2602  3月 29 14:15 v310.pre
-rw-r--r-- 1 root root   1195 &
nbsp;1月 21  2009 v312.pre
-rw-r--r-- 1 root root   2416  1月 21  2009 v320.pre

– spamassassinルール自動更新

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

– postfix(追記)

$ sudo vim /etc/postfix/main.cf
...
mailbox_command = /usr/bin/procmai
...

– procmail設定(仮想メールボックス環境では上手く動作しなかった)

$ sudo vim /etc/procmailrc
SHELL=/bin/bash
PATH=/usr/bin:/bin
DROPPRIVS=yes
MAILDIR=/var/mail/vmail/$LOGNAME/Maildir
DEFAULT=$MAILDIR/
SPAM=$MAILDIR/.Spam/
LOGFILE=$MAILDIR/.procmail.log # ログ出力先
#VERBOSE=ON # 詳細ログ出力
# SpamAssassinによるスパムチェック
:0fw
|/usr/bin/spamc
# SpamAssassinにより判定されたSpam-Levelが一定値(ここでは20)以上の場合は削除
# ※必要なメールが削除されてしまう可能性があることに留意すること
#:0
#* ^X-Spam-Level: \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
#/dev/null

– postfix設定

$ sudo vim /etc/postfix/master.cf
...
smtp-amavis unix -    -    n    -    2  smtp
-o smtp_data_done_timeout=1200
-o smtp_send_xforward_command=yes
-o disable_dns_lookups=yes
127.0.0.1:10025 inet n    -    n    -    -  smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_client_restrictions=
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks=127.0.0.0/8
-o strict_rfc821_envelopes=yes
-o smtpd_error_sleep_time=0
-o smtpd_soft_error_limit=1001
-o smtpd_hard_error_limit=1000
$ sudo vim /etc/postfix/main.cf
...
content_filter=smtp-amavis:[127.0.0.1]:10024
$ sudo /etc/rc.d/init.d/postfix restart

– スパムメール振り分け設定(IMAP)
– 既存ユーザ向け(“.Spam”フォルダ作成)

$ cd /usr/local/sbin
$ sudo vim spamfolder-create
#!/bin/bash
for user in `ls /home`
do
id -u $user > /dev/null 2>&1
if [ $? -eq 0 ] && [ ! -d /home/$user/Maildir/.Spam ]; then
mkdir -p /home/$user/Maildir/.Spam/new
mkdir -p /home/$user/Maildir/.Spam/cur
mkdir -p /home/$user/Maildir/.Spam/tmp
chmod -R 700 /home/$user/Maildir/.Spam
chown -R $user. /home/$user/Maildir/.Spam
echo $user
fi
done
$ sudo sh spamfolder-create
user
・
・
・
user
$ sudo rm -f spamfolder-create

– 新規ユーザ向け

$ sudo mkdir -p /etc/skel/Maildir/.Spam/{new,cur,tmp}
$ sudo chmod -R 700 /etc/skel/Maildir/.Spam

– spamassassinがスパムと判定したメールは、”.Spam”ディレクトリへ

$ sudo vim /etc/procmailrc ← procmail設定ファイル編集
...
# SpamAssassinがスパム判定したメールはスパム専用メールボックスへ配