dspam.conf 配置文件详解

dspam.conf 配置文件详解:
   

配置文件基于DSPAM-3.10,如果使用其他版本的DSPAM,请参照其他版本的dspam.conf配置文件

Home /var/lib/dspam
指定DSPAM存储的基本目录

StorageDriver /usr/lib/dspam/libmysql_drv.so
指定后台库使用的存储驱动,选项包括:
libhash_drv.so
libmysql_drv.so
libpgsql_drv.so
libsqlite_drv.so
libsqlite3_drv.so
一般来说,MYSQL是一个较好的解决方案,同时适合小型或大规模的运行。

TrustedDeliveryAgent="/usr/bin/procmail"
受信任的传递代理:
DSPAM信任的用户发送邮件时,调用的本地投递代理和参数。使用%u来确定DSPAM处理邮件的对象。它通常是一个好办法,也可以允许MTA在运行时指定参数。

#UntrustedDeliveryAgent "/usr/bin/procmail -d %u"
不可信的投递代理:
DSPAM不可信的用户发送邮件时,调用的本地投递代理和参数,因为DSPAM不会允许不信任的用户通过,所有参数应当在这里指定,使用%u来确定DSPAM处理邮件的对象,如果您打算允许不可信的处理,这个参数是必需的。

#Delivery
SMTP或LMTP投递:
在二者之间选择一个,你可以使用SMTP或LMTP投递到邮件服务器,而不是使用投递代理。编译时需要指定--enable-daemon,如果不使用daemon模式,需要指定IP地址或UNIX SOCKET
DeliveryHost        127.0.0.1
DeliveryPort        10026
DeliveryIdent       localhost
DeliveryProto       SMTP

#FallbackDomains on
如果要指定某个域作为备用域,启用此选项。例如,您可以创建一个用户 @example.org ,如果系统已知用户的bob@example.org不能解析,可以默认使用 @domain.com 用户。注意:这里需要指定fallbackDomain的域名,dspam_admin优先于fallbackdomain上的example.org 

#QuarantineAgent
DSPAM认为是垃圾邮件,默认的行为是被隔离所有邮件。如果要改变这个行为,可以指定一个隔离代理,DSPAM认为是垃圾邮件发送到隔离代理。使用%u来确定DSPAM处理邮件的对象。

#EnablePlusedDetail     on
DSPAM通过在用户名前面添加的“+”,选择性的处理"plused users" (addresses in the user+detail form),所以对“user”来说都是在内部发生 ,都被投递为“user+detail” 。如果LDA可以处理“plused users”,并且在上面配置LMTP投递,这时才有用。

#PlusedCharacter        +
使用字符作为用户名和地址的分隔符。如果你要改变这个值,请调整QuarantineMailbox,使用新的分隔符。默认值是“+”。

#PlusedUserLowercase    on
使用这个功能,使 DSPAM  "plused users" 用户名为小写。

#QuarantineMailbox      +quarantine
隔离邮箱:
DSPAM的LMTP代码可以发送垃圾邮件到LMTP的“plused”信箱(如user+quarantine),让LDA和邮件客户端来隔离处理再训练或删除。“Cyrus IMAP和其他LDAs可能支持plused”邮箱。 如果你不修改PlusedCharacter 参数,邮箱名字使用默认字符+

OnFail error
如果本地投递或隔离失败,该怎么办?如果设置为"unlearn",DSPAM将在忽略邮件之前退出并返回未成功代码。默认的选项是 “error”,不会忽略邮件,并返回相应的错误代码。某些系统在本地投递失败时会导致邮件被重新排队投递,并可能导致邮件被处理多次。这时"unlearn"选项是非常有用的,如果有一个非常大的故障期间,可能会导致负荷加重。

Trusted Users:
受信任的用户:
只有指定的用户将被允许在DSPAM执行管理功能,所有其他用户试图运行DSPAM将受到限制。

#Debug *
#Debug bob bill
对部分或所有用户启用Debug,重要说明: DSPAM必须编译成"--enable-Debug",才能使用这个选项。除非你在进行故障排除,否则不应该在生产环境中进行Debug。

