作者:cschen33.tw@tw.yahoo.com
建立日期:2009/09/18
修改日期:2009/09/23

使用軟體:
samba winbind (AD整合),sendmail,MailScanner
註: 本說明並不含samba,winbind(AD的整合),及sendmail,MailScanner的詳細設定說明,只是針對重點說明

目的:
要使用Linux來設定郵件備份主機,
  1. 根據使用者來備份,不要將郵件全部備份到同一個帳號,一般郵件備份主機常使用的方法是備份到一個帳號,其缺點,就是處理速度會隨著郵件變多而 變慢
  2. 使用maildir來備份,不要使用mailbox來備份,所謂mailbox是將所有的郵件由放在一個檔案內,而maildir是每一個郵 件以一個 檔案來儲存 mailbox的缺點,當郵件多時檔案會變大,所有的郵件會因為這個檔案損壞而遺失,因為資料都在檔案中,因此開啟速度會變慢,而使用maildir則可 以使用到一些檔案系統的加速功能
  3. 大量回存使用IMAP來取回郵件,若只是要單封,透過webmail (squirrelmail),http://IP/webmail
一般的使用者是由AD認證,郵件內送外寄的郵件都是透過本機relay,因為是備份郵件可見若使用mailbox 會造成將來的效能問題,因此要改為maildir的方式,如何改?因為中間又碰到許多問題如沒有多少linux console client端支援maildir,若使用imap會碰到root會因此安全性的問題而中斷,如何解決,遍尋網路近一天,無解,本來想要重新編譯 alpine包含maildir修正,但實在是太不可能,
最後找到一個最簡單的方法,寫下來
#mail backup server 譯成郵件備援主機,不是備份主機,因此不要和弄混了


圖例:


原來 說明
這是一般的郵件伺服器的設法,因為我司多了vpn
因此內部郵件是透過VPN
#會使用vpn的原因,是大陸的網路很奇怪會擋一些信,造成無法理解的結果

1
說明
左圖加入一台備份郵件主機
會這樣做,是因為台灣郵件主機和大陸郵件主機是買來的,而且都是嵌入式linux系統(當然不是我買的,浪費錢又不好用),因此很多東西都被鎖住,無法變 更,我必須將備份功能大部份移到自己架設的linux備份主機上
1.變更mail server relay
2.變更防火牆的郵件轉埠功能
3.變更client端寄信主機(smtp)
4.變更mail server 內部網域轉寄主機

2
說明

這是如果你的mail server是linux架的,也安裝了MailScanner而你也可以有足夠的權限
變更/etc/MailScanner/MailScanner.conf 修改
Archive Mail =  %rules-dir%/archive.rules
編輯/etc/MailScanner/rules(你要根據%rules-dir%來變更路徑)
加入備份的規則
TO: *@公司網域   _TOUSER_@[ip]
#其中IP是郵件備份主機的IP
#兩台r都是使用ad整合所以帳號是都存在
  寄給mail server 的使用者的信會備份一份到郵件備份主機的同使
  用者,當使用者的郵件遺失,可以由郵件備份主機取得
#上述只備份目的為本機的使用者,若是你想要備份寄出的郵件,需要指定一個帳號來收如company_out,
FROM: *@公司網域   company_out@[ip]
#[ip]也可以改成網域端看你的dns設定,如果你不確認(不想動),則使用就可以了
#由於大部份的環境都會保持原狀,不同的只是mail server多了上述的設定,至於 mail archive server設定的複雜程度會降低許多



                                      

實作:
我使用"1"方式來做,因為mail server 是買的無法自己改,若是自己裝的請改為"2",因為2比較簡單,在此不說明,請自行參照1的做法
sendmail 改用maildir
 只要在/etc/procmailrc中加入一行
  DEFAULT=/路徑/
 #其中路徑後面加 一個/就是使用maildir 否則是使用mailbox
  當然你可以直接將郵件放在某一個資料夾來管理,或是放在各使用者的家目錄下管理
  1.   集中管理: DEFAULT=/var/spool/maildir/$LOGNAME/
  2.   放在家目錄下的.Maildir:  DEFAULT= $HOME/.Maildir/
dovecot (imap,pop3)改為maildir: 以下取自dovecot.conf中的說明,變更紅色部份
 There are a few special variables you can use, eg.:
#
#   %u - username
#   %n - user part in user@domain, same as %u if there's no domain
#   %d - domain part in user@domain, empty if there's no domain
#   %h - home directory
#
# See doc/wiki/Variables.txt for full list. Some examples:
#
#   mail_location = maildir:~/Maildir
#   mail_location = mbox:~/mail:INBOX=/var/mail/%u
#   mail_location = mbox:/var/mail/%d/%1n/%n:INDEX=/var/indexes/%d/%1n/%n
#
# <doc/wiki/MailLocation.txt>
#
mail_location = maildir:~/.Maildir/
    #請對照 /etc/procmailrc中 $HOME/.Maildir/ 和 dovecot.conf ~/.Maildir/
      其實是相同的~和$HOME是同樣指登入者的家目錄,但是有時候$HOME的環境變數可能無法使用,因為我本來試著將dovecot中改成和 
      procmailrc中相同,但是dovecot不接受,因此改為目前的~/.Maildir/我相信若是均使用 ~/.Maildir/應該可以,但要測試一下

   上述sendmail ,dovecot服務重啟

