如何架設免費的防毒防垃圾信的 Mail Gateway

因為公司導入 Exchange 2010 的緣故, 原來在 Server 端的防毒機制就無法沿用, 而採用防毒軟體的方式變成每個使用者都要每年付費,而坊間的 Mail Gateway 購買都需要十數萬起跳,覺得有點不值。

先前已經有利用 Open Source 的方案來架設過 Mail Server 的經驗,覺得應該架設個免費的防毒防廣告信的 Mail Gateway 應該不難,不過這次想要玩點不同的東西所以選擇了 CentOS 來玩玩看.

首先到上述網站去下載 CentOS最新版本,記得去 Download DVD 的格式,以免安裝時需要換片;由於我目前的作法是放在DMZ區內的 VMWare主機,讓Mail進入到 Exchange 前先到Mail Gateway繞一圈同時檢查病毒信及垃圾信,所以不用另行準備機器,在 VMWare 上面產生一個虛擬主機就好。

在作 Mail Gateway 僅使用 Postfix, SpamAssassin, ClamAV 及 MailScanner 等軟體, 在網路上參照 Aaron Walrath的Set up an email gateway with CentOS Linux 5.4 文章,Aaron 講解整個過程非常的清楚,基本上只要有點 Linux 主機的架設經驗依照步驟就可以順利完成,以下就是整個的步驟加上一點自己的說明,過程中請利用 root 帳號來進行設定。

Step1 Install CentOS

指令: None

說明: 當然先把 CentOS裝起來,所有指令都是在 Terminal 上面執行,所以有沒有UI不是很重要,不過我還是有裝起來以防萬一。

Step2 Update CentOS

指令: # yum –y update

說明: CentOS 也有自己的更新方式,建議在安裝前先把系統更新到最新的狀態,如同裝好 Windows 就到 Windows Update 去跑一次

Step3 Install additional modules

指令: # yum install wget ntp vixie-cron crontabs postfix patch rpm-build binutils glibc-devel gcc make yum-protectbase yum-priorities

說明: 利用yum 指令去安裝可能額外的套件,這些套件都會在後面的作業用到,由於以上的套件於安裝完後就是最新的版本就不用更新了

Step4 Disable SELINUX

指令: SELINUX=disabled

說明: 到 /etc/selinux/config 檔案修改參數,如果在安裝 CentOS時選擇不啟用 SELinux,就可以不用執行本步驟,不過多檢查一次也無法妨。

Step5 Disable Firewall

指令: # chkconfig iptables off && service iptables stop

說明: 關閉 iptables 防火牆並設定下次開機時不要啟動,因為這台主機是放在另一個防火牆後面,同時關閉防火牆可以減少測試時的錯誤。

Step6 Configure Postfix

指令:

myhostname = yourdomain.com

        mydomain = localhost
        myorigin = $mydomain
        inet_interfaces = all
        mydestination = $myhostname, localhost.$mydomain, $mydomain
        mynetworks_style = host

說明: 在 /etc/postfix/main.cf 變更設定成符合公司的設定與規則

Step7 Setup Relay Domain

指令: relay_domains = yourdomain.com

transport_maps = hash:/etc/postfix/transport

說明: 在 /etc/postfix/main.cf 加入以上的設定,讓系統認定只允許幫 @yourdomain.com 的信箱做轉信動作;並指定 transport method 所使用的檔案名稱。

Step8 Setup Transport IP

指令: yourdomain.com smtp:[192.168.1.1]

說明: 設定 youromain.com 的信件都往 192.168.1.1 丟,本機不做郵件儲存

Step9 Building lookup table

指令: # postmap /etc/postfix/transport

說明:由於 Postfix 不直接讀取 Transport 檔案,需要透過 postmap compile.

Step10 Restart Postfix

指令: # service postfix restart

說明: 重新啟動 Postfix 服務,此時基本轉信功能依該已經完成,可以先成測試,如果有問題的話請檢查以上動作是否確實修改。

Step11 Donwload MailScanner

指令:

# cd ~

# wget http://www.mailscanner.info/files/4/rpm/MailScanner-4.79.11-1.rpm.tar.gz

# tar zxvf MailScanner-4.79.11-1.rpm.tar.gz

# cd MailScanner-4.79.11-1

說明: 手動下載 MailScanner 並利用 tar 指令解開,並到解開的目錄去,由於MailScanner 可能會有新版本,所以建議做這個動作時先去檢查看看,當然版次越新bug應該越少才對。

Setp12 Install MailScanner

指令: # ./install.sh

說明: 於 Step11 中的路徑執行安裝程式,這個動作會在螢幕上產生很多,大多數隻是警告,一般來說只要不太需要去修正它,等候他安裝完畢即可。

Step13 Set postfix and MailScanner at startup