#DebugOpt: 
Debug选项:
可以选择一个或多个
process       标准邮件处理
classify        邮件分类,使用--classify
spam          纠正遗漏的垃圾邮件
fp               纠正误报
inoculation 信息接种 (source=inoculation)
corpus       邮件资料库 (source=corpus)
备注:
    信息接种(message inoculation)就是将垃圾邮件作为一种"疫苗"来接种垃圾邮件过滤器,message inoculation 由Bill Yerazunis 在CRM114中提出,意思是,某个垃圾邮件过滤器对一封新类型的垃圾邮件发生了误判,用户发现了误判邮件,垃圾邮件过滤器用这封邮件训练,并组织一封信息接种,同时将信息接种传递给信息接种组的其他过滤器,从而使其他垃圾邮件过滤器不会对这种类型的邮件发生误判。信息接种的力量非常强大,如果多个过滤器组合,共享垃圾邮件信息,正确率会相当高。

#ClassAliasSpam badstuff
#ClassAliasNonspam goodstuff
分类别名 :
spam/nospam的某一类别名,对于区分垃圾邮件以外的类别,这是非常有用的。

TrainingMode teft
训练模式可接受的值为:
toe       遇到错误才学习,优点:数据库写操作少、学习效率高, 缺点:准确性低一些
teft       学习所有,优点:简单实时,缺点:数据库增长很快,I/O频繁容易出错 
tum      学习到成熟,没有足够的数据只标记介于Teft和Toe之间的一个方法
notrain  不训练或存储签名,大型ISP系统的邮件训练,优点:准确率很高,缺点:学习需要的时间很长

TestConditionalTraining on
测试条件训练:
默认情况下,DSPAM将重新训练某些错误,直到条件不再符合,这可以加速学习。但是,一些人认为这可能会增加错误的风险。

#Feature
指定默认激活的功能:
也可以在命令行中指定,下面列出的可用功能
Feature noise         Bayesian Noise Reduction(BNR)
Feature whitelist     自动白名单
Feature tb=5         训练缓冲区
默认是5,在训练期间,训练缓冲区会淡化统计数据,目的是防止误判,而且还可以大大减少DSPAM在初期训练时的捕获率,这个数字可以从0(无缓冲)到10(最大缓冲)。如果你怀疑误报,应该启用这个选项。

Algorithm graham burton
指定使用的统计算法,忽略所有默认的配置。选项包括:
# naive Naive-Bayesian(全部Token)算法由于其简单高效性在文本分类中应用较广
# graham Graham-Bayesian (A Plan for Spam)
# burton Burton-Bayesian (SpamProbe)垃圾邮件探测
# robinson Robinson的几何平均值测试 (已经过时)
# chi-square Fisher-Robinson的chi-square算法
备注:你可以同时使用多种算法规则,推荐使用Bayesian算法或chi-square算法
  
Tokenizer chain
指定tokenizer使用,
更多DSPAM分词技术详情,请参考: http://blog.dspam.org.cn/post-3.html
tokenizer负责将邮件解析成单独的标记。你需要在资源多少与准确性之间权衡,可以选择使用较少或更详细的tokenizer,新安装一般推荐使用 "osb" ,可用选项:
# word uniGram tokenizer(单词分割)
将邮件分割成words/tokens,例如: "free" and "viagra"
# chain biGram tokenizer(组合词分割),系统默认设置
Single words + chains
例如:"free" and "viagra" and "free viagra"
# sbph   Sparse Binary Polynomial Hashing (稀疏二元多项式哈希)
该方法的分类准确度较高,但特征数量庞大、计算复杂度很高。
例如:"the quick * fox jumped" and "the * * fox jumped"
# obs    Orthogonal Sparse biGram (正交稀疏双词法)
类似于SBPH,仅使用biGrams。
例如: "the * * fox" and "the * * * jumped"

PValue bcr
指定用于计算概率值的技术,忽略任何默认配置。这些选项包括:
# bcr      Bayesian Chain Rule (Graham's Technique - "A Plan for Spam")
# robinson    Robinson's Technique (使用chi-Square)
# markov      马尔可夫权重技术(参考 Markovian discrimination)
备注:
Markovian discrimination是一种垃圾邮件的过滤方法,使用的短语和句子发生的概率来决定一封邮件是否为垃圾邮件或正常邮件,Markovian过滤被比贝叶斯过滤器更有效,仅使用词语,忽略上下文在一个句子发生的概率。

