2008年7月24日 星期四

郵件伺服器 Part-2:MailScanner+ClamAV+SpamAssassin

前情提要:郵件伺服器 Part-1:Postfix+Dovecot+SASL+Procmail

系統使用CentOS 5.1 郵件伺服器全系列:Postfix+Dovecot+SASL+Procmail+Postgrey+Mailscanner+Spamassassin+ClamAV+Mailscanner-mrtg+MailWatch+Openwebmail+MySPAM

MailScanner+ClamAV+SpamAssassin可涵蓋郵件的內容及病毒過濾


A.安裝mailscanner
1.安裝相關元件

yum install patch rpm-build
yum install perl-MIME-tools
yum install gcc perl-Archive-Zip

2.下載MailScanner

cd /usr/local/src
elinks http://www.mailscanner.info/downloads.html
下載Version 4.70.7-1 for RedHat, Fedora and Mandrake Linux (and other RPM-based Linux distributions)

3.安裝MailScanner

cd /usr/local/src
tar -zxvf MailScanner-4.70.7-1.rpm.tar.gz
cd MailScanner-4.70.7-1
./install.sh

4.啟動MailScanner

service postfix stop
chkconfig postfix off
chkconfig --level 2345 MailScanner on
service MailScanner start


5.設定MailScanner設定檔案

vim /etc/MailScanner/MailScanner.conf

基本設定

Run As User = postfix (啟動的使用者)

Run As Group = postfix (啟動的群組)

Incoming Queue Dir = /var/spool/postfix/hold (收信佇列)
Outgoing Queue Dir = /var/spool/postfix/incoming (寄信佇列)

MTA = postfix (使用的MTA)

Max Children = 5 (產生子程序的上限)

Virus Scanning = yes (啟動病毒掃瞄)

Virus Scanners = clamav (設定掃毒套件,多個掃毒套件時以空白字元分隔)

Spam Checks = yes (啟動SPAM掃瞄)

Use SpamAssassin = yes (使用 SpamAssassin 偵測SPAM)
SpamAssassin Site Rules Dir = /etc/mail/spamassassin (SpamAssassin規則檔路徑)

Deliver Unparsable TNEF = yes (增加使用Outlook的相容性)

High Scoring Spam Actions = deliver header "X-Spam-Status: Yes" (高積分時在header標記X-Spam)


效能調教(可參考修改)


Max Unscanned Bytes Per Scan = 300m (每批不被掃瞄大小的上限)

Max Unsafe Bytes Per Scan = 150m (每批被掃瞄大小的上限)

Max Unscanned Messages Per Scan = 300 (每批不被掃瞄數目的上限)

Max Unsafe Messages Per Scan = 300 (每批被掃瞄數目的上限)


其他設定


Spam Subject Text = **SPAM** (普通SPAM的附加標題)

High Scoring Spam Subject Text = **SPAM** (高分SPAM的附加標題)

Send Notices = no (感染信件通知管理員)

Notices Include Full Headers = no (通知信件包含完整表頭)

Required SpamAssassin Score = 6 (普通SPAM積分)

High SpamAssassin Score = 10 (高SPAM積分)
Delivery Method = batch (批次掃描)



6.附件過濾設定(依需求調整)
 過濾附件副檔名屬性設定

vim /etc/MailScanner/filename.rules.conf
 過濾附件類型屬性設定

vim /etc/MailScanner/filetype.rules.conf


7.佇列環境配置

chown postfix.postfix /var/spool/MailScanner/incoming
chown postfix.postfix /var/spool/MailScanner/quarantine


8.設定postfix將信件移到佇列

vim /etc/postfix/main.cf
   header_checks = regexp:/etc/postfix/header_checks

vim /etc/postfix/header_checks
   /^Received:/ HOLD

9.規則設定  設定郵件白名單
vim /etc/MailScanner/rules/spam.whitelist.rules

10.重新啟動MailScanner
service MailScanner restart

B.安裝SpamAssassin+clamav

