2016年3月13日 星期日

垃圾郵件防治 EFA-Project SPAM Gateway



話說垃圾郵件一直都是MIS的痛,尤其是沒預算買SPAM閘道的(最小25U、50U對於10多人的小企業負擔不起),上Gmail就更不用說了(10U一年就要一萬多),防火牆或者UTM上面的SPAM過濾往往是半殘(在主旨加上SPAM或對中文內容無法過濾),雖然知道Linux可以架設SPAM閘道但是身為兼職的MIS多一事不如少一事,遲遲沒時間研究,偶然找到EFA這個專案(https://www.efa-project.org),他有ova在虛擬化上部署極快,啟動後經過簡單的設定即可開始運作。


EFA使用的是 CentOS6 + Postfix + MailScaner + SpamAssassin + MailWatch
而且已經預先配置完成,在CLI的精靈模式設定可以很容易地完成初始化
只需要設定欲接收的網域與轉送的Mail Server IP即可

其實公司的Mail Server有內建垃圾郵件過濾與灰名單功能,但是提供可設定的項目太少,隔離清單還是英文的,內勤人員根本不知道怎麼用。至於灰名單功能,時常會造成郵件延遲,所以後來關掉了。

基本上EFA滿足了對於一個基本的SPAM閘道需求
1. 有隔離所
2. 有spam分數,用來分析校調
3. 能做客製化調整(MailWatch是PHP寫的配合的資料庫是MySQL)





來說說限制跟地雷吧
1. 非透通式的,需要修改MX
2. 如果Mail主機不對外,EFA的SMTP要提供認證寄信功能只能用LDAP
3. MailWatch介面與通知信件只有英文
4. 沒有LDAP或者於MailWatch中建立帳號不會產生隔離報告郵件
5. 預設的通知郵件沒有取回郵件的連結,只有連結到MailWatch該封郵件的連結,需要登入才能處理郵件



基於上面的架構限制,也不想多維護一個LDAP,因此使用MX的方式將EFA的MX優先權放到5,而原本的Mail主機MX則設定為10,這樣讓現有的outlook用戶端不需要任何調整即可使用,而寄進來的郵件,會先用MX為5的EFA投遞郵件

不過,剛開始測試時因為預設開啟灰名單導致有些郵件主機被EFA因為灰名單因素reject投遞後會改用第二個MX繼續投遞,導致Mail沒有經過EFA的過濾,因此如過使用MX這種旁路架構,建議灰名單功能要停用。


再來處理隔離所通知沒帳號不會產生的問題,因為Mail Server是一個BOX軟體形式的,沒辦法安裝套件或者修改(便宜嘛),因此要用LDAP去同步帳號到EFA是不可行的,要重新建立帳號不是不行,只是這樣使用者又多了一組帳號密碼,操作上也頗麻煩(取回郵件還要多一個登入步驟),翻一下EFA論壇的文章發現隔離報告是由Crontab每日執行的

Cron設定位於 /etc/cron.daily/mailwatch

其中產生報告與寄送的程式是在 /usr/local/bin/mailwatch/tools/Cron_jobs/quarantine_report.php

修改後如下



變更內容
1. 不使用MailWatch資料庫中的帳號清單(改為從隔離所中取得收件者當作帳號)
2. 中文化,去除收件者欄位
3. 不只顯示SPAM清單,連同病毒郵件與禁止的附件郵件也包含在清單中(不過後兩者無法取回,只能要求寄件者重新寄送)
4. 去除檢視郵件連結改為取回郵件(無需認證)



取回郵件在MailWatch的設計中需要登入,為了使用上的方便所以修改一版不需要登入的版本如下


放置到 /var/www/cgi-bin/ 目錄中即可