Linux 電子郵件防毒: ClamAV + Sendmail
本文要介紹的 Linux 的 E-Mail 防毒主要由兩個套件組成: clamav 與 clamav-milter。
其中「clamav」是防毒軟體、「clamav-milter」是 clamav 用來與 sendmail 整合的掃毒程式。
安裝 ClamAV 相關套件
yum install clamav clamav-milter
安裝完之後,它會新增一個名為「clamav」的用戶,用它來執行 ClamAV 的相關程式,請不要覺得奇怪就把這個用戶給刪了。
啟動服務:
chkconfig clamd on chkconfig clamav-milter on service clamd start service clamav-milter start
第一次啟動 clamd 出現如下的錯誤訊息不用害怕:
service clamd start Starting Clam AntiVirus Daemon: LibClamAV Warning: ************************************************** LibClamAV Warning: *** The virus database is older than 7 days! *** LibClamAV Warning: *** Please update it as soon as possible. *** LibClamAV Warning: **************************************************
這表示病毒資料庫很舊,執行下列指令更新即可:
freshclam
資料庫也會每天自動更新,更新的指令寫在「/etc/cron.daily/freshclam」。
結合 sendmail 防毒
編輯 /etc/mail/sendmail.mc,在最後加入:
INPUT_MAIL_FILTER(`clmilter', `S=local:/var/clamav/clmilter.socket, F=, T=S:4m;R:4m')dnl define(`confINPUT_MAIL_FILTERS', `clmilter')
接著要重製 sendmail.cf:
m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
重新啟動 sendmail:
service sendmail restart
如果上面都沒發生任何錯誤,那 E-Mail 防毒就完成了。
錯誤處理
如果在重新啟動 sendmail 時出現如下的錯誤訊息:
WARNING: Xclmilter: local socket name /var/clamav/clmilter.socket missing
這個錯誤是因為 sendmail 在啟動時找不到 ClamAV 的 Socket。解決方法很簡單,請查看「/etc/clamav-milter.conf」,找到 MilterSocket unix: 參數,後面接的就是 Socket 的正確路徑了 (例如: MilterSocket unix:/var/clamav/clmilter.socket)。把路徑置換到剛剛加入 sendmail.mc 的 S=local: 後面的參數,接著一樣重製 sendmail.cf:
m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
重新啟動 sendmail:
service sendmail restart
發現病毒的處理方式
ClamAV 預設是將病毒放到隔離區,如果修改處理方式,請編輯「/etc/clamav-milter.conf」,搜尋並修改 OnInfected 參數,可設為下列五種參數:
- Accept -> 允許寄送,就像沒發生什麼事情一樣 (不建議使用)
- Reject -> 退回給寄件者
- Defer -> Return a temporary failure message (4xx) to the peer (不懂使用這個參數的效果)
- Blackhole -> 直接刪除信件,不做其它回應
- Quarantine -> 把信件放到隔離區 (預設)
修改完必須重新啟動 clamav-milter:
service clamav-milter restart
如何測試病毒郵件
要如何測試 E-Mail 的防毒是否有效?!只要寄一封信到伺服器的收件者,在郵件的內文加入這一行文字:
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
查看 Server 上的 Log 檔:「/var/log/maillog」,依 OnInfected 的設定可看到這些記錄...
當 OnInfected 設為「Reject」時:
Nov 12 18:34:46 mail sendmail[20581]: tACAYk0L020581: from=<[email protected]>, size=436, class=0, nrcpts=1, msgid=<[email protected]>, proto=ESMTP, daemon=MTA, relay=[127.0.0.1] Nov 12 18:34:46 mail sendmail[20581]: tACAYk0L020581: Milter: data, reject=554 5.7.1 Command rejected Nov 12 18:34:46 mail sendmail[20581]: tACAYk0L020581: to=<[email protected]>, delay=00:00:00, pri=30436, stat=Command rejected
當 OnInfected 設為「Blackhole」時:
Nov 12 18:43:05 mail sendmail[21387]: tACAh53o021387: from=<[email protected]>, size=437, class=0, nrcpts=1, msgid=<[email protected]>, proto=ESMTP, daemon=MTA, relay=[127.0.0.1] Nov 12 18:43:05 mail sendmail[21387]: tACAh53o021387: Milter: data, discard Nov 12 18:43:05 mail sendmail[21387]: tACAh53o021387: discarded
當 OnInfected 設為「Defer」時:
Nov 12 19:24:53 mail sendmail[32350]: tACDOr8O032350: from=<[email protected]>, size=400, class=0, nrcpts=1, msgid=<[email protected]>, proto=ESMTP, daemon=MTA, relay=[127.0.0.1] Nov 12 19:24:53 mail sendmail[32350]: tACDOr8O032350: Milter: data, reject=451 4.3.2 Please try again later Nov 12 19:24:53 mail sendmail[32350]: tACDOr8O032350: to=<[email protected]>, delay=00:00:00, pri=30400, stat=Please try again later
當 OnInfected 為預設的「Quarantine」:
Nov 12 18:20:47 mail sendmail[20871]: tACAblgl020871: from=<[email protected]>, size=436, class=0, nrcpts=1, msgid=<[email protected]>, proto=ESMTP, daemon=MTA, relay=[127.0.0.1] Nov 12 18:20:47 mail sendmail[20871]: tACAblgl020871: milter=clmilter, quarantine=quarantined by clamav-milter
當 OnInfected 設為「Quarantine」時,中毒的檔案會放到隔離區,不過這個隔離區是在「/var/spool/mqueue」。你可以執行 mailq -qQ 查看有多少檔案被隔離:
mailq -qQ /var/spool/mqueue (3 requests) -----Q-ID----- --Size-- -----Q-Time----- ------------Sender/Recipient----------- tAC9hg4M015066 69 Thu Nov 12 17:43 <[email protected]> QUARANTINE: quarantined by clamav-milter <[email protected]> tACAblgl020871 69 Thu Nov 12 18:20 <[email protected]> QUARANTINE: quarantined by clamav-milter <[email protected]> tACAr3aP022084 70 Thu Nov 12 18:53 <[email protected]> QUARANTINE: quarantined by clamav-milter <[email protected]> Total requests: 3
寫在最後
為什麼還要多這一段「寫在最後」呢?
因為,雖然很簡單的就裝好了 ClamAV,但是用一陣子你可能會發現,ClamAV 似乎...根本...好像...掃不到病毒!!
就我所知,ClamAV 能掃到的病毒只有約 50%,甚至可能更低!!
所以,如果你中過毒、知道電腦病毒的可怕,那就不要鐵齒...電腦上的防毒軟體還是再裝一套吧!!
No comments yet.