yum install spamassassin

1.安裝razor
yum install perl-Razor-Agent

2.安裝pyzor
yum install pyzor

3.安裝dcc
cd /usr/local/src
elinks www.rhyolite.com/anti-spam/dcc/source

 下載dcc-dccd.tar.Z
tar -xzvf dcc-dccd.tar.Z
cd dcc-dccd-1.3.39/
./configure

make
make install

4.安裝unrar
yum install unrar

5.安裝ClamAV
yum install clamav-db clamav clamd

6.排程更新clamav病毒碼  (每天0,12點更新病毒碼)
vim /etc/crontab
    0 0,12 * * * root /usr/bin/freshclam
7.啟動spamassassin
chkconfig spamassassin on
service spamassassin start

8.修改資料夾權限
chown postfix /var/spool/postfix

C.規則設定
1.spamassassin預設規則
vim /etc/mail/spamassassin/local.cf

2.可到下列網址取得基本設定
http://www.yrex.com/spam/spamconfig.php
 規則CF檔放置於/etc/mail/spamassassin/即可,中文規則需用上傳不可直接複製貼上複製

3.下載中文過濾規則
wget -N -P /etc/mail/spamassassin/ www.ccert.edu.cn/spam/sa/Chinese_rules.cf


D.啟動spamassassin自動學習
1.建立bayes資料庫
spamassassin --lint --config-file=/etc/MailScanner/spam.assassin.prefs.conf -D
 無資料庫時會出現
 debug: bayes: no dbs present, cannot tie DB R/O: /var/spool/MailScanner/spamassassin/bayes_toks
 需執行sa-learn --sync
 在/var/spool/MailScanner/bayes/裡建立bayes_seen、bayes_toks等資料庫檔案

2.建立黑名單帳號
useradd spam

3.建立白名單帳號
useradd nospam

4.收到誤判或漏判信件時,"以附加檔案方式轉寄"給blacklist或whitelist

5.學習黑名單
sa-learn --prefs-file=/etc/MailScanner/spam.assassin.prefs.conf --showdots --spam --mbox /var/mail/spam

6.學習白名單
sa-learn --prefs-file=/etc/MailScanner/spam.assassin.prefs.conf --showdots --ham --mbox /var/mail/nospam

7.每小時自動學習黑/白名單  
  在/etc/cron.daily建立Script
vim /etc/cron.daily/spam-learn
#!/bin/sh
SPAM=/var/mail/spam
NOSPAM=/var/mail/nospam

LOGFILE=/var/log/
spamlearn.log
CONF
=/etc/MailScanner/spam.assassin.prefs.conf

LEARN
=/usr/bin/sa-learn

date >> $LOGFILE

if [ -f $SPAM ]; then

BOX=${SPAM}.processing

mv $SPAM $BOX
sleep 5

$LEARN --prefs-file=$CONF --spam --mbox $BOX >> $LOGFILE 2>&1

rm -f $BOX

fi

if [ -f $NOSPAM ]; then

BOX=${NOSPAM}.processing

mv $NOSPAM $BOX
sleep 5

$
LEARN --prefs-file=$CONF --ham --mbox $BOX >> $LOGFILE 2>&1

rm -f $BOX
fi


 重新啟動crond
/etc/init.d/crond restart

下集預告:郵件伺服器 Part-3:Mailscanner-mrtg

70 意見:

匿名 提到...

又來請教您了

不知您的SPAM郵件是怎麼處理的

我想把判定為SPAM的郵件直接移至一個我自己設定的垃圾信箱spammail

看了一下MailScanner.conf說明

相關參數應該是 Spam Actions & High Scoring Spam Actions 這二項

不過怎麼好像沒有我想要的選項....

forward說明是轉寄, 那收件者還是會收到一份垃圾不是嗎?

store可以自訂嗎? 不太懂它的意思

Yow 提到...

