因為公司導入 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/) 的軟體,之後幾乎所有設定都可以透過網頁去來管理。