指令:

        # chkconfig postfix off
        # service postfix stop
        # chkconfig MailScanner on

說明: 於電腦啟動時不啟動 Postfix但請啟動 MailScanner, 並寫回啟動檔案內,其實 Postfix 不是不用它,而是啟動 MailScanner 時會自動把 Postfix 帶起來,這樣的設定是把兩個服務綁在一起,未來重新啟動時兩個服務也會同時動作。

Step14 Grant MailScanner mail store path to postfix

指令:

# chown postfix.postfix /var/spool/MailScanner/incoming

# chown postfix.postfix /var/spool/MailScanner/quarantine

說明: 執行以上指令讓postfix 這個 User 可以存取 MailScanner 存放新進郵件及病毒隔離區的郵件目錄

Step15 Assign MailScanner to use Postfix

指令:

Run As User = postfix

Run As Group = postfix

Incoming Queue Dir = /var/spool/postfix/hold

Outgoing Queue Dir = /var/spool/postfix/incoming

MTA = postfix

Use SpamAssassin = no

說明: 在 /etc/MailScanner/MailScanner.conf 設定檔案變更以上的設定,MailScanner 去呼叫 Postfix 作為收發郵件的程式,同時指定於 Step14 所提到的兩個路徑,注意此時還沒有啟動 SpamAssassin 喔,這是方便後續的測試。

Step16 Edit Postfix header check

指令: header_checks = regexp:/etc/postfix/header_checks

說明: 編輯 /etc/postfix/main.cf 檔案

Step17 Add one line

指令: /^Received:/ HOLD

說明: 在 /etc/postfix_header_checks 加入這行指令,Aaron 並沒有解釋為啥,我也沒有去研究..嘿嘿

Step18 Start MailScanner

指令: # service MailScanner start

說明: 啟動MailScanner服務,如果設定正確可以看到系統回覆是Postfix先啟動之後才換到 MailScanner;此時也可以發測試信件看看 Mail Forward 是否正確。

Step19 Install additional repository

指令:

        # cd ~
        # wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.1-1.el5.rf.i386.rpm

        # rpm -ivh rpmforge-release-0.5.1-1.el5.rf.i386.rpm

說明: 到 RPMForge去安裝它額外的更新套件;原來rpmforge.repo內有個typo,我於安裝時發現已經被更正了,所以這邊就不再提出要修正。

Step20 Install ClamAV

指令: yum install –enablerepo=rpmforge clamav clamav-db clamd

說明: 因 ClamAV(http://www.clamav.net/lang/en/) 不在CentOS標準的套件內,所以必須要透過 RPMForge 去找到 ClamAV 再來安裝。

Step21 Update Virus DB

指令: freshclam

說明: 手動作病毒碼更新

Step21 Assign ClamAV update path

指令: Monitors for ClamAV Updates = /var/clamav/*.cld /var/clamav/*.cvd

說明:指定 ClamAV病毒碼的路徑

Step22 Install SpamAssassin

指令: yum install spamassassin

說明: 安裝 Spamassassin (http://spamassassin.apache.org/),這是一套廣被業界所使用的防垃圾信套件,藉由對郵件的運算可以得到一個固定的分數,只要分數超過設定後就會被判定為垃圾信;同時本身有讀取已知的轉信站台清單的功能。

Step23 Setup directory for SpamAssassin

指令:

        # mkdir /var/spool/MailScanner/spamassassin
        # chown postfix.postfix /var/spool/MailScanner/spamassassin

說明: 設定好目錄權限給 SpamAssassin使用

Step24 Configure MailScanner for SpamAssassin

指令:

        Use SpamAssassin = yes
        SpamAssassin User State Dir = /var/spool/MailScanner/spamassassin

說明: 在 /etc/MailScanner/MailScanner.conf 設定檔內指定使用 SpamAssassin 作為檢查程式。

Step25 Restart MailScanner

指令: # service MailScanner restart

說明: 重新啟動 MailScanner, 此時 MailSCanner 就會自動的啟動 SpamAssassin 來幫你檢查垃圾郵件。

Step26 Checking maillog

指令: # tail –f /var/log/maillog

說明: 由於郵件來來去去動作很快,所以可以藉由觀察 Maillog 這個 Log 檔案來檢驗整個機制是否正常運作。

後記

1.指令中有 # 代表示指令,必須要在Terminal 執行。

2.以上完成後系統會自動每日去更新 ClamAV病毒碼,不需要自行在用 crontab 指令來做。

3.VM主機記憶體於安裝時請用 512MB 以上,設定好之後最好就不要再改,我改大一點後系統卻變慢。

4.如果對 Linux 真的很不熟擔心不知道要如何管理,可以去安裝 Webmin(http://www.webmin.com/) 的軟體,之後幾乎所有設定都可以透過網頁去來管理。

發表迴響