store是存放在隔離區,不會寄給USER。
但為了避免SPAM誤判造成USER損失,建議還是將SPAM的處理權交給USER比較好。
所以我還是會設定成deliver。
建議可搭配MySPAM,將判斷成SPAM的信件蒐集至資料庫,並定時通知USER查閱,如此可避免浪費接收SPAM的頻寬,更可讓USER擁有主導權,避免信件遺失的過失紛爭。

匿名 提到...

那我先研究一下MySPAM好了

目前我自己是最後還用procmail去判定標題再把SPAM信件隔離到我指定的信件匣

有判斷錯的 我再移回USER的信箱

目前的政策是這樣

小小的MIS助理照辦就是囉...

只是看到MailScanner就有這樣的設定

想說可不可行而已...XD

Eric 提到...

又來請教您了

最近有一些信件收不到 那附件是.xls有加密碼

我看MailWatch的記錄

它被歸到其他感染

Report: MailScanner: Message contained password-protected archive

然後就收不到了

可是我自己去試了一下建一個.xls加密碼卻可以傳給自己

請問這是誤判? 還是?

哪裡有設定能不掃瞄有加密碼的檔案嗎?

我怎麼好像沒看到...難道眼花了...

Eric 提到...

還沒等到您的回覆

我已經解決了

搞半天我在跟USER雞同鴨講...

那個檔是.zip 內容才是.xls

我把

Allow Password-Protected Archives = yes

就可以收到信囉...

匿名 提到...

mis大大您好
請問啟動MailScanner
是先需把postfix停用嗎

Yow 提到...

需要~
安裝MailScanner後需要由MailScanner來啟動POSTFIX

匿名 提到...

不好意思 照步驟灌好之後 可以收發內部信件 也可以寄外部信件 可是無法收外部信件 Postgrey 重啟 停止也出現失敗

Yow 提到...

依序執行
/sbin/service MailScanner stop
/sbin/chkconfig postfix off
killall postfix
/sbin/service MailScanner start
看看會不會有錯誤?
如沒有,以後手動重啟POSTFIX時請依上列指令。
如沒有但仍無法收信,請看是否有退信的錯誤訊息?

匿名 提到...

不好意思還是一樣有失敗的訊息
請問我可以先移除MailScanner ClamAV
保留我原本的Postfix Postgrey

Yow 提到...

可以呀~
只單獨啟動Postfix就不會啟動到MailScanner跟ClamAV了,
啟動時是出現什麼錯誤訊息?

匿名 提到...

mis大大 我照上敘步驟重做一次 變成無法收發
然後都停用 想回到Postfix Postgrey
Postgrey 重啟時 正在停止都會出現錯誤
而變成可以寄內外部 但只能收內部 收不到外部信件
重安裝Postgrey也是一樣
現在又變成最原始不能過濾垃圾信的狀態了@@

匿名 提到...

該怎麼完全移除Mailscanner+Spamassassin+ClamAV呢

Yow 提到...

"Postgrey 重啟時 正在停止都會出現錯誤"
 這句不太明白,如果Postgrey原本就沒有啟動,用service postgrey restart就會出現停止的錯誤,直接用service postgrey start呢?
 還是不行的話,把main.cf裡的
"check_policy_service unix:/var/spool/postfix/postgrey/socket,"拿掉。
 拿掉還是不行的話就要檢查是不是smtpd_recipient_restrictions 的驗證有錯,或是網路問題了?
 檢查一下/var/log/mail.log裡面的錯誤訊息,這樣比較好找到錯誤。
 移除的話,
rpm -e MailScanner
yum remove spamassassin
yum remove clamav-db clamav clamd

匿名 提到...

感謝mis大大的教導
我先刪除var/spool/postfix/postgrey資料夾
再重裝postgrey已可正常執行
但查看maillog
有postgrey[xxxxx]: action=greylist, reason=new
也有postgrey[xxxxx]: action=greylist, reason=early-retry
不知道是否還有哪裡有錯誤

Yow 提到...

有"postgrey[xxxxx]: action=greylist, reason=new"
是正常的,表示有新的SMTP Server對你連線。

