2008年7月31日 星期四

郵件伺服器Part-4:MailWatch

前情提要:郵件伺服器Part-3:MailScanner-mrtg

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

MailWatch蒐集MailScanner郵件過濾的判定紀錄,可用於分析、管理規則的設定

1.安裝MYSQL及相關元件
yum install mysql mysql-server mod_auth_mysql perl-DBD-MySQL

2.安裝PHP及相關元件
yum install php php-gd php-pear php-mysql php-devel


3.設定啟動服務
chkconfig httpd on
chkconfig mysqld on

4.啟動服務
service mysqld start
service httpd start

5.設定MYSQL密碼
/usr/bin/mysqladmin -u root password 'xxxxxx'

6.設定PHP
vim /etc/php.ini

short_open_tag = On
safe_mode = Off
register_globals = Off
magic_quotes_gpc = On
magic_quotes_runtime = Off
session.auto_start = 0

7.安裝MailWatch
下載http://sourceforge.net/project/showfiles.php?group_id=87163

tar -zxvf mailwatch-1.0.4.tar.gz

8.建立資料庫
cd /usr/local/src/mailwatch-1.0.4/

mysql -p < create.sql

產生mailscanner資料庫並建立資料表

9.修改MailWatch資料庫設定
vim MailWatch.pm

my($db_name) = ‘mailscanner’; (資料庫名稱)
my($db_host) = ‘localhost’; (資料庫位置)
my($db_user) = ‘root’; (使用者名稱)
my($db_pass) = ‘xxxxxx′; (使用者密碼)

10.複製設定檔
cp MailWatch.pm /usr/lib/MailScanner/MailScanner/CustomFunctions/

11.新增網頁使用者
mysql mailscanner -u root -p
Enter password: ******

mysql> INSERT INTO users VALUES ('root',md5('xxxxxx'),'root','A','0','0','0','0','0');

11.設置網頁檔案
mv mailscanner /var/www/html/

12.修改網頁權限
cd /var/www/html/mailscanner

chown root:apache images

chmod ug+rwx images

chown root:apache images/cache

chmod ug+rwx images/cache

12.複製設定檔
cp conf.php.example conf.php

13.設定conf.php
vim conf.php

