如何使用 ClamAV 和 SpamAssassin 为 Postfix 邮件服务器添加防病毒和垃圾邮件保护 - 第 3 部分
在本Postfix系列的前两篇文章中,您学习了如何通过 phpMyAdmin 设置和管理电子邮件服务器数据库,以及如何配置 Postfix 和 Dovecot 来处理收发邮件。此外,我们还介绍了如何为之前创建的虚拟帐户设置邮件客户端(例如 Thunderbird)。
- 使用 MariaDB 设置 Postfix 邮件服务器和 Dovecot - 第 1 部分
- 如何使用虚拟域用户配置 Postfix 和 Dovecot - 第 2 部分
- 在 Postfix 中安装和配置带有虚拟用户的 RoundCube Webmail 客户端 - 第 4 部分
- 使用防病毒/反垃圾邮件网关 Sagator 保护您的邮件服务器 - 第 5 部分
由于如果不采取防病毒和垃圾邮件的预防措施,任何电子邮件服务器的设置都无法完成,因此我们将在本文中讨论该主题。
请记住,即使*nix 类操作系统通常被认为是无病毒的,但使用其他操作系统的客户端也可能会连接到您的电子邮件服务器。
因此,您需要让他们相信,您已经采取必要措施,尽可能地保护他们免受此类威胁。
为 Postfix 配置 SpamAssassin
在接收电子邮件的过程中,spamassassin 将站在外界和您服务器上运行的电子邮件服务之间。如果根据其定义规则和配置,它发现收到的邮件是垃圾邮件,它将重写主题行以明确标识它。让我们看看如何操作。
主配置文件是/etc/mail/spamassassin/local.cf
,我们应该确保以下选项可用(如果不存在则添加它们,如果有必要则取消注释):
report_safe 0 required_score 8.0 rewrite_header Subject [SPAM]
- 当report_safe设置为0(推荐值)时,仅通过按照 rewrite_header 修改电子邮件标头来修改传入的垃圾邮件。如果将其设置为1,则将删除该邮件。
- 要设置垃圾邮件过滤器的攻击性,required_score后面必须跟一个整数或十进制数。数字越小,过滤器就越敏感。对于服务于许多(约 100 个)电子邮件帐户的大型系统,建议将required_score设置为8.0到10.0之间的某个值。
保存这些更改后,启用并启动垃圾邮件过滤服务,然后更新垃圾邮件规则:
# systemctl enable spamassassin # systemctl start spamassassin # sa-update
perldoc Mail::SpamAssassin::Conf
如需更多配置选项,您可能需要通过在命令行中运行来参考文档。
整合 Postfix 与 SpamAssassin
为了有效地整合 Postfix 和 spamassassin,我们需要创建一个专门的用户和组来运行垃圾邮件过滤器守护程序:
# useradd spamd -s /bin/false -d /var/log/spamassassin
接下来,在底部添加以下行/etc/postfix/master.cf
:
spamassassin unix - n n - - pipe flags=R user=spamd argv=/usr/bin/spamc -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}
并在顶部指出 spamassassin 将充当content_filter:
-o content_filter=spamassassin
最后,重新启动 Postfix 以应用更改:
# systemctl restart postfix
为了验证SpamAssassin是否正常工作并能检测到传入的垃圾邮件,我们提供了一项称为GTUBE(未经请求的批量电子邮件通用测试)的测试。
要执行此测试,请从您的网络之外的域(例如 Yahoo!、Hotmail 或 Gmail)向驻留在您的电子邮件服务器中的帐户发送一封电子邮件。将主题行设置为您想要的任何内容,并在邮件正文中包含以下文本:
XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
例如,从我的 Gmail 帐户发送邮件正文中的上述文本将产生以下结果:
并在日志中显示相应的通知:
# journalctl | grep spam
如上图所示,这封电子邮件的垃圾邮件评分为1002.3。此外,您可以直接从命令行测试spamassassin :
# spamassassin -D < /usr/share/doc/spamassassin-3.4.0/sample-spam.txt
上述命令将产生一些非常详细的输出,其中应包括以下内容:
如果这些测试不成功,您可能需要参考spamassassin 集成指南。
启动 ClamAV 并更新病毒定义
首先,我们需要编辑/etc/clamd.d/scan.conf
。取消注释以下行:
LocalSocket /var/run/clamd.scan/clamd.sock
并注释掉或者删除该行:
Example
然后启用并启动 clamav 扫描仪守护程序:
# systemctl enable clamd@scan.service # systemctl start clamd@scan.service
并且不要忘记将antivirus_can_scan_system SELinux 布尔值设置为1:
# setsebool -P antivirus_can_scan_system 1
此时,最好检查一下服务的状态:
如上图所示,我们的病毒特征已超过7 天。要更新它们,我们将使用作为clamav-update包的一部分安装的freshclam工具。
更新病毒定义的最简单方法是通过按需要频繁执行的cron 作业(例如,每天一次,在服务器时间凌晨 1 点执行,如下例所示,就足够了):
00 01 * * * root /usr/share/clamav/freshclam-sleep
您也可以手动更新病毒定义,但在此之前您还必须删除或注释掉以下行/etc/freshclam.conf
。
Example
现在您应该可以运行:
# freshclam
这将根据需要更新病毒定义:
测试 ClamAV 电子邮件中的病毒
为了验证ClamAV是否正常工作,让我们下载一个测试病毒(可以从 http://www.eicar.org/download/eicar.com 获取)到 example@linuxnewz.com 的 Maildir(位于/home/vmail/linuxnewz.com/example/Maildir)来模拟作为邮件附件收到的受感染文件:
# cd /home/vmail/linuxnewz.com/example/Maildir # wget http://www.eicar.org/download/eicar.com
然后递归扫描/home/vmail/linuxnewz.com目录:
# clamscan --infected --remove --recursive /home/vmail/linuxnewz.com
现在,请随意设置此扫描以通过 cronjob 运行。创建一个名为的文件/etc/cron.daily/dailyclamscan
,插入以下行:
#!/bin/bash SCAN_DIR="/home/vmail/linuxnewz.com" LOG_FILE="/var/log/clamav/dailyclamscan.log" touch $LOG_FILE /usr/bin/clamscan --infected --remove --recursive $SCAN_DIR >> $LOG_FILE
并授予执行权限:
# chmod +x /etc/cron.daily/dailyclamscan
上述 cronjob 将递归扫描邮件服务器目录并留下其操作日志/var/log/clamav/dailyclamscan.log
(确保/var/log/clamav目录存在)。
让我们看看当我们将eicar.com文件从example@linuxnewz.com发送到linuxsay@linuxnewz.com时会发生什么:
概括
如果您按照本教程和本系列前两篇文章中概述的步骤操作,您现在就拥有一个具有垃圾邮件和防病毒保护功能的 Postfix 电子邮件服务器。
免责声明:请注意,服务器安全是一个庞大的主题,无法在像这样的短系列中充分涵盖。
因此,我强烈建议您熟悉本系列中使用的工具及其手册页。尽管我已尽力介绍与此主题相关的基本概念,但不要以为读完本系列后您就完全有能力在生产环境中设置和维护电子邮件服务器。
本系列旨在作为 Linux 中邮件服务器管理的起点,而不是详尽的指南。
您可能会想到其他可以丰富本系列的想法。如果是这样,请随时使用下面的评论表给我们留言。我们也欢迎您提出问题和其他建议——我们期待您的回复!