"postgrey[xxxxx]: action=greylist, reason=early-retry"
的意思是對方太早重送了,這樣會被拒絕。

匿名 提到...

謝謝mis大大
目前已可正常運作中

yamazaki 提到...

不好意思請問一下板主
我使用下列指令下載下來的CF中文字是亂碼要怎解決” 感謝
wget -N -P /etc/mail/spamassassin/ www.ccert.edu.cn/spam/sa/Chinese_rules.cf

yamazaki 提到...

再請問一下板主先生~
我使用的是sendmail這的話
下例修改的地方要怎麼動才是正確的

Run As User = postfix (啟動的使用者)
Run As Group = postfix (啟動的群組)
Incoming Queue Dir = /var/spool/postfix/hold (收信佇列)
Outgoing Queue Dir = /var/spool/postfix/incoming (寄信佇列)

Yow 提到...

Chinese_rules.cf的規則檔裡是簡體字,本來就會亂碼。
如有需要編輯中文的規則檔,需注意編碼,最好是在編輯完後在整個CF檔上傳至SERVER。

Yow 提到...

Run As User =
Run As Group =
Incoming Queue Dir =
Outgoing Queue Dir =
這幾項 SENDMAIL可以不用設定

yamazaki 提到...

抱歉~版主大大
小弟是LINUX的初學者 我還不不太懂這句的意思,可以詳細解說一下嗎?
感激不儘

「如有需要編輯中文的規則檔,需注意編碼,最好是在編輯完後在整個CF檔上傳至SERVER。」

Yow 提到...

先將CF檔在編輯好後,再用WinSCP或SSH Secure Shell Client等可以傳輸檔案的工具,將CF檔傳至 /etc/mail/spamassassin/ 的資料夾,不可以直接SSH用編輯器打開來編輯中文規則或是貼上中文規則(英文規則可以),這樣關鍵字會無法辨識。

yamazaki 提到...

感謝版主的熱心解答 小弟的問題
我去試看看^^

Drsin 提到...
作者已經移除這則留言。
Yow 提到...
作者已經移除這則留言。
Drsin 提到...

噗~我剛剛去看到沒錯我就刪除了結果還是被您發現了ˇˇ"

另一個問題
建立bayes資料庫

spamassassin --lint --config-file=/etc/MailScanner/spam.assassin.prefs.conf -D

 無資料庫時出現debug: bayes: no dbs present, cannot tie DB R/O: /var/spool/MailScanner/spamassassin/bayes_toks
 執行sa-learn --sync在/var/spool/MailScanner/spamassassin/裡建立bayes_seen/bayes_toks等資料庫檔案

這裡要怎麼作?看不太懂..可以幫忙講解嗎?向下什麼指令之類的~

還有
5.學習黑名單

sa-learn --prefs-file=/etc/MailScanner/spam.assassin.prefs.conf --showdots --spam --mbox /var/mail/spam


6.學習白名單

sa-learn --prefs-file=/etc/MailScanner/spam.assassin.prefs.conf --showdots --ham --mbox /var/mail/nospam


這裡我執行都一只出現錯誤..

Yow 提到...

建立bayes資料庫時,會出現一大串訊息,如果裡面有出現
debug: bayes: no dbs present, cannot tie DB R/O: /var/spool/MailScanner/spamassassin/bayes_toks
這行,表示沒有DB檔,這時就需要執行
sa-learn --sync
執行後會在/var/spool/MailScanner/spamassassin/裡建立DB檔。

您執行sa-learn時出現什麼錯誤?

Drsin 提到...
作者已經移除這則留言。
Yow 提到...

不...不是啦~
我是說"5.學習黑名單"、"6.學習白名單"一直出現的錯誤?

Drsin 提到...
作者已經移除這則留言。
Drsin 提到...