define(DB_TYPE, ‘mysql’);
define(DB_USER, ‘root’);
define(DB_PASS, ‘xxxxxx');
define(DB_HOST, ‘localhost’);
define(DB_NAME, ‘mailscanner’);

14.設定MailScanner
vim /etc/MailScanner/MailScanner.conf

Quarantine User = root
Quarantine Group = apache (this should be the same group as your web server)
Quarantine Permissions = 0660
Quarantine Whole Message = yes
Quarantine Whole Message As Queue Files = no
Detailed Spam Report = yes
Include Scores In SpamAssassin Report = yes
Always Looked Up Last = &MailWatchLogging

15.設定黑白名單
vim /usr/local/src/mailwatch-1.0.4/SQLBlackWhiteList.pm

my($db_name) = 'mailscanner';
my($db_host) = 'localhost';
my($db_user) = 'root';
my($db_pass) = '!Q@W#E$R';

cp /usr/local/src/mailwatch-1.0.4/SQLBlackWhiteList.pm /usr/lib/MailScanner/MailScanner/CustomFunctions/

vim /etc/MailScanner/MailScanner.conf

Is Definitely Not Spam = &SQLWhitelist
Is Definitely Spam = &SQLBlacklist

16. 修改SpamAssassin設定
vim /etc/MailScanner/spam.assassin.prefs.conf

加入
bayes_path /etc/MailScanner/bayes/bayes
bayes_file_mode 0660

17.建立新的bayes目錄
mkdir /etc/MailScanner/bayes
chown root:apache /etc/MailScanner/bayes
chmod g+rws /etc/MailScanner/bayes

18.複製已經存在的bayes資料庫
cp /root/.spamassassin/bayes_* /etc/MailScanner/bayes
chown root:apache /etc/MailScanner/bayes/bayes_*
chmod g+rw /etc/MailScanner/bayes/bayes_*

19.測試SpamAssassin
spamassassin -D -p /etc/MailScanner/spam.assassin.prefs.conf --lint

20.重新啟動MailScanner
service MailScanner restart


備註:
◎網頁中文化
說明 http://csc.ocean-pioneer.com/modules/news/article.php?storyid=17
檔案 http://csc.ocean-pioneer.com/docum/mailscanner.tar.gz
下載後覆蓋即可,中文測試時有些設定功能會失效,可能是版本不同造成的。

◎改網頁編碼
 若顯示Big5中文會出現亂碼,可以在/etc/httpd/conf.d下建立設定檔案
vim /etc/httpd/conf.d/mailwatch.conf

Alias /mailscanner /var/www/html/mailscanner

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



下集預告:郵件伺服器 Part-5:OpenWebMail

34 意見:

Michael 提到...

感謝大大的文章
很受用
這幾天我也在裝MailScanner
謝謝囉

另一位MIS先生 上

Yow 提到...

您客氣了~
大家都是這樣一步步走過來的
所謂"取之於網路用之於網路"
我也只不過是把向前輩所學的再整理回饋給大家而已~

匿名 提到...

不知版主有沒有碰過安裝完後,

結果連到網頁卻只有空白一片,

也沒有顯示登入的對話框,

不知是哪出了問題啊...

Yow 提到...

PHP跟MYSQL都有裝完整嗎?
安裝跟RESTART時有錯誤訊息嗎?
如果在本機用elinks連mailwatch的網頁是否有畫面?

匿名 提到...

版主謝了

因為我之前是參考別的文章做的

所以沒注意到一些元件

後來去error_log看一下錯誤訊息

google了一下

發現是少了php-mysql沒裝到

現在已可以顯示了

3Q3Q

匿名 提到...

不好意思 再請教一下

我有套用中文化

可是為什麼我開啟ie or firefox後

瀏覽器都會自動套用 UTF-8 ?

這樣好像都會變亂碼耶...

匿名 提到...

對不起 搞烏龍了

那個 mailwatch.conf 設定檔我丟錯地方了

現在可以正常顯示中文了

謝謝

Yow 提到...

呵呵~
你的動作真快,正要回覆您就找到問題了:P
如果你是做"◎網頁中文化"的話,要注意有些功能會失效(記得是黑白名單的設定),因為那個中文化的介面是舊版的網頁去改的。
mailwatch.conf的話則是讓網頁可以顯示中文信件標題

lingping 提到...

您好!
请问以下,有没有办法在“Recent Messages"显示所有邮件信息?例如第N页的显示;我有发现可以改默认的50个,但不知如何改显示所有。

Yow 提到...

  Recent Messages只是用來顯示最近的訊息,如果要看所有的紀錄,建議到Reports的Message Listing,那邊可以顯示資料庫內所有的資訊。
  在Reports裡還可以設規則篩選想要分析的紀錄。

lingping 提到...

谢谢您的回复。

我有尝试在report找一些东西看,看在report中打开的链接都是空白的,例如以下报表打开都是空白的,不知是否有办法解决;
Message Listing
Message Operations
Total Messages by Date
Top Mail Relays
Top Viruses
Virus Report
Top Senders by Quantity
Top Senders by Volume
Top Recipients by Quantity
Top Recipients by Volume
Top Sender Domains by Quantity
Top Sender Domains by Volume
Top Recipient Domains by Quantity
Top Recipient Domains by Volume
SpamAssassin Score Distribution
SpamAssassin Rule Hits
MCP Score Distribution
MCP Rule Hits
Audit Log

Yow 提到...

Recent Messages已經有看到記錄了嗎?
連Message Listing都是空白的?
Active Filters是不是有設到規則?
或是安裝phpMyAdmin檢查一下資料庫裡的內容。

lingping 提到...

非常感谢您的回复!

我在Recent Messages上是可以正常显示信息的,但打开Messages Listing则显示空白,Active Filters里没有设置任何规则,为none.我再使用phpmyadmin检查看看,谢谢。

anson 提到...

我裝完之後Recent Messages是空白的!
後來安裝phpmyadmin去看資料庫...
結果資料沒有寫入~~~
不知道是哪邊設定出的問題@@?!

Yow 提到...

檢查一下maillog裡MailScanner的部份,有沒有跟mailwatch有關的錯誤

Eric 提到...

如果將mailwatch中文化後
Web新增黑白名單的功能將失效
其實只要將lists.php
這個網頁內的字改變一下
"新增" >> "Add"
功能就恢復正常囉~
只是...這個功能在spamassassin也有,MailScanner也有,連MailWatch也有
有需要這麼多嗎? 到底哪個為主啊
留下這個只是給看著功能失效不能使用而不爽的人用的...XD

Yow 提到...

感謝指教~
原來可以這樣修改呀~
不過白名單的規則,不論在那邊設定,實際不都是載入到spamassassin的規則嗎?
只不過是不同的設定途徑

竣傑 提到...

版大大

請教一下,我的Mail Server(Postfix)會自己發垃圾郵件hinet`Yhaoo,我查過maillog,沒有傳送端資料。換過MailServer與user帳號disable 2個方法試過也是相同,不曉得版大有何見解

Yow 提到...

竣傑:
是怎麼知道在發垃圾信的?
有退信嗎?
看看退信的Header

匿名 提到...

MIS先生,向您請教一下

我的 MailWatch 在顯示 Big5 編碼的郵件主旨目前是正常的,不過若是從 Server 端的 Console 下發測試信(主旨為中文)的話會變成 ?????? 請問您知道該如何解決嗎?

Yow 提到...

因為Linux預設的中文編碼是UTF8
(可以執行 locale 檢查看看語系)
所以才會在BIG5的網頁顯示成亂碼

匿名 提到...

To MSI先生:

我的網頁是採用 UTF-8 編碼的,我的作法是將 SQL 資料庫內的主只取出之後利用 PHP 的 iconv 函數轉換編碼後再顯示,但不論是修改前或修改後,只要是由 console 下發送測試信就會顯示出一堆問號,而不是編碼問題所產生的亂碼

匿名 提到...

看起來存入MySQL前MailWatch.pm(或者是MailScanner本身傳給MailWatch.pm時)解碼qb.base64的UTF-8主旨就已經有問題了,非UTF-8主旨是正常的.這個問題可以直接抓取Header欄位的主旨來替代.
小弟改寫的UTF-8版,用mb_convert_encoding重解碼從header取出的UTF-8主旨欄位替代原有主旨欄位,並將所有主旨轉成UTF-8,有興趣可以試試
http://mindman.cjb.net/wordpress/2009/09/14/mailwatch-utf-8-%E4%B8%AD%E6%96%87%E5%8C%96/

Saint Andy 提到...

你好,

我在設定 Mailwatch 後
輸入網址 www.abc.com/mailscanner
但怎樣也不能通過驗証, 我試過用 phpmysql 將admin delete, 然後再輸入
insert into users values('admin',md5('admin'),'admin','A','0','0','0','0','0');
或其他名字及密碼. 但也不成功.

我沒有做這一段, 因為我找不到 /root/.spamassassin/

#如果已經存在bayes資料庫,複製過來
cp /root/.spamassassin/bayes_* /etc/MailScanner/bayes
chown root:apache /etc/MailScanner/bayes/bayes_*
chmod g+rw /etc/MailScanner/bayes/bayes_*

後來在 shell 出了一句
commit ineffective with AutoCommit enabled at /usr/lib/MailScanner/MailScanner/CustomFunctions/MailWatch.pm line 93, (CLIENT) line 1178.

請問大概是那裡出錯呢?
謝謝

Yow 提到...

設定檔內的USER ID有跟著改嗎?
像是$db_user的部份
改成使用root帳號呢?
.
你可以搜尋一下bayes_*所在的位置,不過這個不影響MailWatch的運作,只是看能不能在MailWatch設定學習而已。
.
AutoCommit的訊息是在做關閉資料庫時commit出錯,這個不會造成不能登入。

匿名 提到...

版主你好, 我安裝的版本是1.0.5, 安裝過程沒什麼錯誤, 網頁也有內容, 但是收件者都是空白, 我去看mysql的 maillog 資料表 to_address, to_domain 都是空的, 似乎沒有寫入DB, 其他欄位都有內容, 不知版主是否有碰過 ?

匿名 提到...

Hi Mis 先生

我的MAILWATCH原本都好好的突然就不動了!!還有MAILLOG裡面有一段是寫
host mail.abc.com[76.26.200.40] said: 550 rejecting spoofed message (in reply to RCPT TO command)這是對方拒絕我還是我拒絕他?~感謝您

GaryWu 提到...

感謝大大
邊看你的文章邊架公司的MAIL終於架好了但我懶得自己寫BLOG就回覆在這邊一些我自己解決的MailWatch的問題

我使用版本如下
MailWatch Version = 1.2.0
MailScanner Version = 4.84.5
PHP Version = 5.3.3
MySQL Version = 5.1.61

我參照修改Apache看中文的部分發現只有Detail的subject輸出是中文但其他的位子還是一樣為亂碼參考http://sourceforge.net/projects/mailwatch/forums/forum/298818/topic/1073830
跟/var/www/html/detail.php
在輸出的不同發現在functions.php
1616行 改用了utf8_encode我刪掉改成
$row[$f] = decode_header($row[$f]);
之後所有的list subject 都可以看到中文了(除了簡中)

Yow 提到...

感謝 GaryWu 大大無私的分享~ ^^b

Joseph Lin 提到...

有關mailwatch subject 繁簡中文會出現????可以改用utf-8的編碼來設定

1.修改 /usr/lib/MailScanner/MailScanner/CustomFunctions/MailWatch.pm

找到
$msg{subject} = $message->{subject};
改成
$msg{subject} = $message->{utf8subject};

2.修改 /var/www/html/mailscanner/detail.php

找到 if ($fieldn == "To:" || $fieldn == "Subject:") {
改成 if ($fieldn == "To:") {

找到 $row[$f] = htmlentities($row[$f]);
改成 $row[$f] = htmlentities($row[$f],ENT_COMPAT,'utf-8');

3.新增/etc/httpd/conf.d/mailwatch.conf

Alias /mailscanner /var/www/html/mailscanner

Order allow,deny
allow from all
AddDefaultCharset utf8


4.服務重啟 serviec httpd restart

以上可以試試看~~目前我們公司在簡中顯示正常無誤~~

匿名 提到...

mis先生您好,想請問mailwatch可以把寄信的mail也寫進資料庫嗎,感謝

Yow 提到...

可以~
只要有經過MailScanner掃描的都會記錄在MailWatch裡

匿名 提到...

是否可以教導如何把寄信的資料寫進mailwatch 的資料庫,感恩

匿名 提到...

sorry,大概是我寫不夠清楚,是說本地網域smtp發送出去的信可以寫進mailwatch資料庫嗎,感恩

##EasyReadMore##