前情提要:郵件伺服器Part-5:OpenWebMail
系統使用CentOS 5.1
郵件伺服器全系列:Postfix+Dovecot+SASL+Procmail+Postgrey+Mailscanner+Spamassassin+ClamAV+Mailscanner-mrtg+MailWatch+Openwebmail+MySPAM
郵件伺服器全系列: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
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.gz6.解壓縮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
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 (離開)
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';
$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; (除錯用)
$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');
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>
<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
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/*
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
/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;
$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;
$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);
while (feof($fp) == 0) {
$buf = fgets($fp, 4096);
$size += strlen($buf);
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上面沒有看到廣告信紀錄
您好!依照您的LOG看,procmail並沒有執行匯入MySPAM的動作,如有作用時會出現如:
"MySPAM[25673]: insert for ABC with id 95457, size 3704"
的訊息,請檢查看看/etc/procmailrc的規則設定。
記得檢查一下郵件的Header裡是否有
"X-Spam-Status: Yes"
的標記。
請問一下如果要將 myspam 架設在 exchange 前端,需要修改哪些步驟阿?
目前運作在本機上頭都正常,架設再另一台 mail server 前端 spam 的信件仍然會遞送給使用者,無法寫入 myspam 資料庫裡頭。
Allen:
您好~可參考原作者在酷學園的答覆,
http://phorum.study-area.org/index.php/topic,38649.msg290539.html#msg290539
請問
我的/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上面沒有看到廣告信紀錄
不好意思
我也遇到了一樣的情形
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 ~
張貼意見