2006-12-21 16:49:35過路人而已
AMaVisd-new 設定
【amavisd-new Installation 部份摘錄】
原作者:
元智大學資訊管理學系曾義峰(s882617@mail.yzu.edu.tw)
Step 1:
# cd /usr/ports/security/amavisd-new/
# make install clean
# cd /usr/local/etc
# cp amavisd.conf-dist amavisd.conf
# chown vscan amavisd.conf
# chmod 750 amavisd.conf
# chown vscan /usr/local/sbin/amavisd
# chmod 750 /usr/local/sbin/amavisd
修改 amavisd.conf 的選項
$mydomain = '[你的FQDN]';
$TEMPBASE = "/tmp";
$forward_method = 'smtp:127.0.0.1:10025';
$notify_method = $forward_method;
以下的設定請自行選擇
$virus_admin = "vscan@$mydomain"
$mailfrom_notify_admin = "vscan@$mydomain";
$mailfrom_notify_recip = "vscan@$mydomain";
$mailfrom_notify_spamadmin = "vscan@$mydomain";
# $QUARANTINEDIR = '/var/virusmails';
關於 postfix ,則於 /usr/local/etc/postfix/master.cf 新增二筆
smtp-amavis unix - - n - 2 smtp
-o smtp_data_done_timeout=1200
-o disable_dns_lookups=yes
127.0.0.1:10025 inet n - n - - smtpd
-o content_filter=
<註> 關於 127.0.0.1:10025 的 content_filter 為空白,
是因為若於 postfix 的 main.cf 中,先前已有定義 content_filter 的話,
可能會造成在 local 端無限轉寄給自己,若無限轉寄的情形發生,
postfix 會給出信件的錯誤訊息為「Error: too many hops 」。
<註> 關於 smtp-amavis 中 command 欄的 smtp ,
由於 postfix 1 在 lmtp protocol 有兩個小問題,
若是使用 postfix 2 則可以改為 lmtp ,
而 lmtp 的好處為「This brings multi-session mail transaction capability and per-recipient status responses」- 截取自官方網站,
且可以更改 postfix 的main.cf 中 'max_use' 的參數來限制 session 重覆使用,
官方範例是改為 10 (預設為 100)。smtp-amavis 修改過後如下:
原作者:
元智大學資訊管理學系曾義峰(s882617@mail.yzu.edu.tw)
Step 1:
# cd /usr/ports/security/amavisd-new/
# make install clean
# cd /usr/local/etc
# cp amavisd.conf-dist amavisd.conf
# chown vscan amavisd.conf
# chmod 750 amavisd.conf
# chown vscan /usr/local/sbin/amavisd
# chmod 750 /usr/local/sbin/amavisd
修改 amavisd.conf 的選項
$mydomain = '[你的FQDN]';
$TEMPBASE = "/tmp";
$forward_method = 'smtp:127.0.0.1:10025';
$notify_method = $forward_method;
以下的設定請自行選擇
$virus_admin = "vscan@$mydomain"
$mailfrom_notify_admin = "vscan@$mydomain";
$mailfrom_notify_recip = "vscan@$mydomain";
$mailfrom_notify_spamadmin = "vscan@$mydomain";
# $QUARANTINEDIR = '/var/virusmails';
關於 postfix ,則於 /usr/local/etc/postfix/master.cf 新增二筆
smtp-amavis unix - - n - 2 smtp
-o smtp_data_done_timeout=1200
-o disable_dns_lookups=yes
127.0.0.1:10025 inet n - n - - smtpd
-o content_filter=
<註> 關於 127.0.0.1:10025 的 content_filter 為空白,
是因為若於 postfix 的 main.cf 中,先前已有定義 content_filter 的話,
可能會造成在 local 端無限轉寄給自己,若無限轉寄的情形發生,
postfix 會給出信件的錯誤訊息為「Error: too many hops 」。
<註> 關於 smtp-amavis 中 command 欄的 smtp ,
由於 postfix 1 在 lmtp protocol 有兩個小問題,
若是使用 postfix 2 則可以改為 lmtp ,
而 lmtp 的好處為「This brings multi-session mail transaction capability and per-recipient status responses」- 截取自官方網站,
且可以更改 postfix 的main.cf 中 'max_use' 的參數來限制 session 重覆使用,
官方範例是改為 10 (預設為 100)。smtp-amavis 修改過後如下:
smtp-amavis unix - - n - 2 lmtp
-o smtp_data_done_timeout=1200
-o disable_dns_lookups=yes
測試
# /usr/local/sbin/postfix stop
# /usr/local/sbin/postfix start
# su - vscan
# /usr/local/sbin/amavisd debug
開啟另一個(虛擬)終端機,執行:
# telnet localhost 10024
Trying 127.0.0.1...
Connected to localhost.mis.yzu.edu.tw.
Escape character is '^]'.
220 [127.0.0.1] ESMTP amavisd-new service ready
MAIL FROM:<xxx@domain.edu.tw>
250 2.1.0 Sender xxx@domain.edu.tw OK
RCPT TO:<xxx@domain.edu.tw>
250 2.1.5 Recipient xxx@domain.edu.tw OK
DATA
354 End data with <CR><LF>.<CR><LF>
Subject: Test 1
Test
.
250 2.6.0 Ok, id=89173-01, from MTA: 250 Ok: queued as 2E0DAEB
RSET
250 2.0.0 Ok RSET
MAIL FROM:<xxx@domain.edu.tw>
250 2.1.0 Sender xxx@domain.edu.tw OK
RCPT TO:<xxx@domain.edu.tw>
250 2.1.5 Recipient xxx@domain.edu.tw OK
DATA
354 End data with <CR><LF>.<CR><LF>
Subject: Test 2
X5O!P%@AP[4PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
.
250 2.5.0 Ok, but 1 BOUNCE <-- 出現這行表示成功認知此信件可能含有 Virus
QUIT
Step 2:配合 Spamassassin
在新版的 AMaVisd-new 已經將 Spamassassin 整合進來,所以只要用 ports 安裝好 AMaVisd-new ,則 Spamassassin 也已安裝好。
若伺服器不需要 Spamassassin 的功能,則此步驟可以略過,直接至 Step 3。
新增使用者
# pw useradd spam -c "Spam Bayes Learner" -d /var/empty -s /sbin/nologin
# pw useradd notspam -c "Not Spam Bayes Learner" -d /var/empty -s /sbin/nologin
於 /usr/local/etc/mail/spamassassin/local.cf 加入 (若無 local.cf ,則請自行建立)
use_bayes 1
bayes_path /var/amavis/.spamassassin/bayes
auto_learn 1
auto_learn_threshold_nonspam -2
auto_learn_threshold_spam 15
-o smtp_data_done_timeout=1200
-o disable_dns_lookups=yes
測試
# /usr/local/sbin/postfix stop
# /usr/local/sbin/postfix start
# su - vscan
# /usr/local/sbin/amavisd debug
開啟另一個(虛擬)終端機,執行:
# telnet localhost 10024
Trying 127.0.0.1...
Connected to localhost.mis.yzu.edu.tw.
Escape character is '^]'.
220 [127.0.0.1] ESMTP amavisd-new service ready
MAIL FROM:<xxx@domain.edu.tw>
250 2.1.0 Sender xxx@domain.edu.tw OK
RCPT TO:<xxx@domain.edu.tw>
250 2.1.5 Recipient xxx@domain.edu.tw OK
DATA
354 End data with <CR><LF>.<CR><LF>
Subject: Test 1
Test
.
250 2.6.0 Ok, id=89173-01, from MTA: 250 Ok: queued as 2E0DAEB
RSET
250 2.0.0 Ok RSET
MAIL FROM:<xxx@domain.edu.tw>
250 2.1.0 Sender xxx@domain.edu.tw OK
RCPT TO:<xxx@domain.edu.tw>
250 2.1.5 Recipient xxx@domain.edu.tw OK
DATA
354 End data with <CR><LF>.<CR><LF>
Subject: Test 2
X5O!P%@AP[4PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
.
250 2.5.0 Ok, but 1 BOUNCE <-- 出現這行表示成功認知此信件可能含有 Virus
QUIT
Step 2:配合 Spamassassin
在新版的 AMaVisd-new 已經將 Spamassassin 整合進來,所以只要用 ports 安裝好 AMaVisd-new ,則 Spamassassin 也已安裝好。
若伺服器不需要 Spamassassin 的功能,則此步驟可以略過,直接至 Step 3。
新增使用者
# pw useradd spam -c "Spam Bayes Learner" -d /var/empty -s /sbin/nologin
# pw useradd notspam -c "Not Spam Bayes Learner" -d /var/empty -s /sbin/nologin
於 /usr/local/etc/mail/spamassassin/local.cf 加入 (若無 local.cf ,則請自行建立)
use_bayes 1
bayes_path /var/amavis/.spamassassin/bayes
auto_learn 1
auto_learn_threshold_nonspam -2
auto_learn_threshold_spam 15
於 /usr/local/etc/amavisd.conf 新增/修改以下相關內容
$max_servers = 2;
$max_requests = 10;
$child_timeout=5*60;
@bypass_virus_checks_acl = qw( . );
@local_domains_acl = ( ".$mydomain" );
$final_spam_destiny = D_PASS;
read_hash(%whitelist_sender, '/var/amavis/whitelist');
read_hash(%blacklist_sender, '/var/amavis/blacklist');
read_hash(%spam_lovers, '/var/amavis/spam_lovers');
# SpamAssassin settings
#$sa_local_tests_only = 1;
$sa_auto_whitelist = 1;
$sa_mail_body_size_limit = 64*1024;
$sa_tag_level_deflt = 4.0;
$sa_tag2_level_deflt = 6.3;
$sa_kill_level_deflt = $sa_tag2_level_deflt;
$sa_spam_subject_tag = '***SPAM*** ';
<註> max_server 及 max_requests 請依照伺服器等級增減,
另 chile_timeout 不得大於 postfix main.cf 的 smtp_data_done_timeout
及 master.cf 中 smtp-amavis 中 smtp_data_done_timeout 的值。
# touch /var/amavis/whitelist
# touch /var/amavis/blacklist
# touch /var/amavis/spam_lovers
# chown vscan /var/amavis/whitelist
# chown vscan /var/amavis/blacklist
# chown vscan /var/amavis/spam_lovers
# echo spam@domain.edu.tw >> /var/amavis/spam_lovers
# echo notspam@domain.edu.tw >> /var/amavis/spam_lovers
於 /usr/local/etc/postfix/main.cf 新增一行
content_filter = smtp-amavis:[127.0.0.1]:10024
撰寫 Bayesian Learning Script
# vi /usr/local/sbin/my-sa-learn.sh
#!/bin/sh
if [ -e /var/mail/spam ]; then
/usr/local/bin/sa-learn --spam -p /var/amavis/.spamassassin/user_prefs --mbox /var/mail/spam
rm /var/mail/spam > /dev/null
fi
if [ -e /var/mail/notspam ]; then
/usr/local/bin/sa-learn --ham -p /var/amavis/.spamassassin/user_prefs --mbox /var/mail/notspam
rm /var/mail/notspam > /dev/null
fi
/usr/local/bin/sa-learn --rebuild -p /var/amavis/.spamassassin/user_prefs
# chmod 700 /usr/local/sbin/my-sa-learn.sh
# crontab -e
5 0 * * * /usr/local/sbin/my-sa-learn.sh
$max_servers = 2;
$max_requests = 10;
$child_timeout=5*60;
@bypass_virus_checks_acl = qw( . );
@local_domains_acl = ( ".$mydomain" );
$final_spam_destiny = D_PASS;
read_hash(%whitelist_sender, '/var/amavis/whitelist');
read_hash(%blacklist_sender, '/var/amavis/blacklist');
read_hash(%spam_lovers, '/var/amavis/spam_lovers');
# SpamAssassin settings
#$sa_local_tests_only = 1;
$sa_auto_whitelist = 1;
$sa_mail_body_size_limit = 64*1024;
$sa_tag_level_deflt = 4.0;
$sa_tag2_level_deflt = 6.3;
$sa_kill_level_deflt = $sa_tag2_level_deflt;
$sa_spam_subject_tag = '***SPAM*** ';
<註> max_server 及 max_requests 請依照伺服器等級增減,
另 chile_timeout 不得大於 postfix main.cf 的 smtp_data_done_timeout
及 master.cf 中 smtp-amavis 中 smtp_data_done_timeout 的值。
# touch /var/amavis/whitelist
# touch /var/amavis/blacklist
# touch /var/amavis/spam_lovers
# chown vscan /var/amavis/whitelist
# chown vscan /var/amavis/blacklist
# chown vscan /var/amavis/spam_lovers
# echo spam@domain.edu.tw >> /var/amavis/spam_lovers
# echo notspam@domain.edu.tw >> /var/amavis/spam_lovers
於 /usr/local/etc/postfix/main.cf 新增一行
content_filter = smtp-amavis:[127.0.0.1]:10024
撰寫 Bayesian Learning Script
# vi /usr/local/sbin/my-sa-learn.sh
#!/bin/sh
if [ -e /var/mail/spam ]; then
/usr/local/bin/sa-learn --spam -p /var/amavis/.spamassassin/user_prefs --mbox /var/mail/spam
rm /var/mail/spam > /dev/null
fi
if [ -e /var/mail/notspam ]; then
/usr/local/bin/sa-learn --ham -p /var/amavis/.spamassassin/user_prefs --mbox /var/mail/notspam
rm /var/mail/notspam > /dev/null
fi
/usr/local/bin/sa-learn --rebuild -p /var/amavis/.spamassassin/user_prefs
# chmod 700 /usr/local/sbin/my-sa-learn.sh
# crontab -e
5 0 * * * /usr/local/sbin/my-sa-learn.sh
重新啟動
# /usr/local/sbin/postfix stop
# /usr/local/sbin/postfix start
# /usr/local/etc/rc.d/amavisd.sh stop
# /usr/local/etc/rc.d/amavisd.sh start
若是使用 Spamassassin 的 spamd ,則亦需重新啟動。
啟動 AMaVisd 時,請確定是否有正確找到 Anti-Virus 的套件
# cat /var/log/maillog
May 9 15:49:07 std1 amavis[39356]: Found primary av scanner NAI McAfee AntiVirus (uvscan) at /usr/local/bin/uvscan
May 9 15:49:07 std1 amavis[39356]: Found secondary av scanner Clam Antivirus - clamscan at /usr/local/bin/clamscan
<註>以上訊息為已安裝 uvscan 及 clamav 後,AMaVisd 正確找到該套件的。
最後則是測試階段。
測試一陣子後,若覺得SPAM機制很完整後,可以將 amavisd.conf 的 $final_spam_destiny 改成 D_REJECT或 D_DISCARD。
Step 3:其他參考設定
定期清理 mail quere
# vi /usr/local/sbin/my-queue-cleanup.sh
#!/bin/sh
mailq |grep MAILER-DAEMON | awk '{printf $1} {print " deferred"}' | tr -d '*!' | xargs -n 2 postsuper -d
<註> 上列程式為一行。
# chmod 500 /usr/local/sbin/my-queue-cleanup.sh
# crontab -e
0 5 * * * /usr/local/sbin/my-queue-cleanup.sh
另一種方式是比對 spamassassin 或 hits
# vi /usr/local/sbin/my-queue-cleanup.sh
#!/bin/sh
TMPFILE=/tmp/clean.queue.$$
DEFERDIR=/var/spool/postfix/deferred
# collect the filenames
mailq |grep MAILER-DAEMON | cut -f1 -d ' ' > $TMPFILE
for DEFERFILE in `cat $TMPFILE`
do
FILEPATH=`find $DEFERDIR -name $DEFERFILE`
egrep -i 'spamassassin|hits=[0-9]{1,2}.[0-9]' $FILEPATH > /dev/null
if [ $? -eq 0 ]
then
# deferred message is most likely spam
postsuper -d $DEFERFILE deferred
fi
done
rm -f $TMPFILE > /dev/null
增加處理效能
將 /usr/local/etc/amavisd.conf 的 $max_servers 數字加大,預設是 2。
然後將該數字對映到 /usr/local/etc/postfix/master.cf 的 smtp-amavis 。
例:
$max_servers = 4
smtp-amavis unix - - y - 4 smtp(lmtp)
如何簡單停止 AMaVisd
只要將 /usr/local/etc/postfix/main.cf 的
# content_filter = smtp-amavis:[localhost]:10024
註解起來即可,然後重新 reload postfix 。
# /usr/local/sbin/postfix stop
# /usr/local/sbin/postfix start
# /usr/local/etc/rc.d/amavisd.sh stop
# /usr/local/etc/rc.d/amavisd.sh start
若是使用 Spamassassin 的 spamd ,則亦需重新啟動。
啟動 AMaVisd 時,請確定是否有正確找到 Anti-Virus 的套件
# cat /var/log/maillog
May 9 15:49:07 std1 amavis[39356]: Found primary av scanner NAI McAfee AntiVirus (uvscan) at /usr/local/bin/uvscan
May 9 15:49:07 std1 amavis[39356]: Found secondary av scanner Clam Antivirus - clamscan at /usr/local/bin/clamscan
<註>以上訊息為已安裝 uvscan 及 clamav 後,AMaVisd 正確找到該套件的。
最後則是測試階段。
測試一陣子後,若覺得SPAM機制很完整後,可以將 amavisd.conf 的 $final_spam_destiny 改成 D_REJECT或 D_DISCARD。
Step 3:其他參考設定
定期清理 mail quere
# vi /usr/local/sbin/my-queue-cleanup.sh
#!/bin/sh
mailq |grep MAILER-DAEMON | awk '{printf $1} {print " deferred"}' | tr -d '*!' | xargs -n 2 postsuper -d
<註> 上列程式為一行。
# chmod 500 /usr/local/sbin/my-queue-cleanup.sh
# crontab -e
0 5 * * * /usr/local/sbin/my-queue-cleanup.sh
另一種方式是比對 spamassassin 或 hits
# vi /usr/local/sbin/my-queue-cleanup.sh
#!/bin/sh
TMPFILE=/tmp/clean.queue.$$
DEFERDIR=/var/spool/postfix/deferred
# collect the filenames
mailq |grep MAILER-DAEMON | cut -f1 -d ' ' > $TMPFILE
for DEFERFILE in `cat $TMPFILE`
do
FILEPATH=`find $DEFERDIR -name $DEFERFILE`
egrep -i 'spamassassin|hits=[0-9]{1,2}.[0-9]' $FILEPATH > /dev/null
if [ $? -eq 0 ]
then
# deferred message is most likely spam
postsuper -d $DEFERFILE deferred
fi
done
rm -f $TMPFILE > /dev/null
增加處理效能
將 /usr/local/etc/amavisd.conf 的 $max_servers 數字加大,預設是 2。
然後將該數字對映到 /usr/local/etc/postfix/master.cf 的 smtp-amavis 。
例:
$max_servers = 4
smtp-amavis unix - - y - 4 smtp(lmtp)
如何簡單停止 AMaVisd
只要將 /usr/local/etc/postfix/main.cf 的
# content_filter = smtp-amavis:[localhost]:10024
註解起來即可,然後重新 reload postfix 。