这个系列第四篇,有关防病毒。因为某次杀毒的时候爆出我的邮件备份文件中有病毒,虽然最后证明是false alarm,但是也不排除以后会收到带病毒的邮件,所以还是用上杀毒软件比较好,只不过主要还是对windows下的病毒。
杀毒软件用的是clamav,自带了clamav-milter,但是源里的包编译的时候没有开启,上传了一个到aur,https://aur.archlinux.org/packages/clamav-milter/,安装完直接systemctl start clamav-milter
就行了。
设置/etc/clamav/clamav-milter.conf
MilterSocket local:/var/lib/clamav/clamav-milter.sock
MilterSocketMode 666
然后/etc/postfix/main.cf
修改smtpd_milters
smtpd_milters = unix:/var/lib/clamav/clamav-milter.sock
如果有别的milter,比如之前的opendkim的,用,
分隔。只需要设置smtpd_milters
,不需要non_smtpd_milters
不过clamav本身是很占资源的,尤其是内存,至少要近180M,而扫毒的时候更耗内存,还好前段时间linode加了内存,不然还是撑不住。
另外/etc/clamav/clamd.conf
要设置
StructuredSSNFormatNormal no
StructuredSSNFormatStripped no
因为这个是扫描文件中是否有信用卡号和social security number,但是不在美国,social security number根本没用,反而会造成false alarm,因为只要是xxx-yy-zzzz
或者xxxyyzzzz
格式的字符串就会被认为是social security number,很容易误判。
对于一些邮件可以建立白名单,设置/etc/clamav/clamav-milter.conf
Whitelist /etc/clamav/whitelist-address
然后建立/etc/clamav/whitelist-address
白名单文件,写规则,一行一个。文件名不能有下划线,不然无法启动的。
From:xx@yy.com
To:zz@yy.com
当邮件被判定含有病毒的时候,可以设置/etc/clamav/clamav-milter.conf
VirusAction /etc/clamav/holdnotify
建立/etc/clamav/holdnotify
文件,比如通知admin
#!/bin/bash
echo "A message \"$5\" from $3 to $4 has been quarantined for being infected by $1 at $7 with queue id $2 and message id $6" | mutt -s "Infected email quarantined" -- admin@yy.com
可以用的一些变量
$1 病毒名
$2 邮件队列id
$3 发信人地址
$4 收信人地址
$5 邮件主题
$6 邮件id
$7 邮件日期
如果误判了可以用postsuper -H $id
把被误判的邮件释放出来。
顺便owncloud也可以添加clamav杀毒,需要clamav开启tcp,监听本地端口就行,反正和owncloud在同一台机器上。
owncloud有个专门的app,安装完了mode
用daemon
,stream length
不要太大,我用了10000000,就是10M,太大的话上传文件要花很久扫毒,而且很占资源。
Update: 2015-03-28
貌似clamav-milter判断有毒的邮件一旦被hold住,再unhold的话仍然会经过clamav-milter,然后再次被hold,所以要把clamav-milter中设置为有毒邮件为Accept
,然后让postfix进行header check,如果header中有X-Virus-Status: Infected
就hold,这样如果unhold之后就能收到邮件了。同时clamav-milter中的virus action仍然有效,还是可以通知有邮件被判断有毒了。