2008年8月4日星期一

郵件伺服器Part-6:MySPAM

前情提要:郵件伺服器Part-5:OpenWebMail

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

MySPAM會蒐集判定為SPAM的郵件於資料庫中,排程定時寄發清單通知信於使用者,除可節省傳遞垃圾郵件的流量外,更可供於使用者重送誤判郵件、自訂過濾規則及白名單。

MySPAM官網http://www.teatime.com.tw/
MySPAM程式下載http://www.teatime.com.tw/~tommy/myspam/myspam.tgz


1.安裝需求套件PHP、MySQL
若皆無可以yum安裝
yum -y install php mysql mysql-server php-mysql php-gd php-mbstring

2.下載MySPAM程式
cd /usr/local/src/
wget http://www.teatime.com.tw/~tommy/myspam/myspam.tgz

3.解壓縮myspam程式
tar zxvf myspam.tgz

4.移動解開的目錄到網頁目錄
cp /usr/local/src/myspam-0.0.4a /var/www/html/myspam

5.下載Smarty
elinks http://www.smarty.net/download.php
下載Smarty-2.6.19.tar.gz

6.解壓縮Smarty程式
tar zxvf Smarty-2.6.19.tar.gz

7.移動Smarty程式
將解開的libs目錄移動到 /var/www/html/myspam/web/libs
將解開的misc目錄移動到 /var/www/html/myspam/web/misc

8.配置Smarty環境
mkdir /var/www/html/myspam/web/configs
mkdir /var/www/html/myspam/web/cache
mkdir /var/www/html/myspam/web/templates
mkdir /var/www/html/myspam/web/templates_c
mkdir /var/spool/myspam/notspam/

chmod -R 700 /var/www/html/myspam/web/configs
chmod -R 700 /var/www/html/myspam/web/cache
chmod -R 700 /var/www/html/myspam/web/templates
chmod -R 700 /var/www/html/myspam/web/templates_c

chown nobody:nobody /var/www/html/myspam/web/templates_c

