Chinaunix首页 | 论坛 | 博客
  • 博客访问: 367302
  • 博文数量: 46
  • 博客积分: 3277
  • 博客等级: 中校
  • 技术积分: 492
  • 用 户 组: 普通用户
  • 注册时间: 2006-06-24 19:03
文章分类

全部博文(46)

文章存档

2008年(3)

2007年(7)

2006年(36)

我的朋友

分类:

2006-09-21 14:57:52

转:
 
垃圾邮件(Spam)是个很讨厌的东西,实际上是一些“不请自来”的电子邮件,又被称为“并未得到许可主动发送的商业邮件(Unsolicited Commercial Email -- UCE)”。想屏蔽这些垃圾邮件,Internet上提供了很多种方法,其中应用最广的就是利用“贝耶斯统计”方法的软件。由于这种算法的公开性,使用它的软件非常多,例如Foxmail就内嵌了利用这种算法的垃圾邮件处理模块。

Linux下面此类的软件包有:
   SpamAssassin   
   DSpam      

详细的软件列表在这里:

一些软件的对比,澳大利亚的Sam Holden写了一篇研究性的对比文章,可能对于选取何种软件包有帮助

我是个比较懒的人,喜欢看分析结果,所以看中了DSpam的cgi,尽管它的配置真是很繁琐。

由于大部分的Anti-Spam的包都是配合邮件服务器使用的,因此利用P3scan进行调用时,可能部分功能会受到限制,下面在对应的部分会提到。
【P3scan 的配置】
可以参见我前面的文章
1. 作为root编辑/etc/p3scan/p3scan.conf,去掉 checkspam 前面的注释#,允许垃圾邮件检查;
2. 在DSpam对应的部分去掉 spamchecker 那行的注释,修改为正确的参数,我的是:
   spamcheck = /usr/local/bin/dspam --user user --mode=teft --stdout --deliver=innocent --feature=ch,no,wh
   注意 --deliver 选项,我这里用了--deliver=innocent,意思是只发送认为正常的信件,垃圾邮件将被截留,
   --user 指定本次扫描时认为是作为 user1 来运行,结果会存入对应的数据库
   如果你想确认效果后才采取截留的方式的话,建议使用 --deliver=innocent,spam 选项。
3. 存盘退出,别忘了重新启动 p3scan。
【DSpam 的安装】
1. 下载stable的版本,现在都已经是3.6.8了,

2. 解压展开,进入对应目录
3. 编译前的配置,有个参数要注意:--with-storage-driver,DSpam使用数据库驱动,支持的数据库有
  libdb4_drv: Berkeley DB4 Library
  libdb3_drv: Berkeley DB3 Library
  mysql_drv: MySQL Drivers
   ora_drv: Oracle Drivers (BETA)
  pgsql_drv: PostgreSQL Drivers (BETA)
虽然DSpam推荐使用mysql,
我用的sqlite,具体配置如下:
./configure --enable-debug --with-dspam-home=/var/dspam \
--datadir=/var/dspam/data \
--with-storage-driver=sqlite3_drv \
--with-sqlite-includes=/usr/local/include \
--with-sqlite-libraries=/usr/local/lib
 
4. 编译、安装: make; make install
安装后,程序目录: /usr/local/bin
    工作目录: /var/dspam/
    数据目录: /var/dspam/data/user
如果正常运行的话会自动生成data目录,还要注意dspam配置文件的权限,p3scan是否有可读的权限。
 
建立信任用户
# cd /var/dspam/
# touch untrusted.mailer_args <---- 不信任的邮件服务器列表
# touch trusted.users <---- 可信的用户列表,不在列表内的用户不能运行dspam及系列工具
 
# chown user1 -R /var/dspam
# chmod 777 -R /var/dspam 修改dspam目录的所有权限,以便程序使用
编辑trusted.users,加入可以运行dspam及其工具的用户,一行一个,例如user,apache
 
【DSpam 的训练】
由于anti-spam软件需要先验概率,以便对垃圾邮件进行评判,因此我们需要大量的邮件对DSpam进行训练,生成spam、ham(正常邮件)的词汇库。

建立spam训练脚本文件:spamfeed.sh
#!/bin/sh
#spamfeed.sh
cat ${1} | dspam --mode=teft --source=corpus --class=spam --feature=chained,noise --user ${USER}


建立ham训练脚本文件:innocentfeed.sh
#!/bin/sh
#innocentfeed.sh
cat ${1} | dspam --mode=teft --source=corpus --class=innocent --feature=chained,noise --user ${USER}


训练:
假设已经有上千封垃圾邮件、正常邮件样本已经准备完毕、放在 /var/dspam/feed/目录下,注意,样本邮件是标准邮件文本,一个文件一封邮件存放,如果是linux本身,邮件文件则是一个文件存放所有邮件,可以用我自己写的一个工具来分割,见附件  [down=attachments/month_0409/urjx_MailSplitter.rar]MailSplitter.rar[/down];
如果你找不到样本可以到 下载垃圾邮件样本包,但是绝大部分都是英文。
如果你想把你的windows下面的文件导出来训练DSpam,你可以参考我的另一篇文章将Outlook的邮件导入到linux下
# find /var/dspam/feed/spam.dir/ -name "*" -exec ./spamfeed.sh {} \;
# find /var/dspam/feed/innocent.dir/ -name "*" -exec ./innocentfeed.sh {} \;

训练完毕后,垃圾邮件和正常邮件的关键字及其统计信息已经存入对应的数据库,经过训练之后,p3scan就可以开始抓垃圾邮件了。
 
【DSpam的CGI】
DSpam提供了日志分析系统,通过cgi网页的方式提供,文件在源程序包的 cgi 目录下。

要CGI程序正常工作,系统还需要如下的软件包:
GD,用来生成图片的,
freetype2,freetype字体相关, 安装完后,可能需要把freetype2的目录名改成freetype。(这个我看了它的readme没有提到)
GD module for Perl,与Perl相关的几个GD的module,

. GD
. GD-Graph3d
. GDGraph
. GDTextUtil
. CGI(readme中还有这个模块)

安装完这些包以后,把 cgi/目录下的文件复制到apache的主目录下,例如: /var/www/html/dspam/ 注意要在httpd.conf中给这个目录加上CGI运行权限:

 #   AllowOverride None
 #   Options None
 #   Order allow,deny
 #   Allow from all
 #test zhangwei
 AllowOverride all
 Options -Indexes FollowSymLinks MultiViews ExecCGI
 Order allow,deny
 Allow from all
 Options ExecCGI
 AuthType Basic
 AuthName "dspam"
 Require valid-user #test dspam
 #Require root
 AuthUserFile /var/www/cgi-bin/password
 #Use AuthUserFile instead of AuthFileName for apache 2.0.55 (that was my version) and above
 SetHandler cgi-script
 
CGI需要通过Apache的用户验证来提取用户信息,因此需要使用 htpasswd 添加对应的用户,如上文中的user1:
#cd /var/www/cgi-bin/
#htpasswd -c password user <--- 生成password文件
就是在apache当中设置的认证文件
 
在cgi目录下,有个admins文件,里面放置属于管理员的用户名。DSpam支持多用户,cgi部分也是可以添加多个用户,非管理员用户登陆后只能看到自己的统计数据,而admins中的用户可以看到并设定系统参数。
 
我研究了两天也没有实现图形功能,不知道为什么?



阅读(4398) | 评论(0) | 转发(0) |
0

上一篇:又开始忙上了

下一篇:注册gmail邮件

给主人留下些什么吧!~~