WebStats on
启用DSPAM的统计信息,启用后,统计信息会写入 $USER.stats 文件

#ImprobabilityDrive on
计算ham/spam的比率,并且会在邮件头增加 X-DSPAM-Improbability

Preference
选项设置
除非由用户(参见AllowOverride部分)或default.prefs文件覆盖。如果找到用户的优先级或default.prefs,用户的首选项将优先于默认值。
下面列出几个比较重要的选项,其他的请自行参考dspam.conf配置文件 
Preference "trainingMode=TEFT"      训练模式
Preference "spamAction=quarantine"  遇到垃圾邮件的处理方式(quarantine:扔到隔离区,tag:给邮件Subject增加标记,deliver:直接投递)
Preference "spamSubject=[SPAM]"     tag操作的时候在邮件Subject前面增加标记
Preference "enableWhitelist=on"     使用自动白名单
Preference "whitelistThreshold=10"  自动白名单的阀值
Preference "signatureLocation=message"  在邮件中标记签名,用作重新训练,可以设置(message | headers )

AllowOverride
指定用户首选项,可能会覆盖默认的配置和命令行的配置,不受信任的用户的首选项将被忽略。

mysql_drv需要知道如何连接到你的MySQL数据库
#MySQLServer            /var/lib/mysql/mysql.sock
#MySQLPort
#MySQLUser              dspam
#MySQLPass              changeme
#MySQLDb                dspam
#MySQLCompress          true
#MySQLReconnect         true
如果你使用MySQL >= 5.0.13 和有问题的DSPAM连接到 MySQL ,请设置MySQLReconnect为true,让mysql_drv尝试重新建立无效的连接或死连接。如果想要通过 TCP 连接,请设置MySQL 服务器的 IP 地址和端口。

#MySQLWrite 选项
如果使用的是集群复制,可以指定一个单独的服务器来执行所有写入。
#MySQLWriteServer       /var/lib/mysql/mysql.sock
#MySQLWritePort
#MySQLWriteUser         dspam
#MySQLWritePass         changeme
#MySQLWriteDb           dspam_write
#MySQLCompress          true
#MySQLReconnect         true

#MySQLReadSignaturesFromWriteDb on
如果你的同步不是实时,如果没有找到签名,重新训练可能会失败,一个解决办法是,给所有的签名读取写数据库:

#MySQLConnectionCache   10
如果你正在client/server(daemon)模式下运行DSPAM,取消注释,来设置连接缓冲的大小(服务器和客户端之间的连接数),连接缓存表示数据库连接的最大数*可用的*可能会有的最大并发数来设置,每个连接只能被一个线程使用,其他所有的线程将被阻塞,直到另一个连接可用。

#MySQLSupressQuote      on
如果你有mysql4.1 quote bug,使用这个,DSPAM-3.10已经放弃这个选项

#MySQLVirtualTable          dspam_virtual_uids
#MySQLVirtualUIDField       uid
#MySQLVirtualUsernameField  username
如果你使用vpopmail或其他类型的虚拟工具,并希望改变dspam执行username/uid 的表查询,可以覆盖他。

#MySQLUIDInSignature    on
MySQL支持用户id插入DSPAM签名,可以创建一个单一的垃圾邮件或fp别名(指向任意用户),签名中的uid会切换到正确的用户,你只需要一个垃圾邮件别名。

备注:
PostgreSQL的选项请参考MySQL部分,SQLite、Hash、LDAP请自行参考dspam.conf.default

#IgnoreHeader
忽略邮件头:
如果DSPAM在其他工具之后,可以对传入的邮件添加一个邮件头,它可能是有利的,可以忽略这些邮件头,特别是他们来自另一个垃圾邮件过滤器。如果你没有使用这些工具,然而,把适当的邮件头注释掉,使得DSPAM能够借此来检查是否有伪造邮件的迹象。
更多IgnoreHeader参数请参考: http://blog.dspam.org.cn/post-26.html