/etc/mail/spamassassin$ sa-learn --prefs-file=/etc/MailScanner/spam.assassin.prefs.conf --showdots --spam --mbox /var/mail/spam
Learned tokens from 0 message(s) (0 message(s) examined)
/etc/mail/spamassassin$ sa-learn --prefs-file=/etc/MailScanner/spam.assassin.prefs.conf --showdots --ham --mbox /var/mail/nospam
Learned tokens from 0 message(s) (0 message(s) examined)

這因該是正常吧

Drsin 提到...
作者已經移除這則留言。
Drsin 提到...

不好意思呦把你的版搞亂了~這裡執行sa-learn --sync在/var/spool/MailScanner/spamassassin/裡建立bayes_seen/bayes_toks等資料庫檔案

我MailScanner裡面沒有spamassassin這個資料夾我用mkdir建立了一個spamassassin的資料夾以後這兩個bayes_seen/bayes_toks要怎麼建立?用新增文件->空白檔案取名bayes_seen/bayes_toks就可以了??還是??

Yow 提到...

Learned tokens from 0 message(s) (0 message(s) examined)
這樣是正常的~

沒關係~這樣版面變好熱鬧~ XD

只要執行sa-learn就好,他會自己建立~
這裡打錯了~
路徑是/etc/MailScanner/bayes/ 下,Sorry~ :P

Drsin 提到...
作者已經移除這則留言。
Yow 提到...

只要執行
sa-learn --sync
就好~
他會自己建立~

Drsin 提到...

在這個路徑下/etc/MailScanner/bayes/打上sa-learn --sync就好了..可是我的/etc/MailScanner沒有bayes...

Yow 提到...

不用在那個路徑啦~
在任何地方,可以執行sa-learn --sync就好~

Drsin 提到...

剛剛試了一下sa-learn --sync以後甚麼都沒出現...金害呦~

Drsin 提到...

不過我在/root/.spamassassin下面有看到那兩個檔案點開來看裡面白白的什麼都沒有..檔案大小12288空白還有容量感覺不太正常的感覺...

Yow 提到...

那試試看執行
sa-learn --rebuild

Drsin 提到...

HI~剛試了一下他說rebuild已被汰換,請使用--sync

Yow 提到...

用 find / -name bayes_toks
找找看還有沒有其他的DB檔?

如果只有/root/下的那個,
試試看編輯
vim /etc/MailScanner/spam.assassin.prefs.conf

bayes_path /etc/MailScanner/bayes/bayes
路徑改成你找到的那個試試~

Yow 提到...

用 find / -name bayes_toks
找找看還有沒有其他的DB檔?

如果只有/root/下的那個,
試試看編輯
vim /etc/MailScanner/spam.assassin.prefs.conf

bayes_path /etc/MailScanner/bayes/bayes
路徑改成你找到的那個試試~

Drsin 提到...

HI~我看到我的spam.assassin.prefs.conf裡面bayes_path /etc/MailScanner/bayes/bayes
這一行是備註解掉的士不是這個原因?

Yow 提到...

阿....把它打開吧~

Drsin 提到...

把註解拿掉就有了ㄟ~原來是那裏錯了,但這個問題怎麼好像只有我會其他人都好像沒這個問題= =?

Yow 提到...

我也不知道耶...
預設應該是打開的呀~

Drsin 提到...

呵呵我的比較怪 0.0~更怪的出現囉..原本可以收發的現在不能寄出SMTP好像出問題了..除錯ing~先謝謝您了

Yow 提到...

檢查看看Maillog裡的錯誤訊息~

Drsin 提到...

有看過看不太出來哪裡出錯..不過我有一個問題就是我有申請NP-IP名稱是test.no-ip.com轉址對應到(假設)110.220.33.44而這個實體IP有對應到虛擬IP(DMZ)192.168.5.5這台,但是這台hostsname叫做im.abc.com,所以就是說我的主機名稱跟DNS是不一樣的名稱這樣寄信出去有辦法讓對方收到嗎?yahoo.gmail我測試都是收不到這不知道算不算正常@@"

Yow 提到...

這樣沒有關係~你原本不就可以正常收發嗎?