webmail
    提供回存時先查詢郵件
    1.大家最常用的openwebmail並不支援maildir ,在網路上找不到使用pop3或imap來收信,它應該是直接處理郵件檔(mailbox)
    2.改用squirrelmail ,因為它是使用imap ,所以一旦dovecot變更它就跟著變更
console mail client
    為了收root信,一般都是使用console的mua,因為imap/pop3限制 root的存取,只能本機存取,然而支援imap及pop3或是maildir
   實在少之又少,一般常用幾乎沒有一個支援
   解法:
因為看到/etc/procmailrc又在網路找到這個檔 ~/.procmailrc 顯而易見,系統和個人的設定是可以分開
將root改為mailbox方式來收信
在root的根目錄建立.procmailrc
輸入DEFAULT=/var/mail/root
重啟sendmail
sendmail relay
        1.mail server 不直接傳送,而使用relay 到mail archive server
        2.mail server 原設定假的(內部ip)dns到大陸的IP去掉(用不到),用3來取代
        3.mail archive server設定relay 台灣內部IP 大陸內部IP, 台灣外部網域
        4.mail archive server要設定網域路由,指定大陸的網域使用IP來傳送, 台灣的網域使用IP來傳送,其它直接傳送
client端
         變更smtp server為 mail archive server
mail archive server 備份設定
       變更/etc/MailScanner/MailScanner.conf 修改
        Archive Mail =  %rules-dir%/archive.rules
        Sign Clean Messages = no
        #第一項是備份設定,第二項是不要在乾淨的郵件的頁尾加上文字如下的文字

     -- 
     This message has been scanned for viruses and
     dangerous content by MailScanner, and is
     believed to be clean.
       再來編輯/etc/MailScanner/rules(你要根據%rules-dir%來變更路徑)
       加入備份的規則,因為是由mail 使用本機
       TO: *@公司網域   _TOUSER_@localhost
      
# 上述的_TOUSER_變數是由MailScanner.conf中的説明取得,説明如下:
# _DATE_       將被取代為目前的日期格式yyyymmdd .將會使得備份的輪轉和維護比較簡單
#                可以保證昨日的郵件不會備份到今天.
# _TOUSER_     取代為收件者@左邊.
# _TODOMAIN_   取代為收件者@右邊.
# _FROMUSER_   將會取代為寄件者@左邊.
# _FROMDOMAIN_ 將會被取代為寄件者@右邊.
*記住@localhost必須是用小寫,如何變化端看你的智慧
*沒有人説可以使用在rules中是我自已測試出來,結果是可以
mail archive server 定時清除不需要的郵件
          使用程式tmpwatch ,我們先預設所有的郵件的目錄在/var/spool/maildir     
           例: /usr/sbin/tmpwatch 1440  /var/spool/maildir
                1440 = 2*30*24 兩個月的小時數,也就是它會清掉60天之前的郵件,
           dovecot 會在使用者的資料夾建立好幾個dovecot啟始的檔案來管理該郵件目錄
          例:使用者cs_chen其資料夾在/var/spool/maildir/cs_chen
                   內存在new,cur,tmp三個資料夾,一旦你由dovecot來收信,就會建立,但是我們不應刪除
          實例:
          假設網域名稱為ABC,因此一般使用者的家目錄會設成
           /home/samba/ABC/使用者目錄/.Maildir
          因此我們要定時清掉該使用者的舊信60天
           /usr/sbin/tmpwatch 1440 /home/samba/ABC/使用者/.Maildir/new
           /usr/sbin/tmpwatch 1440 /home/samba/ABC/使用者/.Maildir/cur
           寫一個shell script 來清 名稱 mail_tmpwatch
#!/bin/bash
basename="/home/samba/ABC/"
maildir_new="/.Maildir/new"
maildir_cur="/.Maildir/cur"
tmpwatch_hour=1440
for filename in `ls $basename`
do
if [ -d $basename$filename$maildir_new ]
then
    `tmpwatch $tmpwatch_hour $basename$filename$maildir_new`
fi
if [ -d $basename$filename$maildir_cur ]
then
    `tmpwatch $tmpwatch_hour $basename$filename$maildir_cur`
fi
done

          放在/etc/cron.daily 就可以了, 每天定時做一次
 

結論:
因為使用MailScanner的 郵件備份的規則,TO: *@公司網域   _TOUSER_@[ip]
大大的簡化郵件備份的設定