#Lookup "sbl.yourdomain.com"
使用RBLs功能,不推荐使用,因为他们往往不准确。

#RBLInoculate off
如果你想使用其它RBL'd的接种信息,设置为on

Notifications   off
通告:向用户发送邮件通知(第一条信息、隔离全部、等等。)

#TxtDirectory /var/lib/dspam/txt
保存通知邮件的目录和标记(参考 tagSpam/tagNonspam)

#QuarantineWarnSize 2097152
DSPAM给每个用户发送"Quarantine Full"的邮件时,如果启用了通知,可以指定一个大小(见上文)。该值以字节为单位。默认值为 2097152-> 2 MB。

PurgeSignatures 14          # Stale signatures
PurgeNeutral    90          # Tokens with neutralish probabilities
PurgeUnused     90          # Unused tokens
PurgeHapaxes    30          # Tokens with less than 5 hits (hapaxes)
PurgeHits1S     15          # Tokens with only 1 spam hit
PurgeHits1I     15          # Tokens with only 1 innocent hit
清理配置:设置dspam_clean的清除默认选项,如果不是以其他方式在命令行上指定。

#PurgeSignature off     # Specified in purge.sql
#PurgeNeutral   90
#PurgeUnused    off     # Specified in purge.sql
#PurgeHapaxes   off     # Specified in purge.sql
#PurgeHits1S    off     # Specified in purge.sql
#PurgeHits1I    off     # Specified in purge.sql
使用purge.sql清除基于SQL的配置

LocalMX 127.0.0.1
用于源地址跟踪,告诉DSPAM哪些邮件交换是本地的,因此跟踪邮件来源的头在收到时应该被忽略。注意:你使用的主机地址出现在邮件头的[]中。默认情况下,DSPAM考虑下面的IP地址为LocalMX:
#       10.0.0.0/8      - Private IP addresses (RFC 1918)
#       127.0.0.0/8     - Localhost Loopback Address (RFC 1700)
#       169.254.0.0/16  - Zeroconf / APIPA (RFC 3330)
#       172.16.0.0/12   - Private IP addresses (RFC 1918)
#       192.168.0.0/16  - Private IP addresses (RFC 1918)

SystemLog on
UserLog   on
日志记录
禁用用户日志,将无法使用这些图表。
禁用系统日志,将无法使用管理图表

#TrainPristine on
此选项会导致DSPAM停止所有邮件的签名和写入DSPAM信息到邮件头,不要使用这个开关,除非原来提交的邮件可以再培训,并且原来的邮件头没有任何修改。

Opt out
DSPAM 默认的过滤行为,如果值设置为in,用户必须添加一个 .dspam文件到/var/dspam/opt-in/目录,并命名user.dspam文件才能实现过滤。默认值是opt-out,意味着所有用户都将被过滤,除非将 /var/dspam/opt-out/user.nodspam文件删除。

#TrackSources spam nonspam virus
指定(如果有的话)源地址,跟踪并报告给syslog(mail.info)。如果你运行防火墙或黑名单想要这个信息,这是非常有用的。垃圾邮件报告同时列入RABL( Reactive Autonomous Blackhole List)黑名单文件。

#ParseToHeaders on
解析为:接收邮件的头。这必须设置为'on',才能使用下列功能。

#ChangeModeOnParse on
自动改变类型(spam or innocent)取决于spam或notspam 是否被指定,并更改来源为'error' ,如果你没有使用别名,而是通过LMTP发送,这倒是很方便。

#ChangeUserOnParse full
自动更改用户名,来匹配指定的邮件头。例如:spam-bob@example.org设置用户名为bob,将会忽略任何用户通过。如果你使用虚拟的邮件地址作为用户名,这不一定是可取的,选项:
on or user   @符号之前的部分
full               完整的邮件地址

#Broken returnCodes
指定'returnCodes',如果是垃圾邮件,会导致DSPAM返回一个99的退出代码,如果不是垃圾邮件,就返回0,如果发生错误,就是负数代码

#Broken case
指定'case',强制DSPAM输入的用户名为小写字母。

#Broken lineStripping 
指定'lineStripping',DSPAM删除信息中的^M字符 