寄出一封測試信後,看/var/log/maillog裡的紀錄,就可以知道信的傳送狀況了~

匿名 提到...

您好~請問如果信件有病毒但是不自動過濾掉而是以附件方式寄給收件者有這個設定嗎?因為我測試了一下病毒信件結果收件者收不到也不知道信件被轉去哪裡擺放了~謝謝

Yow 提到...

預設值就是用附件通知呀~
收件者會收到Domain_com_tw-Attachment-Warning.txt的附件,裡面會有類似
MailScanner in /var/spool/MailScanner/quarantine/20090825 (message 311B4562048.AF29B).的訊息,
像上例的原附件儲存位置即是在
/var/spool/MailScanner/quarantine/20090825/311B4562048.AF29B/ 下。

你也可以試著把
Deliver Disinfected Files 改為yes
他可以把解完毒的郵件再寄送給收件者。

匿名 提到...

您好
像是mailscanner誤判,且把訊息告知了
例:/var/spool/MailScanner/quarantine/20090825/311B4562048.AF29B/ 下

要怎麼把這路徑底下的mail取回給user呢?

Yow 提到...

您好~
我是都利用 WinSCP 來連線取出檔案
http://winscp.net/eng/docs/lang:cht

匿名 提到...

請問mis大大
我yum install patch rpm-build 一直都出現nothing to do
要安裝MailScanner時也出現i am logging everything into "install.log"
請問是什麼問題呢

Yow 提到...

nothing to do前有出現already installed 嗎?

安裝mailscanner時有出現其他錯誤嗎?
下載的版本對嗎?
http://www.mailscanner.info/downloads.html

匿名 提到...

[root@mail ~]# yum install patch rpm-build
Configuration file /etc/yum/pluginconf.d/installonlyn.conf not found
Unable to find configuration file for plugin installonlyn
Setting up Install Process
Setting up repositories
Reading repository metadata in from local files
Parsing package install arguments
Nothing to do

我載的是4.79.11-1版
是不是沒裝好patch

Yow 提到...

先解決YUM的問題
http://www.centos.org/modules/newbb/viewtopic.php?viewmode=flat&order=DESC&topic_id=17664&forum=41
看看這篇有沒有幫助?

匿名 提到...

mis大大yum安裝
perl-MIME-tools
gcc perl-Archive-Zip
都可以唯有安裝patch rpm-build不行

Yow 提到...

不同的套件所需要的站台也不同
把installonlyn.conf設上去也不行嗎?

執行yum clean all看看有沒有用?

匿名 提到...

請問大大
我這etc底下並無yum資料夾
也無installonlyn.conf一檔

Yow 提到...

etc下沒有yum資料夾?
你是用CENTOS嗎?

匿名 提到...

系統是CENTOS 5
etc底下無yum資料夾
有一個叫yum.repos.d的資訊夾
裡面只有mirrors-rpmforge跟rpmforge.repo

Yow 提到...

你的站台少很多呢~
先新增站台
http://i-yow.blogspot.com/2008/08/yum-yumupdate-rootmsg-yum-y-update.html

( http://i-yow.blogspot.com/2008/07/centos-5.html )

然後執行 yum update
把更新裝一裝再試試看

匿名 提到...

mis 大大 請教

在/var/spool/MailScanner/bayes/裡建立bayes_seen、bayes_toks等資料庫檔案

這我不懂 ~ 要如何 建立bayes_seen、bayes_toks

Yow 提到...

執行sa-learn --sync
就會在建立bayes_seen、bayes_toks等資料庫檔案

匿名 提到...

Yow大,先謝謝你的教學讓我受益良多
另外想跟你請教一個問題
執行sa-learn --sync
就會在建立bayes_seen、bayes_toks等資料庫檔案
而這邊您所說的路徑為/var/spool/MailScanner/bayes/
而我執行完是在/etc/MailScanner/bayes/目錄底下找到,請問這是正常的嗎?

##EasyReadMore##