基于内容的垃圾邮件识别

ZSPAM 是一款邮件打分系统,用于识别垃圾邮件. 最新版本2.5
支持中文简体,繁体,日文,韩文,越南文,等文字
速度快,在基于dell vostro(notebook)的vmware虚拟机上,单线程每秒处理1000封信件

在线识别垃圾邮件

下载/安装/特征库/服务

下载
免费版程序和特征库, 最新版2.5
http://pan.baidu.com/s/1hrfROqw

安装
创建目录/opt/zmail/, 进入其中,解开zspam.tgz 即可
(只支持64位Linux系统, debian/ubuntu/centos)

特征库
下载最新版 const-(version).db.gz, 建议备份
解开得到 const.db, 移动到 ./var/spamdb/const.db

服务
启动/停止/重启
./bin/master.sh start/stop/reload

文件目录说明

/opt/zmail/
系统默认安装路径, 所有服务运行时路径

./etc/service/spamd.cf
反垃圾服务程序的配置文件

./bin/master.sh
启动/停止/重启 脚本

./bin/spamc
工具,用于 训练,得分,测试,合并

./bin/spamd
反垃圾服务程序

./var/socket/spamd
domain socket, spamd 服务的domain socket

./var/spamdb/reloaddb_event_file
touch ./var/spamdb/reloaddb_event_file 会使spamd重新加载特征库文件

./etc/service/milter.cf
libmilter服务器配置文件

./bin/milter
libmilter服务程序

配置 etc/service/spamd.cf

server-command = bin/spamd
server-service = spamd://var/socket/spamd
# 并发进程数
server-proc-count = 1

server-log = syslog,mail

# 每进程并发线程数
spam_concurrency_limit = 0

#特征库文件,可以是多个
#spam_db = var/spamdb/const.db,var/spamdb/const2.db,var/spamdb/const9.db
spam_db = var/spamdb/const.db

# touch var/spamdb/reloaddb_event_file, 会导致spamd重新加载特征库(var/spamdb/const.db)
spam_reloaddb_event_file = var/spamdb/reloaddb_event_file

spamc 工具使用说明

子命令 score, 测试信件得分, 离线
例子: 获得邮件a.eml, b.eml, 和 eml_path1下所有邮件 的得分
./bin/spamc score ./a.db,./b.db,./c.db a.eml b.eml emlpath1
./bin/spamc score ./a.db a.eml b.eml emlpath1

子命令 zscore, 测试信件得分, 在线
例子:获得邮件a.eml, b.eml, 和 eml_path1下所有邮件 的得分
./bin/spamc score ./var/socket/spamd a.eml b.eml emlpath1
./bin/spamc score ./var/socket/spamd a.eml b.eml emlpath1

子命令 ham , 训练正常信件, 离线
例子: 训练a.eml, b.eml, c.eml, eml_path1, eml_path2 下所有的邮件为正常邮件
./bin/spamc ham ./train.db a.eml b.eml eml_path1
./bin/spamc ham ./train.db c.eml em_path2
@提示, train.db 可以不存在, 程序会自动创建, train.db是bdb格式, 不能用const格式

子命令 spam, 训练垃圾邮件, 离线
例子: 训练x.eml, y.eml, z.eml, eml_path8, eml_path9 下所有的例子:邮件为垃圾邮件
./bin/spamc ham ./train.db x.eml z.eml eml_path9
./bin/spamc ham ./train.db y.eml
./bin/spamc ham ./train.db eml_path8

子命令 merge_db, 合并数据库, 离线
例子:合并a.db, b.db, c.db 到 train.db
./bin/spamc convert_db a.db train.db
./bin/spamc convert_db b.db train.db./bin/spamc convert_db c.db train.db

子命令 convert_db, 数据库格式转换, 离线
例子: 把train.db 转换为const.db, const.db是系统自带的只读数据库格式(速度快)
./bin/spamc convert_db const.db train.db

spamd服务, domain socket协议

客户端 连接 domain socket 文件 ./var/socket/spamd
客户端 输入 score[一个空格]邮件文件路径\r\n
服务端 返回
  OK[一个空格]得分\r\n
  ERR[一个空格]db\r\n
客户端 关闭连接 或 回到 2

# 所谓 “邮件文件路径” 形如 /opt/mail/storage/some1.eml
# 系统假设:客户端提供的任何文件都是邮件且可读.
# 所谓 “得分” 形如 0.700268,介于0.000000 ~ 1.000000 之间,越接近1.0,是垃圾邮件的可能性越大.
# 根据作者实际经验,大于0.7的是垃圾邮件,小于0.4为正常邮件.

postfix配置使用(libmilter协议)

本系统支持postfix/sendmail等(libmilter协议)
配置: etc/service/spamd.cf

### 需要启动milter服务

server-command = bin/milter
# server-service = milter://127.0.0.1:25062

# 并发进程数, 可以启动多个进程
# 每进程线程数不限
server-proc-count = 1

server-log = syslog,mail

# 把反垃圾的结果(得分)追加到指定邮件头
# 空表示不追加邮件头
spam_append_header = X-zz-spam

# spamd服务器的端口地址 
spamd_server = var/socket/spamd

#milter邮件临时存储目录, 可读写
milter_queue_path = var/milter_queue/

postfix main.cf 或 master.cf 配置

在main.cf添加

smtpd_milters=inet:127.0.0.1:25062

或在在master.cf中合适的smtpd服务下添加

 -o smtpd_milters=inet:127.0.0.1:25062

版本历史

2.5 2019-08 增加特征分析

2.1 2019-05 行为特征分析, 更多特征

1.12 2017-06 HTML处理, 增加打分机制, 初级图片处理

0.9 2015-12 多字节文字乱码识别, 分词技巧调整, 全新邮件解析库, 增加特征词判定词

0.1 2007-10 贝叶斯统计, 中文分词, 繁体, 日文, 韩文, 正向最大匹配, 邮件解析

你可能感兴趣的:(c,机器学习)