#MaxMessageSize 4194304
指定DSPAM处理的信息大小。如果邮件大于该值,它将不能处理。值以字节为单位。

#ClamAVPort     3310
#ClamAVHost     127.0.0.1
#ClamAVResponse accept
如果你运行的是clamd , DSPAM使用TCP为基础的病毒检查,注释以下值,使用病毒检查。
#ClamAVResponse选项:
reject         (拒绝或停止失败的消息)。
accept         (接受消息或悄悄的接受消息)
spam         (处理垃圾邮件的方式 quarantine/tag/whatever) 

#ServerHost             127.0.0.1
#ServerPort             24
#ServerQueueSize        32
#ServerPID              /var/run/dspam.pid 
如果你使用--daemon将DSPAM作为一台daemonized服务器,上面的参数将覆盖默认值。使用ServerPass选项,可以为每个客户机设置帐户。DSPAM服务器基于该参数处理和投递消息。

#ServerMode dspam
指定要启动的LMTP服务器的类型:
dspam:            DSPAM专有的DLMTP服务器,用于和dspamc进行通信
standard:         标准的LMTP服务器,用于和postfix或其它MTA通信
auto:              DLMTP 和 LMTP; 自动检测ServerPass.IDENT

#ServerPass.Relay1      "secret"
#ServerPass.Relay2      "password"
如果支持DLMTP(dspam)模式,dspam客户端将需要验证,因为它们要作为传递参数。上面的idents将用来确定哪些客户会说DLMTP ,如果你使用的LMTP和DLMTP来自同一台主机,请使用下面服务器主机名以外的(由MTA发送一个标准的LMTP LHLO ) 

#ServerParameters        "--deliver=innocent -d %u"
--deliver=innocent,意思是只发送认为正常的信件,垃圾邮件将被截留(投递到隔离区)。

#ServerIdent             "localhost.localdomain"
如果支持标准LMTP模式,服务器参数需要指定这里,因为他们将不会通过邮件服务器。该ServerIdent指定响应码为250的ident连接客户端,应设置为你的服务器的主机名或别名。

#ServerDomainSocketPath  "/var/run/dspam/dspam.sock"
如果你想使用socket,而不是一个TCP,注释以下内容。如果你的客户端和服务器运行在同一台机器上,强烈建议你使用socket,因为它节约了很多带宽的开销。

#ClientHost     /var/run/dspam/dspam.sock
#ClientIdent    "secret@Relay1"
或者
#ClientHost     127.0.0.1
#ClientPort     10028
#ClientIdent    "secret@Relay1"
如果你运行的DSPAM是在client/server模式,取消注释并设置这些参数。一个ClientHost开头的将被视为一个dspam.sock。

#RABLQueue      /var/spool/rabl
建立RABL( Reactive Autonomous Blackhole List)队列文件,如果报告一个流式的blackhole名单,可以使用rabl_client进程监视目录内的IP地址。 

#DataSource      document
如果你使用任何类型的数据里面不包括邮件一样的头(如文件),注释以下行,这将导致整个输入被当作一条消息

#ProcessorWordFrequency  occurrence
处理单词频率,默认情况下,单词在每封邮件中只统计一次。如果你分类大文件,你可能希望每出现一次就计算一次。

ProcessorURLContext on
处理 URL 上下文,默认情况下,一个URL上下文生成的URLs,它作为单独的文件记录了他们的tokens。如果要在同一上下文使用URL tokens,关闭此功能。

ProcessorBias on
偏好导致过滤器更倾向于'innocent' ,通常大大降低了误报。它是大多数贝叶斯过滤器(包含DSPAM)的默认行为
注意:你可能不希望这样,可以使用“Markovian Weighting”,除非你怀疑误报。

#StripRcptDomain off
从收件人剪切域(包括签名)。这是特别有用,如果收件人的名字等于实际用户帐户,作为收件人和域往往会导致与dspam-web的权限问题。

#GroupConfig /var/lib/dspam/group
组的配置文件,如何让用户能够结合他们的训练数据,以得到更好的结果。请参阅README文件的详细信息。

#Include /etc/dspam/dspam.d/
包括配置项的目录,支持拆分配置文件。