龙空技术网

CentOS7 - 使用SpamAssassin定位垃圾邮件

运维阁 210

前言:

如今姐妹们对“centos7网络唤醒”大致比较讲究,看官们都需要学习一些“centos7网络唤醒”的相关知识。那么小编在网上收集了一些有关“centos7网络唤醒””的相关知识,希望看官们能喜欢,你们快快来了解一下吧!

使用SpamAssassin定位垃圾邮件

一些研究提出,超过90%的电子邮件是未经请求的广告(垃圾邮件)! 无论这些估计是否正确,无可否认垃圾邮件是一个巨大的问题。 不需要的邮件会导致邮件服务器上的额外负载,消耗存储空间,甚至可能带来安全风险。 此外,虽然有许多尝试合法管理垃圾邮件,但这种尝试基本上都失败了.

此配方教您如何设置SpamAssassin以识别垃圾邮件。 SpamAssassin通过检查各种垃圾邮件标记(例如缺少标头和无效的返回地址)来过滤传入的邮件,并使用启发式方法来分析邮件内容。 每次检查都会影响邮件的整体垃圾邮件分数,如果此分数超过定义的阈值,则邮件会标记为垃圾邮件.

准备

此配方需要一个CentOS系统,其Postfix配置如上一个配方中所述。 通过使用root帐户登录或使用sudo,还需要管理权限.

怎么做

按照以下步骤使用SpamAssassin识别垃圾邮件:

安装spamassassin包:

yum install spamassassin
启动SpamAssassin并可选择使其在系统重新启动时自动启动:
systemctl start spamassassin.servicesystemctl enable spamassassin.service
创建SpamAssassin的贝叶斯分类器数据库:
sa-learn --sync
创建SpamAssassin的贝叶斯分类器数据库...:
useradd -r -s /sbin/nologin spamd
打开Postfix的master.cf文件进行编辑:
vi /etc/postfix/master.cf
找到定义smtp服务的行,并将指定spamassassin的-o参数附加为内容过滤器:
smtp inet n - n - - smtpd -o content_filter=spamassassin
在配置文件的末尾,添加spamassassin过滤器的定义:
spamassassin unix - n n - - pipe user=spamd argv=/usr/bin/spamc -e  /usr/sbin/sendmail -oi -f ${sender} ${recipient}
保存更改并关闭文件。重新启动Postfix以使配置更新生效:
systemctl restart postfix.service
工作原理

SpamAssassin的初始安装非常简单。 我们安装了spamassassin软件包并启动并启用了运行spamd守护程序的spamassassin服务。 客户端程序spamc用于与守护进程通信,其余的配方步骤集中在配置Postfix以使用spamc对电子邮件进行评分.

我们为Postfix创建了一个名为spamd的新用户帐户,以便在调用spamc时使用。 该帐户旨在成为非交互式系统帐户,因此我们提供了-r参数。 这导致不创建主目录,并且为帐户的用户ID分配小于100的值。-s参数将/ sbin / nologin作为帐户的shell以防止某人使用该帐户登录:

useradd -r -s /sbin/nologin spamd

要使Postfix将消息传递给SpamAssassin,我们需要在其master.cf配置文件中定义一个新的spamassassinservice,并要求Postfix将该服务用作内容过滤器。 master.cf的组织与我们之前看到的配置文件有很大不同 - 每行定义邮件传递管道中的进程以及它的某些属性.

文件中的第一个活动条目用于smtp服务,如下所示:

smtp inet n - n - - smtpd

第一列是服务的名称,第二列指定服务的通信方式。 例如,inet表示进程使用TCP / IP套接字,而unix表示它使用本地unix域套接字。 接下来的三列表明该进程是否是私有的(只能访问Postfix),没有管理权限的运行,并且是chrooted。 它们的值可以是y表示是,n表示否,或者 - 对于Postfix的默认值。 其余列为按时间间隔运行的进程提供唤醒计时器,可以同时运行的实例数限制,以及为调用服务而调用的命令.

要将我们的spamassassin服务设置为过滤器,我们使用-o选项更新了smtp服务的命令,以使用我们的服务名称设置content_filter参数:

smtp inet n - n - - smtpd -o content_filter=spamassassin

然后我们在文件底部定义了spamassassin服务:

spamassassin unix - n n - - pipe user=spamd argv=/usr/bin/spamc -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}

管道命令是Postfix的传递系统的一部分,目的是将消息传递给外部进程。 user参数指定被调用进程将在其下运行的用户帐户的名称,argv是将运行的命令及其参数。 我们的定义引用了我们之前创建的垃圾邮件用户,并将邮件传递给spamc客户端.

垃圾邮件审核邮件后,spamc默认将邮件返回到stdout。 为了避免丢失消息,我们将输出传递给另一个进程以传递消息。 -einstructs spamc管道输出以进行处理,在本例中为一个名为sendmail的程序.

Sendmail是另一个比Postfix更老的邮件服务器。 它几十年来一直主导着电子邮件领域,因此许多程序试图与它进行交互以发送邮件。 sendmail的这个实例实际上是Postfix的Sendmail兼容性接口,它允许其他进程认为他们正在调用Sendmail,而实际上他们真的在使用Postfix。 sendmail的-oi参数指示邮件服务器将具有单个点的行视为常规输入,而不将其解释为消息的结尾。 -f参数将消息的起始地址设置为$ {sender}的值,这是Postfix使用发件人的电子邮件地址填充的特殊变量,并且邮件将发送到收件人的电子邮件$ {recipient} 地址.

要测试配置,我们可以发送包含以下主题的电子邮件 - 这是SpamAssassin始终标记为垃圾邮件的已知值:

XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST- EMAIL*C.34X

在主题行中发送带有已知签名的电子邮件以测试SpamAssassin

当您检查收件箱中的邮件时,您会注意到SpamAssassin会将[垃圾邮件]添加到主题行之前,以便您轻松识别不需要的邮件。 它还在消息中添加了额外的标题,这些标题总结了其结果,从而得出消息是垃圾邮件的结论:

SpamAssassin更新邮件的主题行并添加其他标题以解释其认为邮件是垃圾邮件的原因

请记住,垃圾邮件的世界不断变化; 程序员正在努力构建更好的垃圾邮件过滤器,但垃圾邮件发送者正在努力寻找绕过它们的方法。 因此,让SpamAssassin的数据库保持最新非常重要。 安装SpamAssassin时会添加一个cron作业,它将每天更新其数据库,但您也可以通过运行随时手动运行更新:

sa-update

如果SpamAssassin错误地将大量合法邮件识别为垃圾邮件,反之亦然,您可以训练它的贝叶斯分类器,以便使用sa-learn更好地识别不需要的邮件。 我们可以提供一系列我们知道是垃圾邮件的邮件,并使用--spam参数识别它们,并使用--ham为该程序进行学习:

sa-learn --ham /home/tboronczyk/Maildir/cursa-learn --spam /home/tboronczyk/Mail/.Spam

sa-learn跟踪它所看到的消息。 如果您之前曾表示邮件是垃圾邮件,然后将其用作火腿,则程序会将其从垃圾邮件数据库中删除,反之亦然,如果您指示电子邮件是好的,但后来又决定将其用作垃圾邮件.

See also

Refer to the following resources for more information on working with SpamAssassin:

The sa-learn manual page (man 1 sa-learn)SpamAssassin Home Page ()Rum SpamAssassin with Postfix ()Stop Spam on your Postfix Server with SpamAssassin ()Bayes Theorem Explained Like You're Five ()

标签: #centos7网络唤醒