利用 procmail 的過濾信件(Postfix )
參考網址:http://blog.weithenn.org/2009/06/freebsdpostfix-amavisd-new-uvscan.html
Procmail 部份 (自訂郵件收送規則)
步驟1.安裝 Procmail 套件
切換至 Ports Tree 路徑安裝 Procmail 套件(請尊重 weithenn 的辛勞!!)
#cd /usr/ports/mail/procmail //切換至安裝路徑
#make install clean //安裝套件並清除安裝過程中不必要的檔案
步驟2.修改 Postfix 設定檔 (main.cf)
修改 Postfix 設定檔 main.cf 內容如下
#vi /usr/local/etc/postfix/main.cf //修改 Postfix 設定檔
mailbox_command = /usr/local/bin/procmail //加入此行 (自訂的規則會套用至所有帳號)
步驟3.編寫過濾規則 (procmailrc)
編寫過濾規則設定檔 Promailrc 下列過濾規則為收集網路上資料而成的範例。(請尊重 weithenn 的辛勞!!)
- 所有使用者的過濾條件: /usr/loca/etc/procmailrc
- 個別使用者的過濾條件: .procmailrc (使用者家目錄下透過 .forware 來啟動 procmail)
使用者可透過在個人家目錄下 .forward 加入如下內容來達到自訂個人過濾條件的目的 (請依個人喜好擇一即可)
#cat ~/.forward
"| /usr/local/bin/procmail" //加入此行 (方式一)
"|IFS=' ' && exec /usr/local/bin/procmail -f- || exit 75 $USER" //加入此行 (方式二)
以下為自訂所有使用者的過濾條件,其中的 /dev/null 可以換成別的目錄 (ex./var/virusmails)。內容如下 (當然您可依個人需求新增/刪除)
#vi /usr/loca/etc/procmailrc
VERBOSE=off
LOGFILE=/var/log/procmail.log
###########################################################################
###Procmail 寄進來的郵件依下列規則逐一過濾,未符合底下規則的信件都放行 ###
###Subjcet 主旨 ###
###Content-Type: ###
###########################################################################
############ KLEZ.G Virus ############
:0b
* ^Subject:.*(Let's be friends)
/dev/null
###
:0b
* ^Subject:.*A funny game
/dev/null
###
:0b
* ^Subject:.*Hello\,.*\,how are you.*
/dev/null
###
:0 B
* ^Content-Type:.*audio/x-wav.*
* ^.*name=.*\.(scr|SCR)
/dev/null
###
:0 B
* ^Content-Type:.*audio/x-midi.*
* ^.*name=.*\.(scr|SCR)
/dev/null
###
:0 B
* ^Content-Type:.*application/octet-stream.*
* ^.*name=.*\.(scr|SCR)
/dev/null
###
:0 Bb
* ^This game is my first work.*
* ^You\'re the first player.*
* I.*you would .* it.*
/dev/null
###
:0 Bb
* .*This is a.*patch.*
* ^I .* you would.*it.*
/dev/null
###
:0 Bb
* .*iframe src=3Dcid.*height=3D0 width=3D0.*
/dev/null
###
:0 B
* ^Content-Type:.*multipart/mixed.*
* name="ANTI_CIH.EXE"
/dev/null
###
:0b
* ^Subject:.*W32.Klez.*removal tools.*
/dev/null
############## Nimda Virus ###############
:0 Bh
* ^Content-Type:.*audio/x-wav.*
* name="readme.exe"
/dev/null
###
:0 Bh
* ^Content-Type:.*audio/x-wav.*
* name="sample.exe"
/dev/null
###
:0 B
* ^Content-Type:.*multipart/mixed.*
* name="readme.exe"
/dev/null
###
:0 B
* ^Content-Type:.*multipart/mixed.*
* name="sample.exe"
/dev/null
###
:0 B
* ^Content-Type:.*application.*
* name="readme.exe"
/dev/null
###
:0 B
* ^Content-Type:.*application.*
* name="sample.exe"
/dev/null
############# SirCam Virus ############
:0 Bh
* I send you this file in order to have your advice
/dev/null
############# PE.BRID.A ############
:0 H
* ^X-Mailer: EBT Reporter.*$
/dev/null
###
:0 B
* ^.*[Nn][Aa][Mm][Ee]=README\.EXE.*$
/dev/null
#############廣告信 (下列三種挑一個吧) ##############
:0:
* ^X-Spam-Flag:.*YES
/dev/null
:0:
* ^X-Spam-Level:.\*\*\*\*\*
/dev/null
:0:
* ^X-Spam-Status:.*Yes
/dev/null
建立 Procmail Log 以便後續觀察 Procmail 運作狀況,若要允許使用者的 Procmail 過濾規則也可寫入該 Log 的話則權限請設定為 666(請尊重 weithenn 的辛勞!!)
#touch /var/log/procmail.log //建立 Procmail Log
#chmod 666 /var/log/procmail.log //允許使用者的 Procmail 過濾規則也可寫入
步驟4.測試過濾規則
在測試過程中可以針對 A funny game 主旨來進行測試並且把 /dev/null 改成/var/virusmails。寄此主旨的信件給使用者然後使用 mailstat 來觀察。
#mailstat -km /var/log/procmail.log
步驟5.如何過濾中文廣告信
由於中文編碼 (中文廣告信) 進入系統後會顯示為亂碼,因此若是您直接在過濾規則內打中文是無法過濾中文廣告信的,所以請安裝 mmencode 套件,將中文字轉換為 MIME Code。
#cd /usr/ports/converters/mmencode //切換到安裝路徑
#make install clean //安裝並清除過程中不必要的檔案
MIME 定義兩種編碼方法:Base64 與 QP(Quote-Printable) 而含有 MIME 編碼的郵件若您查看它的源始碼會含有 "This is a multi-part message in MIME format." 這樣的句子。
- Base64: 預設值,將整個檔案資料重新編碼為 7bits
- 以下將中文字 打炮 轉換成 MIME 編碼中的 Base64 以及將 Base64 轉換回中文
#echo "打炮" | mmencode //中文轉換為 Base64
pbSstgo=
#echo "pbSstgo=" |mmencode -u //Base64 轉換為中文
打炮
- QP (Quote-Printable): 將 8bits 中文資料轉換為 7bits
- 以下將中文字 打炮 轉換成 MIME 編碼中的 QP 以及將 QP 轉換回中文
#echo "打炮" | mmencode -q //中文轉換為 QP
=A5=B4=AC=B6
#echo "=A5=B4=AC=B6" | mmencode -q -u //QP 轉換為中文
打炮
在 Procemail 過濾規則 (procmailrc) 中可以接受 Base64 及 QP 的 MIME 編碼,以下過濾規則中為郵件主旨中只要有打炮這二個中文字眼就把該 Mail 移到 /dev/null 去。
:0b
* ^Subject:.*(pbSstgo=)* //Base64 Code
/dev/null
:0b
* ^Subject:.*(=A5=B4=AC=B6)* //QP Code
/dev/null
近期留言