本份文件可以在
http://peterkim.cgucccc.org/...ter_mail.txt 看到最新版。
文件作者:
长庚大学医学系 洪梓策
长庚大学资管系 廖享进
本文就开放原始码技术,提出一套高效率且低成本的垃圾广告、病毒信件阻挡技术,
同时这套系统我们也希望具备自我学习判断的特色,让广告垃圾信件的阻挡机制能够更积极自动,
有别于以往被动式的阻挡广告、病毒电子邮件的方法。
同时我们将这套方法实际应用于某大学的学生电子邮件系统中,验证其可行性和高度的可用性。
在阅读这篇文章之前,希望读者能具备Linux作业系统的基础伺服器操作观念,良好的网路、DNS、E-mail Server等运作观念;
本文对这些观念将不再累述。
同时也希望阅读本文章的读者都已经有过设定或阻挡垃圾电子邮件的伺服器管理经验,能够更快加速了解本文。
同时也希望观看本文的任何网友有更好的建议欢迎提出,
期盼本文可以成为许多电子邮件伺服器管理员的良好参考技术指南。
本文使用的平台为 Gentoo Linux(现在均正常成功运作)。
本文采用以下的所有软体,来达成这一整套阻挡方案,
在此列出软体清单和官方网页,希望想了解这套方案的人都能主动查阅这些软体,
了解他们的功能和作用,以协助自己能以更快的速度了解本文。
同时也期盼有心的人,可以进一步参考查阅,并且给予本方案改善的意见:
(一) Postfix:
http://www.pos...org/ (二) Amavisd-new:
http://www.ijs.si/so...mavisd/ (三) Spam Assassin:
http://www.spama...n.org/ (四) Sophos Anti Virus and Sophie:
http://www.so...com/ http://www.vanja.co...sophie/ http://www.ijs.si/softwar...de-update/ (五) Razor:
http://razor.sour...e.net/ (六) Pyzor:
http://pyzor.sour...e.net/ (七) DCC:
http://www.dcc-ser...t/dcc/ 首先,当然要有一台已经正在正常运作中的 E-mail Server 啰!
本文以 Postfix MTA 为主要说明,使用其余 MTA 的使用者(如:sendmail)可以酌情参考修改。
1. 阻挡Open relay以及错误domain name的电子邮件主机:
在/etc/postfix/main.cf新增:
smtpd_client_restrictions = reject_rbl_client relay.ordb.org
smtpd_sender_restrictions = reject_unknown_sender_domain
2. 阻挡位于浮动拨接IP上的电子邮件伺服器:
最近国内 ISP 终于达成协议,陆续将浮动 IP 的反解改成 dynamic.domain.name 的格式,
而现今许多广告信的发送点,都是从这些动态拨接的 IP 而来,因此可以档掉。
详细新闻可以参阅:http://www.twia.org.tw/SPAM-930412(news).htm
在/etc/postfix/main.cf已经新增的上一段设定,修改成为:
smtpd_client_restrictions = check_client_access regexp:/etc/postfix/access, reject_rbl_client relay.ordb.org
新增/etc/postfix/access档案,内容为:
/\.dynamic\..+\.tw/ DISCARD We can't allow dynamic IP to relay!
3. 安装Amavisd-new和Sophos以及Sophie:
在Debian或Gentoo中,安装Amavisd-new相当简单容易!(知道我们为什么要用这两个dist了吧)
emerge Mail-SpamAssassin
ln -s /etc/mail/.spamassassin /var/lib/amavis/.spamassassin
emerge amavisd-new
若有中途 procmail 安装失败的问题,请参阅:
http://forums.gentoo.org/viewtopic....hlight=procmail 关于 Amavisd-new,有一篇文章在 Postfix 和 Amavisd-new 之间的流程和一些设定说明的相当清楚,
可以做为底下安装除错的参考:
http://phorum.study-area.org/viewtopic...light=amavisd-new 安装后请您不用烦恼复杂的amavisd.conf设定,这里提供一份范本给您下载:
http://peterkim.cgucccc.org...mavisd.conf 您只要修改其中的这两个部分:
$mydomain = 'mail.com.tw'
@local_domains_acl = ( ".$mydomain", 'mail.com.tw' );
将mail.com.tw的部分换成自己E-mail Server的domain name即可!
安装amavisd-new之后,由于系统预设使用amavis作为程式执行的user和group,
若系统没有新增的话,请手动新增。
同时也请注意是否有建立/var/run/amavis和/var/virusmails目录是否有建立起来,
所属使用者和群组均为 amavis。
修改/etc/postfix/main.cf,增加:
content_filter = smtp-amavis:[127.0.0.1]:10024
修改/etc/postfix/master.cf,增加:
smtp-amavis unix - - n – 30 smtp
-o smtp_data_done_timeout=1200
-o disable_dns_lookups=yes
127.0.0.1:10025 inet n - n - - smtpd
-o content_filter=
-o myhostname=scanned
-o smtpd_sender_restrictions=
-o local_recipient_maps=
-o relay_recipient_maps=
再来放置 Mail SpamAssassin 所使用的 local.cf,这边也有一份范例给大家参考:
http://peterkim.cgucccc.o...t/local.cf 放置到 /etc/spamassassin/ 下。
4. 再来是安装 Sophos AntiVirus For Linux,到此下载试用版:
http://downloads.sophos.com/dp/f...l.libc6.tar.Z (虽说是试用版,但是其实没有使用限制,当然,
这么好的防毒软体如果是在商业用途上,希望你寻找国内许多经销商购买使用授权,
会有原厂或支援单位的更好服务!)
下载后解开安装:
tar zcxf linux.intel.libc6.tar.Z
cd sav-install/
sh install.sh
接着安装 Sophie,Sophie 是一个使用 Sophos Anti Virus Library 的扫毒介面程式,
它运作的原理就是一开始会把 Sophos AntiVirus 所有的病毒码 Load 进记忆体,
因此扫毒的速度将会非常的快!
先抓下最新版的 Sophie,(
http://www.vanja.co...sophie/)
这边测试的时候是使用 3.04rc1 的版本
解开档案后,进行安装:
./configure --with-savilib=/usr/local/lib
make
接着就产生了 sophie 这个 binary file(可执行档),
将这个档案搬到理想位置 (如:/usr/local/sophie),
还有原目录下的 etc/sophie.cfg sophie.savi 复制到 /etc 之下,
更改 sophie.cfg 中 user 和 group 的设定 (设成 amavis ),
并且将 maxproc 的参数调整为 0,
然后就可以执行 sophie -v 看有没有抓到扫毒引擎和病毒码了,
没问题后执行 /usr/local/bin/sophie -D,并且 ls -l /var/run/ 下有没有出现 sophie 的 socket,
确认之后这个程式就会执行常驻在记忆体中等待 amavisd-new 呼叫扫毒了!
4. 安装 Sophos ide update 自动更新病毒码:
到
http://www.ijs.si/softwar...de-update/ 抓,
我们测试的时候最新版是 1.2,抓下来后解开:
tar zxvf sophos-ide-update_1.2.tar.gz
底下有一个 pl 档,就可以直接执行了,
他会自动判断版本更新病毒码,而且更后完后也会自动重启 Sophie 更新,
可以放在 crontab 跑,我都设定每三个小时跑一次。
(Gentoo 要跑这只 perl,必须先 emerge mailx)
5.安装 razor,DCC,pyzor,
emerge razor
ln -s /etc/razor /root/.razor
vi /root/.razor/razor-agent.conf
找 razorhome = /etc/razor
razor-client
razor-admin -create
razor-admin -register -user postmaster@你的e-mail server domain
emerge /usr/portage/net-mail/dcc/dcc-1.2.28.ebuild
/usr/bin/cdcc 'info'
emerge pyzor
su - amavis
pyzor discover
exit
这些工具都是利用 cryptographic hash 或 checksum 和特征比对的方式,作为判断垃圾信件的依据,
详情请分别参阅各工具网站。
6. 建立贝式分析模式
参考文件:
http://phorum.study-area.or...php?t=16063 http://www.oddquad.org/l...spam.html emerge php-cgi
mkdir /var/spool/spamfwd/
cd /var/spool/spamfwd
mkdir incoming errors log
wget
http://peterkim.cgucccc.org/...m/script.tgz tar zxvf script.tgz
vi config.inc.php (将 mail.com.tw 的部分换成自己 E-mail Server 的 domain name)
chmod 777 *
vi /etc/postfix/aliases
增加以下:
spam:"|/var/spool/spamfwd/spam_recv.php realspam"
notspam:"|/var/spool/spamfwd/spam_recv.php fakespam
离开后:
postaliases /etc/aliases
useradd spam
useradd notspam
useradd realspam
useradd fakespam
cd /root
ln -s /var/spool/mail /var/mail
wget
http://peterkim.cgucccc.org/d.../sa-learn.sh chmod 755 sa-learn.sh
然后我这边有一份建立好的 bayes rules,大家可以先抓去将就将就:
cd /etc/mail
wget
http://peterkim.cgucccc.org/...m/bayes.tgz tar bayes.tgz
chown -R amavis:amavis .spamassassin
ln -s ../spamassassin spamassassin
最后可以执行 spamassassin --lint -D 察看所有程式是否都正常执行或被呼叫!
系统可以使用贝式分析之后由于每一次学习都需要广告信的样本和非广告信的样本,
因此麻烦可以收集这些样本,并且依照下面这个方法作:
1.非广告信或者被误判成为广告信的信件,请将该封邮件用
"以附件转寄" (大家常用的 OpenWebmail 上的选项)
或
"以附加档案方式转寄" (Outlook 上的选项)
的方式寄到 notspam@你的 e-mail server domain
2.没有抓到的广告邮件用:
"以附件转寄" (大家常用的 OpenWebmail 上的选项)
或
"以附加档案方式转寄" (Outlook 上的选项)
的方式寄到 spam@你的 e-mail server domain
请不要用其他转寄的方式,以免造成系统的错乱。
也不要故意恶作剧,将非广告信寄到收广告信的信箱,
这将会造成系统判断力降低,
转寄过来的邮件会经过"学习式的贝式垃圾信演算法"学习,以加强分析的能力。
这整个步骤完成后,
整个 Mail Server 的导信流程为:
Postfix (Port 25) -> Amavisd-new (Port 10024) -> Sophie 扫毒 ->
Call SpamAssassin 作广告信判读扫瞄(使用 bayes rule, dcc, razor, pyzor, rbl_check 多重判断) ->
postfix (Port 10025) 把信收下来。
被判断成广告信的信件,信件的主旨标题前会有 *****SPAM***** 的字串式样,
可以通知 Client 使用 E-mail 软体的时候,设定邮件收件规则,
将标题中含有这个字串的信件丢到垃圾桶,
若有误判可以用以上的方式寄到 spam 或 notspam 的信箱,
系统管理员大约格一段时间或者懒一点的用 crontab,
定期去跑:
/var/spool/spamfwd/spam_send.php
/root/sa-learn.sh
系统便会根据这些使用者寄过来的垃圾信和非垃圾信的样本信,重新修整建立 bayes model,
来作为下一次判断广告信的扫瞄依据。
贝式分析简单来说是藉由判断广告信和广告信使用的"语言文字模式"来演算分析,
他藉由分析信件中所有文字 token 出现的或然率来作为判断分类信件是否为垃圾信的依据,
详情可以到以下网址查阅:
http://spamconf....org/ http://www.nongn...ifile/ http://spambayes.so...ge.net/ 这样的机制已经使用在我们学校的 E-mail Server 上,
我们的 E-mail 有 1 万多个帐号,使用双 CPU P4 2G,并采用 2G Ram,
运作起来还算相当的顺畅,同时完全不用担心病毒信的问题,
对于广告信的判断准度上也常能达到 80% ~ 90% 的程度,
非常少误判,
即使最近垃圾信的内容或行为模式开始改变的时候,
伺服器管理员也可以利用大量的垃圾信和非垃圾信样本,
重新训练我们的 bayes model,调整整个 SpamAssassin 判断广告信的分析模式,
以达到精准判断的目标。