將web下*.tpl檔案移到/templates下
cp /var/www/html/myspam/web/*.tpl /var/www/html/myspam/web/templates/

9.建立資料庫
cd /var/www/html/myspam/
mysql -u root -p (進入mysql指令模式,輸入root密碼進入)
create database spam1; (建立spam1資料庫)
use spam1; (進入spam1資料庫)
/. db.sql (匯入資料表,/請打反方向)
exit (離開)


10.修改MySPAM設定
vim /var/www/html/myspam/web/config.php

/ database
$dbhost = 'localhost';
$dbuser ='root';
$dbpass = 'xxxxxxxx';
$dbname ='spam1';
//SMTP
$smtp_server = 'localhost';
$smtp_port = 25;
//POP3
$pop3_server = 'localhost';
$pop3_port = 110;
$mydomain = 'your_domain_name';
(Email Domain)
$spam_url = 'http://your_myspam_website'; (MySPAM 的 URL)
$notspam_path = '/var/spool/myspam/notspam/'; (誤判信件的存放路徑)
$pagesize = 15; (每頁顯示的數量)
$keep_days = 30; (資料保留的日數)
$debug = false; (除錯用)


11.修改MySPAM首頁設定
vim /var/www/html/myspam/web/index.php

require_once('/var/www/html/myspam/web/config.php');
require_once('libs/Smarty.class.php');
require_once('/var/www/html/myspam/web/lang.php');
require_once('/var/www/html/myspam/web/sendmail.php');

12.設定MySPAM網頁
vim /etc/httpd/conf.d/myspam.conf

Alias /myspam /var/www/html/myspam/web

<Location /myspam>
Order allow,deny
allow from all
# AddDefaultCharset Big5
</Location>



13.設定procmail
vim /etc/procmailrc

#MAILDIR=/var/mail
LOGFILE=/var/log/procmail/procmail.log

:0
* ^X-Spam-Status: Yes

{
:0:
* ! ^X-MySPAM: YES
/usr/bin/php -Cq /var/www/html/myspam/web/index.php save_spam
}

:0b
* ^X-Spam-Flag: YES
$DEFAULT

:0
* ^X-MySPAM: YES
$DEFAULT

14.排程自動學習
vim /var/www/html/myspam/notspam

sa-learn --ham /var/spool/myspam/notspam/*
rm -f /var/spool/myspam/notspam/*


vim /etc/crontab

0 1 * * * root /var/www/html/myspam/notspam
(每天凌晨一點學習)

15.排程通知
vim /var/www/html/myspam/send_notify.sh

cd /var/www/html/myspam/web
/usr/bin/php -Cq index.php send_notify

vim /etc/crontab

0 9-18 * * 1-5 root /var/www/html/myspam/send_notify.sh
(每週一至五 0900~1800每小時發送一次)

備註:
◎發生重送信件Header錯誤時,修改save.php,在74行左右
原本是:

$aHeader = array();
$cnt = 0;
while (feof($fp) == 0) {
$buf = fgets($fp, 4096);
if ($body) {
$content .= $buf;
continue;
}
if (strncasecmp('Delivered-To:', $buf, 13) == 0) continue;

改成:

$aHeader = array();
$cnt = 0;
$first = true;
while (feof($fp) == 0) {
$buf = fgets($fp, 4096);
if ($first) {
$first = false;
if (strncasecmp('From ', $buf, 5) == 0) continue;
}
if ($body) {
$content .= $buf;
continue;
}
if (strncasecmp('Delivered-To:', $buf, 13) == 0) continue;

◎無法抓取信件大小時,修改save.php
$size = 0;
while (feof($fp) == 0) {
$buf = fgets($fp, 4096);
$size += strlen($buf);


回到最初:郵件伺服器 Part-1:Postfix+Dovecot+SASL+Procmal

10 意見:

匿名 提到...

請問
我的/var/log/procmail.og如下
From root@localhost.localdomain Wed Apr 29 17:52:24 2009
Subject: test
Folder: /var/mail/roylee 1036
From root@localhost.localdomain Wed Apr 29 17:52:46 2009
Subject: roylee
Folder: /var/mail/root 1048
From root@localhost.localdomain Wed Apr 29 17:53:42 2009
Subject: roylee
Folder: /var/mail/roylee 1081
From root@localhost.localdomain Wed Apr 29 23:57:41 2009
Subject: {Spam?}
Folder: /var/mail/roylee 2062
From root@localhost.localdomain Wed Apr 29 23:58:30 2009
Subject: {Spam?}
Folder: /var/mail/roylee 2062
From root@localhost.localdomain Thu Apr 30 00:00:05 2009
Subject: {Spam?}
Folder: /var/mail/roylee 2062
From root@localhost.localdomain Thu Apr 30 00:02:29 2009
Subject: {Spam?}
Folder: /var/mail/roylee 2062
From root@localhost.localdomain Thu Apr 30 00:04:09 2009
Subject: {Spam?}
Folder: /var/mail/roylee 2062
From root@localhost.localdomain Thu Apr 30 00:12:47 2009
Subject: {Spam?}
Folder: /var/mail/roylee 2062
From root@localhost.localdomain Thu Apr 30 00:14:25 2009
Subject: {Spam?}
Folder: /var/mail/roylee 2062

但是在myspam web上面沒有看到廣告信紀錄

Yow 提到...

您好!依照您的LOG看,procmail並沒有執行匯入MySPAM的動作,如有作用時會出現如:
"MySPAM[25673]: insert for ABC with id 95457, size 3704"
的訊息,請檢查看看/etc/procmailrc的規則設定。

Yow 提到...

記得檢查一下郵件的Header裡是否有
"X-Spam-Status: Yes"
的標記。

Allen 提到...

請問一下如果要將 myspam 架設在 exchange 前端,需要修改哪些步驟阿?
目前運作在本機上頭都正常,架設再另一台 mail server 前端 spam 的信件仍然會遞送給使用者,無法寫入 myspam 資料庫裡頭。

Yow 提到...

Allen:
您好~可參考原作者在酷學園的答覆,
http://phorum.study-area.org/index.php/topic,38649.msg290539.html#msg290539

oscar 提到...
此文章已被作者刪除。
oscar 提到...
此文章已被作者刪除。
oscar 提到...

請問
我的/var/log/procmail.og如下

From oscar@kmseh.gov.tw Thu Jun 25 15:46:35 2009
Subject: {Disarmed} =?Big5?B?RndkOiAirEapsrrxpuK4YK/gSVSxxMHKrXC1ZazjsFG3fCI8p
Folder: /var/mail/oscar 12558
procmail: Lock failure on "/usr/bin/php.lock"
procmail: Skipped "-Cq /var/www/html/myspam/web/index.php save_spam"
procmail: Error while writing to "/usr/bin/php"

但是在myspam web上面沒有看到廣告信紀錄

Richard 提到...
此文章已被作者刪除。
Richard 提到...

不好意思
我也遇到了一樣的情形
procmail: Lock failure on "/usr/bin/php.lock"
procmail: Skipped "-Cq /var/www/html/myspam/web/index.php save_spam"
procmail: Error while writing to "/usr/bin/php"
From richard6270@gmail.com Thu Sep 24 18:52:19 2009
Subject: **SPAM** =?Big5?B?RndkOiC7tMNQp/O0q1dpbmRvd3MgN7VupEq1Za2x?=
Folder: /var/mail/richard
有加表頭 **SPAM** , 可是丟到procmail 似乎遇上問題 , 郵件的Header裡也有
"X-Spam-Status: Yes"
的標記 , 可以提點一下嗎 ??
thanks ~

##EasyReadMore##